diff --git a/examples/06_IEA-15-240-RWT/IEA-15-240-RWT_VolturnUS-S.yaml b/examples/06_IEA-15-240-RWT/IEA-15-240-RWT_VolturnUS-S.yaml index f245ec008..508ae457c 100644 --- a/examples/06_IEA-15-240-RWT/IEA-15-240-RWT_VolturnUS-S.yaml +++ b/examples/06_IEA-15-240-RWT/IEA-15-240-RWT_VolturnUS-S.yaml @@ -9,6 +9,7 @@ assembly: rotor_diameter: 241.94 rated_power: 15.e+6 lifetime: 25.0 + marine_hydro: False components: blade: outer_shape_bem: diff --git a/examples/13_DTQP/gen_oloc.py b/examples/13_DTQP/gen_oloc.py index 61e344f11..12735747d 100644 --- a/examples/13_DTQP/gen_oloc.py +++ b/examples/13_DTQP/gen_oloc.py @@ -11,6 +11,8 @@ from pCrunch import LoadsAnalysis, PowerProduction, FatigueParams import pandas as pd +import matplotlib.pyplot as plt + import numpy as np @@ -24,7 +26,7 @@ fname_modeling_options = mydir + os.sep + "modeling_options.yaml" modeling_options = sch.load_modeling_yaml(fname_modeling_options) - fname_wt_input = mydir + os.sep + "IEA-15-floating.yaml" + fname_wt_input = os.path.join(this_dir,"..","06_IEA-15-240-RWT", "IEA-15-240-RWT_VolturnUS-S.yaml") wt_init = sch.load_geometry_yaml(fname_wt_input) fname_analysis_options = mydir + os.sep + "analysis_options.yaml" @@ -73,6 +75,7 @@ WindFile_name = [''] * dlc_generator.n_cases level2_disturbance = [] + fig,ax = plt.subplots(1) for i_case in range(dlc_generator.n_cases): dlc_generator.cases[i_case].AnalysisTime = dlc_generator.cases[i_case].analysis_time + dlc_generator.cases[i_case].transient_time @@ -95,6 +98,13 @@ tt = ts_file['t'] level2_disturbance.append({'Time':tt, 'Wind': u_h}) + ax.plot(tt,u_h) + ax.set_xlim([tt[0],tt[-1]]) + ax.set_xlabel('Time [s]') + ax.set_ylabel('Wind Speed [m/s]') + + plt.show() + # Linear Model diff --git a/examples/19_DFSM/IEA_15_MW/IEA_w_TMD_Cp_Ct_Cq.txt b/examples/19_DFSM/IEA_15_MW/IEA_w_TMD_Cp_Ct_Cq.txt new file mode 100644 index 000000000..d68da04e0 --- /dev/null +++ b/examples/19_DFSM/IEA_15_MW/IEA_w_TMD_Cp_Ct_Cq.txt @@ -0,0 +1,36 @@ +# ----- Rotor performance tables for the WEIS Turbine wind turbine ----- +# ------------ Written on May-15-24 using the ROSCO toolbox ------------ + +# Pitch angle vector, 5 entries - x axis (matrix columns) (deg) +-5.0 3.75 12.5 21.25 30.0 +# TSR vector, 5 entries - y axis (matrix rows) (-) +2.0 4.5 7.0 9.5 12.0 +# Wind speed vector - z axis (m/s) +10.66 + +# Power coefficient + +0.007424 0.027901 0.048885 0.060368 0.044839 +0.154181 0.243819 0.160565 0.021548 -0.147753 +0.446518 0.370316 0.119840 -0.274910 -0.582696 +0.383138 0.419921 -0.034150 -0.838584 -1.334299 +0.204352 0.423209 -0.313032 -1.696288 -2.553034 + + +# Thrust coefficient + +0.068605 0.069383 0.074022 0.074255 0.052424 +0.270813 0.300864 0.185946 0.032251 -0.123781 +0.727893 0.484291 0.148635 -0.224945 -0.416426 +1.050977 0.605789 0.007677 -0.624404 -0.785844 +1.364539 0.695969 -0.217703 -1.124732 -1.261919 + + +# Torque coefficient + +0.003730 0.014017 0.024559 0.030328 0.022526 +0.034426 0.054440 0.035851 0.004811 -0.032990 +0.064092 0.053154 0.017201 -0.039460 -0.083639 +0.040522 0.044413 -0.003612 -0.088692 -0.141121 +0.017110 0.035435 -0.026210 -0.142031 -0.213766 + diff --git a/examples/19_DFSM/IEA_15_MW/IEA_w_TMD_DISCON.IN b/examples/19_DFSM/IEA_15_MW/IEA_w_TMD_DISCON.IN new file mode 100644 index 000000000..ef41debfc --- /dev/null +++ b/examples/19_DFSM/IEA_15_MW/IEA_w_TMD_DISCON.IN @@ -0,0 +1,198 @@ +! Controller parameter input file for the WEIS Turbine wind turbine +! - File written using ROSCO version 2.9.0 controller tuning logic on 05/15/24 + +!------- SIMULATION CONTROL ------------------------------------------------------------ +0 ! LoggingLevel - {0: write no debug files, 1: write standard output .dbg-file, 2: LoggingLevel 1 + ROSCO LocalVars (.dbg2) 3: LoggingLevel 2 + complete avrSWAP-array (.dbg3)} +0 ! DT_Out - {Time step to output .dbg* files, or 0 to match sampling period of OpenFAST} +1 ! Ext_Interface - (0 - use standard bladed interface, 1 - Use the extened DLL interface introduced in OpenFAST 3.5.0.) +0 ! Echo - (0 - no Echo, 1 - Echo input data to .echo) + +!------- CONTROLLER FLAGS ------------------------------------------------- +2 ! F_LPFType - (1: first-order low-pass filter, 2: second-order low-pass filter), [rad/s] (currently filters generator speed and pitch control signals +0 ! IPC_ControlMode - Turn Individual Pitch Control (IPC) for fatigue load reductions (pitch contribution) {0: off, 1: 1P reductions, 2: 1P+2P reductions} +2 ! VS_ControlMode - Generator torque control mode in above rated conditions (0- no torque control, 1- k*omega^2 with PI transitions, 2- WSE TSR Tracking, 3- Power-based TSR Tracking)} +0 ! VS_ConstPower - Do constant power torque control, where above rated torque varies, 0 for constant torque} +1 ! PC_ControlMode - Blade pitch control mode {0: No pitch, fix to fine pitch, 1: active PI blade pitch control} +0 ! Y_ControlMode - Yaw control mode {0: no yaw control, 1: yaw rate control, 2: yaw-by-IPC} +1 ! SS_Mode - Setpoint Smoother mode {0: no setpoint smoothing, 1: introduce setpoint smoothing} +0 ! PRC_Mode - Power reference tracking mode{0: use standard rotor speed set points, 1: use PRC rotor speed setpoints} +2 ! WE_Mode - Wind speed estimator mode {0: One-second low pass filtered hub height wind speed, 1: Immersion and Invariance Estimator, 2: Extended Kalman Filter} +1 ! PS_Mode - Pitch saturation mode {0: no pitch saturation, 1: implement pitch saturation} +0 ! SD_Mode - Shutdown mode {0: no shutdown procedure, 1: pitch to max pitch at shutdown} +2 ! Fl_Mode - Floating specific feedback mode {0: no nacelle velocity feedback, 1: feed back translational velocity, 2: feed back rotational veloicty} +0 ! TD_Mode - Tower damper mode (0- no tower damper, 1- feed back translational nacelle accelleration to pitch angle +0 ! TRA_Mode - Tower resonance avoidance mode (0- no tower resonsnace avoidance, 1- use torque control setpoints to avoid a specific frequency +0 ! Flp_Mode - Flap control mode {0: no flap control, 1: steady state flap angle, 2: Proportional flap control, 2: Cyclic (1P) flap control} +0 ! OL_Mode - Open loop control mode {0: no open loop control, 1: open loop control vs. time, 2: rotor position control} +2 ! PA_Mode - Pitch actuator mode {0 - not used, 1 - first order filter, 2 - second order filter} +0 ! PF_Mode - Pitch fault mode {0 - not used, 1 - constant offset on one or more blades} +0 ! AWC_Mode - Active wake control {0 - not used, 1 - complex number method, 2 - Coleman transform method} +0 ! Ext_Mode - External control mode {0 - not used, 1 - call external dynamic library} +0 ! ZMQ_Mode - Fuse ZeroMQ interface {0: unused, 1: Yaw Control} +0 ! CC_Mode - Cable control mode [0- unused, 1- User defined, 2- Open loop control] +0 ! StC_Mode - Structural control mode [0- unused, 1- User defined, 2- Open loop control] + +!------- FILTERS ---------------------------------------------------------- +1.16667 ! F_LPFCornerFreq - Corner frequency (-3dB point) in the low-pass filters, [rad/s] +0.70000 ! F_LPFDamping - Damping coefficient {used only when F_FilterType = 2} [-] +1 ! F_NumNotchFilts - Number of notch filters placed on sensors +2.5480 ! F_NotchFreqs - Natural frequency of the notch filters. Array with length F_NumNotchFilts +0.0000 ! F_NotchBetaNum - Damping value of numerator (determines the width of notch). Array with length F_NumNotchFilts, [-] +0.2500 ! F_NotchBetaDen - Damping value of denominator (determines the depth of notch). Array with length F_NumNotchFilts, [-] +0 ! F_GenSpdNotch_N - Number of notch filters on generator speed +0 ! F_GenSpdNotch_Ind - Indices of notch filters on generator speed +1 ! F_TwrTopNotch_N - Number of notch filters on tower top acceleration signal +1 ! F_TwrTopNotch_Ind - Indices of notch filters on tower top acceleration signal +0.62830 ! F_SSCornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the setpoint smoother, [rad/s]. +0.20944 ! F_WECornerFreq - Corner frequency (-3dB point) in the first order low pass filter for the wind speed estimate [rad/s]. +0.17952 ! F_YawErr - Low pass filter corner frequency for yaw controller [rad/s]. +0.200000 1.000000 ! F_FlCornerFreq - Natural frequency and damping in the second order low pass filter of the tower-top fore-aft motion for floating feedback control [rad/s, -]. +0.01042 ! F_FlHighPassFreq - Natural frequency of first-order high-pass filter for nacelle fore-aft motion [rad/s]. +0.0000 1.0000 ! F_FlpCornerFreq - Corner frequency and damping in the second order low pass filter of the blade root bending moment for flap control + +!------- BLADE PITCH CONTROL ---------------------------------------------- +30 ! PC_GS_n - Amount of gain-scheduling table entries +0.066305 0.085213 0.103294 0.120631 0.137326 0.153490 0.169241 0.184683 0.199904 0.214979 0.225816 0.235506 0.245172 0.254811 0.264423 0.274011 0.283579 0.293132 0.302678 0.312224 0.321782 0.331362 0.340978 0.350643 0.360374 0.370187 0.377616 0.384634 0.391440 0.398053 ! PC_GS_angles - Gain-schedule table: pitch angles [rad]. +-1.610223 -1.364941 -1.169954 -1.011231 -0.879515 -0.768455 -0.673545 -0.591500 -0.519871 -0.456793 -0.400821 -0.350818 -0.305878 -0.265269 -0.228393 -0.194758 -0.163955 -0.135641 -0.109526 -0.085363 -0.062942 -0.042079 -0.022620 -0.004425 0.012623 0.028630 0.043689 0.057881 0.071280 0.083949 ! PC_GS_KP - Gain-schedule table: pitch controller kp gains [s]. +-0.157080 -0.139136 -0.124871 -0.113259 -0.103623 -0.095498 -0.088555 -0.082553 -0.077313 -0.072698 -0.068603 -0.064945 -0.061657 -0.058687 -0.055989 -0.053528 -0.051275 -0.049203 -0.047293 -0.045525 -0.043885 -0.042358 -0.040935 -0.039604 -0.038357 -0.037186 -0.036084 -0.035046 -0.034065 -0.033139 ! PC_GS_KI - Gain-schedule table: pitch controller ki gains [-]. +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_KD - Gain-schedule table: pitch controller kd gains +0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ! PC_GS_TF - Gain-schedule table: pitch controller tf gains (derivative filter) +1.570000000000 ! PC_MaxPit - Maximum physical pitch limit, [rad]. +0.000000000000 ! PC_MinPit - Minimum physical pitch limit, [rad]. +0.034910000000 ! PC_MaxRat - Maximum pitch rate (in absolute value) in pitch controller, [rad/s]. +-0.03491000000 ! PC_MinRat - Minimum pitch rate (in absolute value) in pitch controller, [rad/s]. +0.784390000000 ! PC_RefSpd - Desired (reference) HSS speed for pitch controller, [rad/s]. +0.000000000000 ! PC_FinePit - Record 5: Below-rated pitch angle set-point, [rad] +0.017450000000 ! PC_Switch - Angle above lowest minimum pitch angle for switch, [rad] + +!------- INDIVIDUAL PITCH CONTROL ----------------------------------------- +8.444444 10.555556 ! IPC_Vramp - Start and end wind speeds for cut-in ramp function. First entry: IPC inactive, second entry: IPC fully active. [m/s] +2 ! IPC_SatMode - IPC Saturation method (0 - no saturation (except by PC_MinPit), 1 - saturate by PS_BldPitchMin, 2 - saturate sotfly (full IPC cycle) by PC_MinPit, 3 - saturate softly by PS_BldPitchMin) +0.3 ! IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from IPC), [rad] +0.000e+00 0.000e+00 ! IPC_KP - Proportional gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000e+00 0.000e+00 ! IPC_KI - Integral gain for the individual pitch controller: first parameter for 1P reductions, second for 2P reductions, [-] +0.000000 0.000000 ! IPC_aziOffset - Phase offset added to the azimuth angle for the individual pitch controller, [rad]. +0.0 ! IPC_CornerFreqAct - Corner frequency of the first-order actuators model, to induce a phase lag in the IPC signal {0: Disable}, [rad/s] + +!------- VS TORQUE CONTROL ------------------------------------------------ +95.89835000000 ! VS_GenEff - Generator efficiency mechanical power -> electrical power, [should match the efficiency defined in the generator properties!], [%] +19941178.32865 ! VS_ArSatTq - Above rated generator torque PI control saturation, [Nm] +1500000.000000 ! VS_MaxRat - Maximum torque rate (in absolute value) in torque controller, [Nm/s]. +21935296.16152 ! VS_MaxTq - Maximum generator torque in Region 3 (HSS side), [Nm]. +0.000000000000 ! VS_MinTq - Minimum generator torque (HSS side), [Nm]. +0.523600000000 ! VS_MinOMSpd - Minimum generator speed [rad/s] +41120178.24429 ! VS_Rgn2K - Generator torque constant in Region 2 (HSS side). Only used in VS_ControlMode = 1,3 +15000000.00000 ! VS_RtPwr - Wind turbine rated power [W] +19941178.32865 ! VS_RtTq - Rated torque, [Nm]. +0.784390000000 ! VS_RefSpd - Rated generator speed [rad/s] +1 ! VS_n - Number of generator PI torque controller gains +-35354946.04566 ! VS_KP - Proportional gain for generator PI torque controller [-]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +-5039983.48064 ! VS_KI - Integral gain for generator PI torque controller [s]. (Only used in the transitional 2.5 region if VS_ControlMode =/ 2) +9.00 ! VS_TSRopt - Power-maximizing region 2 tip-speed-ratio. Only used in VS_ControlMode = 2. +0.314000000000 ! VS_PwrFiltF - Low pass filter on power used to determine generator speed set point. Only used in VS_ControlMode = 3. + +!------- SETPOINT SMOOTHER --------------------------------------------- +1.00000 ! SS_VSGain - Variable speed torque controller setpoint smoother gain, [-]. +0.00100 ! SS_PCGain - Collective pitch controller setpoint smoother gain, [-]. + +!------- POWER REFERENCE TRACKING -------------------------------------- +2 ! PRC_n - Number of elements in PRC_WindSpeeds and PRC_GenSpeeds array +0.07854 ! PRC_LPF_Freq - Frequency of the low pass filter on the wind speed estimate used to set PRC_GenSpeeds [rad/s] +3.0000 25.0000 ! PRC_WindSpeeds - Array of wind speeds used in rotor speed vs. wind speed lookup table [m/s] +0.7917 0.7917 ! PRC_GenSpeeds - Array of generator speeds corresponding to PRC_WindSpeeds [rad/s] + +!------- WIND SPEED ESTIMATOR --------------------------------------------- +121.114 ! WE_BladeRadius - Blade length (distance from hub center to blade tip), [m] +1 ! WE_CP_n - Amount of parameters in the Cp array +0.0 ! WE_CP - Parameters that define the parameterized CP(lambda) function +0.0 ! WE_Gamma - Adaption gain of the wind speed estimator algorithm [m/rad] +1.0 ! WE_GearboxRatio - Gearbox ratio [>=1], [-] +349998852.82236 ! WE_Jtot - Total drivetrain inertia, including blades, hub and casted generator inertia to LSS, [kg m^2] +1.225 ! WE_RhoAir - Air density, [kg m^-3] +"IEA_w_TMD_Cp_Ct_Cq.txt" ! PerfFileName - File containing rotor performance tables (Cp,Ct,Cq) (absolute path or relative to this file) +5 5 ! PerfTableSize - Size of rotor performance tables, first number refers to number of blade pitch angles, second number referse to number of tip-speed ratios +60 ! WE_FOPoles_N - Number of first-order system poles used in EKF +3.0000 3.2605 3.5211 3.7816 4.0421 4.3027 4.5632 4.8238 5.0843 5.3448 5.6054 5.8659 6.1264 6.3870 6.6475 6.9080 7.1686 7.4291 7.6897 7.9502 8.2107 8.4713 8.7318 8.9923 9.2529 9.5134 9.7739 10.0345 10.2950 10.5556 11.0370 11.5185 12.0000 12.4815 12.9630 13.4444 13.9259 14.4074 14.8889 15.3704 15.8519 16.3333 16.8148 17.2963 17.7778 18.2593 18.7407 19.2222 19.7037 20.1852 20.6667 21.1481 21.6296 22.1111 22.5926 23.0741 23.5556 24.0370 24.5185 25.0000 ! WE_FOPoles_v - Wind speeds corresponding to first-order system poles [m/s] +-0.03001030 -0.03261656 -0.03522282 -0.03782908 -0.04043533 -0.04304159 -0.04564785 -0.04825411 -0.05086037 -0.05346663 -0.05607288 -0.05867914 -0.06128540 -0.06389166 -0.06649792 -0.06910418 -0.07171044 -0.07431669 -0.07692295 -0.07952921 -0.08213547 -0.08474173 -0.08734799 -0.08995424 -0.09256050 -0.09516676 -0.09777302 -0.10037928 -0.10298554 -0.10559180 -0.04313162 -0.05220621 -0.06151535 -0.07105737 -0.08086064 -0.09098176 -0.10038395 -0.10991325 -0.12007038 -0.13095334 -0.14423775 -0.15850428 -0.17326717 -0.18850407 -0.20419768 -0.22033588 -0.23691183 -0.25392413 -0.27137703 -0.28928060 -0.30765099 -0.32730915 -0.35780823 -0.39028706 -0.42486044 -0.46165586 -0.48655001 -0.51127963 -0.53690643 -0.56346794 ! WE_FOPoles - First order system poles [1/s] + +!------- YAW CONTROL ------------------------------------------------------ +0.00000 ! Y_uSwitch - Wind speed to switch between Y_ErrThresh. If zero, only the second value of Y_ErrThresh is used [m/s] +4.000000 8.000000 ! Y_ErrThresh - Yaw error threshold/deadbands. Turbine begins to yaw when it passes this. If Y_uSwitch is zero, only the second value is used. [deg]. +0.00870 ! Y_Rate - Yaw rate [rad/s] +0.00000 ! Y_MErrSet - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from yaw-by-IPC), [rad] +0.00000 ! Y_IPC_KP - Yaw-by-IPC proportional controller gain Kp +0.00000 ! Y_IPC_KI - Yaw-by-IPC integral controller gain Ki + +!------- TOWER CONTROL ------------------------------------------------------ +0.00000 ! TRA_ExclSpeed - Rotor speed for exclusion [LSS, rad/s] +0.00000 ! TRA_ExclBand - Size of the rotor frequency exclusion band [LSS, rad/s]. Torque controller reference will be TRA_ExclSpeed +/- TRA_ExlBand/2 +0.00000e+00 ! TRA_RateLimit - Rate limit of change in rotor speed reference [LSS, rad/s]. Suggested to be VS_RefSpd/400. +0.00000 ! FA_KI - Integral gain for the fore-aft tower damper controller, [rad*s/m] +0.00000 ! FA_HPFCornerFreq - Corner frequency (-3dB point) in the high-pass filter on the fore-aft acceleration signal [rad/s] +0.00000 ! FA_IntSat - Integrator saturation (maximum signal amplitude contribution to pitch from FA damper), [rad] + +!------- MINIMUM PITCH SATURATION ------------------------------------------- +60 ! PS_BldPitchMin_N - Number of values in minimum blade pitch lookup table (should equal number of values in PS_WindSpeeds and PS_BldPitchMin) +3.000 3.261 3.521 3.782 4.042 4.303 4.563 4.824 5.084 5.345 5.605 5.866 6.126 6.387 6.648 6.908 7.169 7.429 7.690 7.950 8.211 8.471 8.732 8.992 9.253 9.513 9.774 10.034 10.295 10.556 11.037 11.519 12.000 12.481 12.963 13.444 13.926 14.407 14.889 15.370 15.852 16.333 16.815 17.296 17.778 18.259 18.741 19.222 19.704 20.185 20.667 21.148 21.630 22.111 22.593 23.074 23.556 24.037 24.519 25.000 ! PS_WindSpeeds - Wind speeds corresponding to minimum blade pitch angles [m/s] +0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.010 0.022 0.034 0.045 0.057 0.068 0.076 0.085 0.093 0.101 0.109 0.117 0.125 0.133 0.142 0.150 0.098 0.106 0.115 0.127 0.143 0.164 0.195 0.222 0.229 0.236 0.243 0.000 ! PS_BldPitchMin - Minimum blade pitch angles [rad] + +!------- SHUTDOWN ----------------------------------------------------------- +0.698100000000 ! SD_MaxPit - Maximum blade pitch angle to initiate shutdown, [rad] +0.418880000000 ! SD_CornerFreq - Cutoff Frequency for first order low-pass filter for blade pitch angle, [rad/s] + +!------- Floating ----------------------------------------------------------- +1 ! Fl_n - Number of Fl_Kp gains in gain scheduling, optional with default of 1 +-9.5427 ! Fl_Kp - Nacelle pitching proportional feedback gain [s] +11.0833 ! Fl_U - Wind speeds for scheduling Fl_Kp, optional if Fl_Kp is single value [m/s] + +!------- FLAP ACTUATION ----------------------------------------------------- +0.000000000000 ! Flp_Angle - Initial or steady state flap angle [rad] +0.00000000e+00 ! Flp_Kp - Blade root bending moment proportional gain for flap control [s] +0.00000000e+00 ! Flp_Ki - Flap displacement integral gain for flap control [-] +0.174500000000 ! Flp_MaxPit - Maximum (and minimum) flap pitch angle [rad] + +!------- Open Loop Control ----------------------------------------------------- +"unused" ! OL_Filename - Input file with open loop timeseries (absolute path or relative to this file) +0 ! Ind_Breakpoint - The column in OL_Filename that contains the breakpoint (time if OL_Mode = 1) + 0 0 0 ! Ind_BldPitch - The columns in OL_Filename that contains the blade pitch (1,2,3) inputs in rad [array] +0 ! Ind_GenTq - The column in OL_Filename that contains the generator torque in Nm +0 ! Ind_YawRate - The column in OL_Filename that contains the yaw rate in rad/s +0 ! Ind_Azimuth - The column in OL_Filename that contains the desired azimuth position in rad (used if OL_Mode = 2) +0.0000 0.0000 0.0000 0.0000 ! RP_Gains - PID gains and Tf of derivative for rotor position control (used if OL_Mode = 2) +0 ! Ind_CableControl - The column(s) in OL_Filename that contains the cable control inputs in m [Used with CC_Mode = 2, must be the same size as CC_Group_N] +0 ! Ind_StructControl - The column(s) in OL_Filename that contains the structural control inputs [Used with StC_Mode = 2, must be the same size as StC_Group_N] + +!------- Pitch Actuator Model ----------------------------------------------------- +1.570800000000 ! PA_CornerFreq - Pitch actuator bandwidth/cut-off frequency [rad/s] +0.707000000000 ! PA_Damping - Pitch actuator damping ratio [-, unused if PA_Mode = 1] + +!------- Pitch Actuator Faults ----------------------------------------------------- +0.00000000 0.00000000 0.00000000 ! PF_Offsets - Constant blade pitch offsets for blades 1-3 [rad] + +!------- Active Wake Control ----------------------------------------------------- +1 ! AWC_NumModes - Number of user-defined AWC forcing modes +1 ! AWC_n - Azimuthal mode number(s) (i.e., the number and direction of the lobes of the wake structure) +1 ! AWC_harmonic - Harmonic(s) to apply in the AWC Inverse Coleman Transformation (only used when AWC_Mode = 2) +0.0500 ! AWC_freq - Frequency(s) of forcing mode(s) [Hz] +1.0000 ! AWC_amp - Pitch amplitude(s) of individual forcing mode(s) [deg] +0.0000 ! AWC_clockangle - Initial angle(s) of forcing mode(s) [deg] + +!------- External Controller Interface ----------------------------------------------------- +"unused" ! DLL_FileName - Name/location of the dynamic library in the Bladed-DLL format +"unused" ! DLL_InFile - Name of input file sent to the DLL (-) +"DISCON" ! DLL_ProcName - Name of procedure in DLL to be called (-) + +!------- ZeroMQ Interface --------------------------------------------------------- +"tcp://localhost:5555" ! ZMQ_CommAddress - Communication address for ZMQ server, (e.g. "tcp://localhost:5555") +1.000000 ! ZMQ_UpdatePeriod - Update period at zmq interface to send measurements and wait for setpoint [sec.] +0 ! ZMQ_ID - Integer identifier of turbine + +!------- Cable Control --------------------------------------------------------- +1 ! CC_Group_N - Number of cable control groups +0 ! CC_GroupIndex - First index for cable control group, should correspond to deltaL +20.000000 ! CC_ActTau - Time constant for line actuator [s] + +!------- Structural Controllers --------------------------------------------------------- +1 ! StC_Group_N - Number of cable control groups +0 ! StC_GroupIndex - First index for structural control group, options specified in ServoDyn summary output diff --git a/examples/19_DFSM/README.md b/examples/19_DFSM/README.md new file mode 100644 index 000000000..b3758ee23 --- /dev/null +++ b/examples/19_DFSM/README.md @@ -0,0 +1,24 @@ +## Overview +This example introduces the basic workings of the derivative function surrogate modeling (DFSM) approach, and demonstrates a usecase for closed-loop simulations. + +Checkout `run_simulation.py` on how to use the DFSM with ROSCO for closed-loop simulation. + +The DFSM is available in the `dfsm_1p6.pkl` file. This model has been specifically built for simulating load cases from DLC 1.6. + +## Model Description +The DFSM approximates the system response as a linear parameter varying (LPV) state-space model with the following structure: + +dx/dt = A(w)x + B(w)u + +y = C(w)x + D(w)u + +The states (x) considered in the model are platform pitch (PtfmPitch), tower top displacement (fore-aft) (TTDspFA), generator speed (GenSpeed), and their first-time derivatives. + +The controls/inputs (u) are rotor average wind speed (w) (RtVAvgxh), generator torque (GenTq), blade pitch (BldPitch1), and wave elevation (Wave1Elev). + +The outputs (y) are tower-base fore-aft shear force (TwrBsFxt), side-to-side moment (TwrBsMyt), tower top translational and rotational accelerations (YawBrTAxp, NcIMURAys), and the generator power (GenPwr). + +## Model Development + + + diff --git a/examples/19_DFSM/RM1.yaml b/examples/19_DFSM/RM1.yaml new file mode 100644 index 000000000..ef708ccaa --- /dev/null +++ b/examples/19_DFSM/RM1.yaml @@ -0,0 +1,987 @@ +name: MHK RM1 +assembly: {turbine_class: I, turbulence_class: B, drivetrain: geared, rotor_orientation: upwind, number_of_blades: 2, hub_height: -25.2, rotor_diameter: 20.0, rated_power: 500000, lifetime: 25.0, marine_hydro: true} +components: + blade: + outer_shape_bem: + airfoil_position: + grid: &id001 [0.0, 0.016666666666666666, 0.05, 0.08333333333333333, 0.11666666666666667, 0.15000000000000002, 0.18333333333333332, 0.21666666666666667, 0.25, 0.2833333333333333, 0.31666666666666665, 0.35, 0.38333333333333336, 0.4166666666666667, 0.44999999999999996, 0.4833333333333333, 0.5166666666666667, 0.55, 0.5833333333333334, 0.6166666666666667, 0.6499999999999999, 0.6833333333333333, 0.7166666666666667, 0.75, 0.7833333333333333, 0.8166666666666667, 0.8500000000000001, 0.8833333333333333, 0.9166666666666666, 0.9500000000000001, 0.9833333333333333, 1.0] + labels: [NACA6_1000, NACA6_1000, NACA6_0864, NACA6_0629, NACA6_0444, NACA6_0329, NACA6_0276, NACA6_0259, NACA6_0247, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240, NACA6_0240] + chord: + grid: *id001 + values: [0.8, 0.8, 0.894, 1.118, 1.386, 1.61, 1.704, 1.662, 1.619, 1.577, 1.534, 1.492, 1.45, 1.407, 1.365, 1.322, 1.279, 1.235, 1.192, 1.148, 1.103, 1.058, 1.012, 0.966, 0.92, 0.872, 0.824, 0.776, 0.726, 0.676, 0.626, 0.626] + twist: + grid: *id001 + values: [0.22444934180647075, 0.22444934180647075, 0.22444934180647075, 0.22444934180647075, 0.22444934180647075, 0.22444934180647075, 0.22444934180647075, 0.20141099568014562, 0.182212373908208, 0.1658062789394613, 0.1520181778487061, 0.13997540600994524, 0.12967796342317867, 0.12060225131280816, 0.11257373675363426, 0.1054178868204575, 0.09913470151327791, 0.09337511498169662, 0.08813912722571364, 0.08325220532012952, 0.07871434926494426, 0.07435102613495843, 0.07033676885537149, 0.06632251157578452, 0.06230825429619756, 0.058468529941810045, 0.05462880558742251, 0.05061454830783556, 0.0466002910282486, 0.042411500823462206, 0.03804817769347638, 0.03804817769347638] + pitch_axis: + grid: *id001 + values: [0.5, 0.49071825396825397, 0.459, 0.4099472222222222, 0.3611440476190476, 0.3294, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32] + reference_axis: + x: + grid: *id001 + values: [-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0] + y: + grid: *id001 + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + z: + grid: *id001 + values: [0.0, 0.15, 0.45, 0.75, 1.05, 1.35, 1.65, 1.95, 2.25, 2.55, 2.85, 3.15, 3.45, 3.75, 4.05, 4.35, 4.65, 4.95, 5.25, 5.55, 5.85, 6.15, 6.45, 6.75, 7.05, 7.35, 7.65, 7.95, 8.25, 8.55, 8.85, 9.0] + internal_structure_2d_fem: + reference_axis: + x: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0, 0.017927254421009235, 0.04109498585036197, 0.0694133295001114, 0.10093956284485817, 0.13373096335920276, 0.1735397389870922, 0.20849545443912093, 0.22951354509947788, 0.24384433268043473, 0.2498132008590583, 0.25028811784244964, 0.24939986751287166, 0.2474948825479514, 0.24464044933568185, 0.24098808462171836, 0.2364924891508088, 0.2315294661480854, 0.22318132011225872, 0.20501055669934568, 0.17342012363636425, 0.12433480584123438, 0.07234940243374963, 0.013808931623088154, -0.04965660218175578, -0.11436010751525384, -0.18380667727600022, -0.2695700493574572, -0.36837312601691447, -0.4816050193474183, -0.6035893261970865, -0.7333735567347408, -0.8602026821607676, -0.9895743950626118, -1.1197364725526204, -1.2567849268716618, -1.401602523724949, -1.5531511571253716, -1.7110231316969464, -1.9546458376616889, -2.1216802152556147, -2.2924730996379994, -2.4670749165198758, -2.647980282848751, -2.8349366171144617, -3.0279675976038907, -3.2264755653995576, -3.4307396940691453, -3.7110555584534786, -3.9999999999999964] + y: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + z: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0, 2.34, 4.68, 7.02, 9.36, 11.700000000000001, 14.625, 17.55, 19.776985412082468, 22.00397082416493, 24.230956236247398, 26.457941648329864, 28.68492706041233, 31.13238085174112, 33.57983464306991, 36.0272884343987, 38.47474222572749, 41.05659048741643, 43.63843874910536, 46.22028701079431, 48.80213527248324, 51.38398353417219, 53.688697753675136, 55.99341197317808, 58.298126192681025, 60.60284041218397, 62.90755463168692, 65.26010287719268, 67.61265112269844, 69.96519936820421, 72.31774761370995, 74.67029585921573, 76.90225798158134, 79.13422010394696, 81.36618222631259, 83.5981443486782, 85.83010647104382, 88.06206859340944, 90.29403071577507, 93.60000000000001, 95.79375000000002, 97.9875, 100.18124999999999, 102.375, 104.56875000000001, 106.7625, 108.95624999999998, 111.14999999999999, 114.075, 117.0] + webs: + - name: web0 + rotation: + fixed: twist + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [-0.27217629557079365, -0.2721151609261069, -0.2692829996121141, -0.26160974693508077, -0.25004194631128646, -0.23552614115701065, -0.21467775307891476, -0.19255079961979954, -0.1759878586013097, -0.16057133469540177, -0.14711714321398614, -0.1357292521960968, -0.12536451335231813, -0.11391930868991773, -0.10288584723243112, -0.09240330785216998, -0.08263112720589656, -0.07331222604686127, -0.06502804112954641, -0.05771742601208772, -0.05096319090575163, -0.04469782752454605, -0.03947910486050121, -0.03456265676425803, -0.0299081112103219, -0.025446129064633893, -0.02121583510652544, -0.01724217523108515, -0.013528184408954813, -0.01004307189737569, -0.006635163107666419, -0.0032467588547257582, 3.369564839038511e-05, 0.0035492823924747176, 0.007421594235148177, 0.011928778895197866, 0.017136732150624685, 0.0223974077244561, 0.027490996670335385, 0.03379973253909251, 0.036799280794358936, 0.037810153747541306, 0.037988462925127336, 0.03771818081838972, 0.036975584119978255, 0.03575998726335209, 0.03405925501568549, 0.03168024471993639, 0.027365297139775716, 0.021683756060763528] + offset_y_pa: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975] + values: [-0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35, -0.35] + start_nd_arc: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.2052832866238972, 0.20964207801130544, 0.2149018865021589, 0.2211786870016678, 0.22903035857348808, 0.2632168495782914, 0.27831044914309483, 0.2930124745949063, 0.30261391549635497, 0.31130358335135594, 0.31904970539697797, 0.3256090681579934, 0.3310228858092881, 0.33626258590946945, 0.3410021225330599, 0.34509685716110255, 0.3488669831656817, 0.35252871253565177, 0.3560425836181651, 0.35953269434147644, 0.36310788745157013, 0.36671126887658234, 0.36979454677314966, 0.37275424684679154, 0.3755814765841752, 0.3781683955745834, 0.3804897412053756, 0.3825158515808853, 0.38446668864538414, 0.38611001330565603, 0.38760290744857984, 0.38890422752099757, 0.3901260320670572, 0.3913748668211914, 0.39261097608454115, 0.393791433992064, 0.39484956703302526, 0.3957404616114903, 0.396416104578199, 0.3974006481268957, 0.398057730369124, 0.39862540875484753, 0.39915197364275734, 0.3997504096013997, 0.4004755530100168, 0.4014112142437175, 0.40256531874178636, 0.4039350776826077, 0.4060203151084342, 0.30965107872575415] + end_nd_arc: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.7080814332146719, 0.7037423184648783, 0.7008720704020883, 0.7007663914444887, 0.7014592994444613, 0.6768679674127758, 0.6727146826521084, 0.6665855901258702, 0.6615117667853724, 0.6570238242449686, 0.6527854239454647, 0.6489450337329036, 0.6457010897759348, 0.6426373447872222, 0.6397304476851019, 0.6372172220396691, 0.6349562902863888, 0.6328310710695207, 0.6306883214049477, 0.6284198886110399, 0.625976290774459, 0.6234387088130607, 0.6212498617518806, 0.6191409856801369, 0.6171284439735927, 0.6153285411296807, 0.6137670769244926, 0.6124613204850784, 0.6111892493226305, 0.6102069121938857, 0.6093859212554675, 0.6087785128819696, 0.6082571237269621, 0.6077665190995171, 0.607327721214209, 0.6069739930175891, 0.6067360730529229, 0.6065570916290545, 0.6064314244574617, 0.6060239165038073, 0.605638948335295, 0.6051614931583904, 0.6046499467538473, 0.604025344365607, 0.6032306569974505, 0.6021794408845366, 0.6008659971061063, 0.5992775043717204, 0.5968041461122746, 0.692699164916447] + - name: web1 + rotation: + fixed: twist + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [-0.27217629557079365, -0.2721151609261069, -0.2692829996121141, -0.26160974693508077, -0.25004194631128646, -0.23552614115701065, -0.21467775307891476, -0.19255079961979954, -0.1759878586013097, -0.16057133469540177, -0.14711714321398614, -0.1357292521960968, -0.12536451335231813, -0.11391930868991773, -0.10288584723243112, -0.09240330785216998, -0.08263112720589656, -0.07331222604686127, -0.06502804112954641, -0.05771742601208772, -0.05096319090575163, -0.04469782752454605, -0.03947910486050121, -0.03456265676425803, -0.0299081112103219, -0.025446129064633893, -0.02121583510652544, -0.01724217523108515, -0.013528184408954813, -0.01004307189737569, -0.006635163107666419, -0.0032467588547257582, 3.369564839038511e-05, 0.0035492823924747176, 0.007421594235148177, 0.011928778895197866, 0.017136732150624685, 0.0223974077244561, 0.027490996670335385, 0.03379973253909251, 0.036799280794358936, 0.037810153747541306, 0.037988462925127336, 0.03771818081838972, 0.036975584119978255, 0.03575998726335209, 0.03405925501568549, 0.03168024471993639, 0.027365297139775716, 0.021683756060763528] + offset_y_pa: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975] + values: [0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35] + start_nd_arc: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.2052832866238972, 0.20964207801130544, 0.2149018865021589, 0.2211786870016678, 0.22903035857348808, 0.21432434252219454, 0.22721916960625643, 0.24091615782689985, 0.25024959398087304, 0.25855217659672053, 0.2657772762134616, 0.27170867241351976, 0.2762811405401291, 0.28034087811498737, 0.28356137556758043, 0.28588849421683543, 0.28765014773657943, 0.2891424803294219, 0.2905634928566717, 0.2921045778649552, 0.2936170793405667, 0.29504142747498485, 0.296096765660087, 0.2969483997712954, 0.29760044158053645, 0.2979717733931913, 0.298040921433441, 0.2977473092468652, 0.2973310091829169, 0.2965510123421598, 0.2955306665236286, 0.2942097191303531, 0.29278574635814536, 0.2912043768473332, 0.28941972485622375, 0.2874618856589628, 0.2852848282657877, 0.28283499128404316, 0.2800707469127728, 0.2755467145869285, 0.27213080194406253, 0.2682087011680181, 0.26375371883707327, 0.25883772005119166, 0.2534414260595001, 0.24755145464380687, 0.24106669116904295, 0.23383283884309086, 0.22274237902285932, 0.30965107872575415] + end_nd_arc: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.7080814332146719, 0.7037423184648783, 0.7008720704020883, 0.7007663914444887, 0.7014592994444613, 0.7259533873235942, 0.7244160359508459, 0.719542268196627, 0.7147460993855903, 0.7107032736927151, 0.7069857529396322, 0.7037098437317258, 0.7012133082971896, 0.6992141373119866, 0.6977275760629951, 0.6969007859022075, 0.6965816500644172, 0.6965624167571665, 0.6964551326409836, 0.6960796440803874, 0.695653364376506, 0.6952527583374107, 0.6950683549292908, 0.6950526452867478, 0.6952060054775661, 0.6956189537771706, 0.6963061461301319, 0.6973197569087212, 0.698415938670108, 0.6998563826114835, 0.7015494651502238, 0.7035611910126097, 0.7056751855391313, 0.7079970272037814, 0.710562414103539, 0.7133274024103817, 0.7163044118337935, 0.7194566100475068, 0.7227687143391472, 0.7278657435938146, 0.7315440181162757, 0.7355441956432848, 0.7400025779922411, 0.7448809650304351, 0.7502019203156253, 0.7559881053807376, 0.7623406936078805, 0.7694044080150518, 0.7802119228449619, 0.692699164916447] + layers: + - name: UV_protection + material: Gelcoat + thickness: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005, 0.0005] + start_nd_arc: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + end_nd_arc: + values: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + - name: Shell_skin + material: glass_triax + fiber_orientation: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + thickness: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.05, 0.044591322442333034, 0.03941021393803537, 0.03441462790857325, 0.029675608520261305, 0.025, 0.018746440238161553, 0.012935658206036059, 0.009215755156010518, 0.006529885804404432, 0.004719386872874692, 0.0036740071088946866, 0.0030103299903238034, 0.0024577650586213515, 0.002138757820887468, 0.0020411160305407556, 0.002001744944261837, 0.002000350046275909, 0.0020000346243765573, 0.0020000022429495484, 0.002000000000106529, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.0018889580666709893, 0.0016806403193428728, 0.0013888318819373973, 0.001170340950441993, 0.0010489579419444472, 0.001008605037770434, 0.001001324884824214, 0.001, 0.001, 0.001] + start_nd_arc: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + end_nd_arc: + values: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + - name: Spar_Cap_SS + material: CarbonUD + thickness: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0001, 0.0018481775565967556, 0.0056292722526006525, 0.011723847305571057, 0.019594784226386087, 0.028704964525923835, 0.0410171094534032, 0.053377264971817634, 0.06217255679907582, 0.06992457442919356, 0.07617032462588876, 0.08038052326853298, 0.08385343152685465, 0.08770720185923539, 0.09117522872167859, 0.09420279562329452, 0.09648670099195718, 0.09805824310543443, 0.09846752029205291, 0.09806788151575038, 0.09724141797579387, 0.09579771132961162, 0.09429333850733454, 0.09263041986511257, 0.09088095459802573, 0.08919218901957637, 0.08753523764006314, 0.08583969427275749, 0.08405524044868973, 0.08213237824356773, 0.08001280913405627, 0.07766056294487361, 0.07520222644191554, 0.07232533050986578, 0.06884782957973191, 0.06416031816637194, 0.0578329884057097, 0.05088707390724323, 0.04349789291675291, 0.033022909870011316, 0.027018764366165116, 0.022341670505153635, 0.01882057390364337, 0.015488026573407695, 0.012390370179697097, 0.009487939911486443, 0.006886703058694333, 0.004684019325428318, 0.0025120129030554894, 0.0010000000000001236] + fiber_orientation: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + width: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.8999999986667392, 0.899999489275702, 0.8999939509463861, 0.8998931476365687, 0.8994447807605057, 0.8959475304746178, 0.8821965355067473, 0.838237396119912, 0.6508977582590109, 0.294] + offset_y_pa: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + rotation: + fixed: twist + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [-0.27217629557079365, -0.2721151609261069, -0.2692829996121141, -0.26160974693508077, -0.25004194631128646, -0.23552614115701065, -0.21467775307891476, -0.19255079961979954, -0.1759878586013097, -0.16057133469540177, -0.14711714321398614, -0.1357292521960968, -0.12536451335231813, -0.11391930868991773, -0.10288584723243112, -0.09240330785216998, -0.08263112720589656, -0.07331222604686127, -0.06502804112954641, -0.05771742601208772, -0.05096319090575163, -0.04469782752454605, -0.03947910486050121, -0.03456265676425803, -0.0299081112103219, -0.025446129064633893, -0.02121583510652544, -0.01724217523108515, -0.013528184408954813, -0.01004307189737569, -0.006635163107666419, -0.0032467588547257582, 3.369564839038511e-05, 0.0035492823924747176, 0.007421594235148177, 0.011928778895197866, 0.017136732150624685, 0.0223974077244561, 0.027490996670335385, 0.03379973253909251, 0.036799280794358936, 0.037810153747541306, 0.037988462925127336, 0.03771818081838972, 0.036975584119978255, 0.03575998726335209, 0.03405925501568549, 0.03168024471993639, 0.027365297139775716, 0.021683756060763528] + side: suction + start_nd_arc: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.17773574415091226, 0.1821383302374979, 0.1871009332318214, 0.19249766577284227, 0.19909487385335925, 0.20737659863174399, 0.2199563361667385, 0.23350030064214203, 0.2427908278512117, 0.2510319817189903, 0.25817999326235086, 0.2640222447594565, 0.26847452041144376, 0.2723675397633476, 0.27537254893766394, 0.2774500732168921, 0.27892856252835135, 0.2801147338948552, 0.2812396202718402, 0.2825052719168474, 0.28372563674648144, 0.28484219419451967, 0.2856108338834729, 0.28616541775075416, 0.28651108512022494, 0.2865704975066126, 0.28632375439281, 0.2857054110482848, 0.28495802005810855, 0.28384007813924583, 0.28247070235731614, 0.2807878820118879, 0.2790021706772168, 0.2770373700835421, 0.2748470321944108, 0.27247329866326264, 0.26987814641494146, 0.26700229102005213, 0.26380367016835893, 0.2585962219214307, 0.2546725630541853, 0.2501832999132221, 0.24509579187321692, 0.2394959247202817, 0.23337437446593906, 0.2270055310048491, 0.22114542327869086, 0.2182172070860106, 0.2303158393899657, 0.1687033757034503] + end_nd_arc: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.23283082909688213, 0.23714582578511298, 0.24270283977249643, 0.2498597082304933, 0.25896584329361694, 0.27000269483004224, 0.2854347760314214, 0.30032302329985644, 0.3099798482861786, 0.3187574972802518, 0.32659579098178837, 0.33325185317686107, 0.33878684218138727, 0.3441915018402132, 0.3491447797198609, 0.35348722226045426, 0.3575399900923965, 0.36150232782620695, 0.3653044117612391, 0.36905455788355945, 0.37290635264139294, 0.3767955526039047, 0.3801508362312212, 0.38339266024185553, 0.3865129652584084, 0.38940305959635185, 0.3920303297107056, 0.394374898051104, 0.39665263900019554, 0.39863435510624, 0.40047841686523705, 0.40214407322390117, 0.40373137751611976, 0.4053705328593945, 0.40702377694728326, 0.4086404375840501, 0.4101533481409244, 0.41151876487676886, 0.41268977856418043, 0.41446252322104926, 0.4156954509495021, 0.41688836508912697, 0.41810427553004403, 0.4194529930165829, 0.42097165234280315, 0.4224528900690906, 0.4230490209476922, 0.4201789285679513, 0.399162484943435, 0.450598781748058] + - name: Spar_Cap_PS + material: CarbonUD + thickness: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0001, 0.0018481775565967556, 0.0056292722526006525, 0.011723847305571057, 0.019594784226386087, 0.028704964525923835, 0.0410171094534032, 0.053377264971817634, 0.06217255679907582, 0.06992457442919356, 0.07617032462588876, 0.08038052326853298, 0.08385343152685465, 0.08770720185923539, 0.09117522872167859, 0.09420279562329452, 0.09648670099195718, 0.09805824310543443, 0.09846752029205291, 0.09806788151575038, 0.09724141797579387, 0.09579771132961162, 0.09429333850733454, 0.09263041986511257, 0.09088095459802573, 0.08919218901957637, 0.08753523764006314, 0.08583969427275749, 0.08405524044868973, 0.08213237824356773, 0.08001280913405627, 0.07766056294487361, 0.07520222644191554, 0.07232533050986578, 0.06884782957973191, 0.06416031816637194, 0.0578329884057097, 0.05088707390724323, 0.04349789291675291, 0.033022909870011316, 0.027018764366165116, 0.022341670505153635, 0.01882057390364337, 0.015488026573407695, 0.012390370179697097, 0.009487939911486443, 0.006886703058694333, 0.004684019325428318, 0.0025120129030554894, 0.0010000000000001236] + fiber_orientation: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + width: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.8999999986667392, 0.899999489275702, 0.8999939509463861, 0.8998931476365687, 0.8994447807605057, 0.8959475304746178, 0.8821965355067473, 0.838237396119912, 0.6508977582590109, 0.294] + offset_y_pa: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + rotation: + fixed: twist + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [-0.27217629557079365, -0.2721151609261069, -0.2692829996121141, -0.26160974693508077, -0.25004194631128646, -0.23552614115701065, -0.21467775307891476, -0.19255079961979954, -0.1759878586013097, -0.16057133469540177, -0.14711714321398614, -0.1357292521960968, -0.12536451335231813, -0.11391930868991773, -0.10288584723243112, -0.09240330785216998, -0.08263112720589656, -0.07331222604686127, -0.06502804112954641, -0.05771742601208772, -0.05096319090575163, -0.04469782752454605, -0.03947910486050121, -0.03456265676425803, -0.0299081112103219, -0.025446129064633893, -0.02121583510652544, -0.01724217523108515, -0.013528184408954813, -0.01004307189737569, -0.006635163107666419, -0.0032467588547257582, 3.369564839038511e-05, 0.0035492823924747176, 0.007421594235148177, 0.011928778895197866, 0.017136732150624685, 0.0223974077244561, 0.027490996670335385, 0.03379973253909251, 0.036799280794358936, 0.037810153747541306, 0.037988462925127336, 0.03771818081838972, 0.036975584119978255, 0.03575998726335209, 0.03405925501568549, 0.03168024471993639, 0.027365297139775716, 0.021683756060763528] + side: pressure + start_nd_arc: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.6805338907416869, 0.6762385706910707, 0.6730711171317508, 0.6720853702156632, 0.6715238147243324, 0.669935389335444, 0.6655671806707737, 0.6593685054871514, 0.6542602412429819, 0.6497245342820102, 0.6454069412689026, 0.6414525764647957, 0.638054167874096, 0.6347842632835325, 0.6316279880452333, 0.6288379737893852, 0.6262727455681317, 0.6238260766815458, 0.6213782858463365, 0.6188336115785243, 0.6161050675653428, 0.6132734389653898, 0.6108151075104965, 0.6084315592635592, 0.6061360135894776, 0.6040465000196825, 0.6021893219907264, 0.6005759965995441, 0.5989893575552869, 0.597678693729204, 0.5965148532340123, 0.5955479758414505, 0.5946638354193096, 0.5937850706722259, 0.5929333561343686, 0.5921546654447176, 0.5914841613577797, 0.5908616137911897, 0.5902818381435507, 0.5891481668469944, 0.5882190142913776, 0.587127116089011, 0.5859273639036329, 0.5845492608597633, 0.5829528707258185, 0.5813428646646273, 0.5805691826718496, 0.5831933888206003, 0.6037661157825593, 0.5517514618941431] + end_nd_arc: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.7356289756876568, 0.7312460662386859, 0.7286730236724258, 0.7294474126733143, 0.7313947841645901, 0.7325614855337423, 0.7310456205354565, 0.7261912281448659, 0.7214492616779489, 0.7174500498432717, 0.7138227389883401, 0.7106821848822004, 0.7083664896440395, 0.706608225360398, 0.7054002188274302, 0.7048751228329473, 0.704884173132177, 0.7052136706128975, 0.7054430773357353, 0.7053828975452364, 0.7052857834602544, 0.7052267973747748, 0.7053551098582448, 0.7056588017546606, 0.706137893727661, 0.7068790621094218, 0.707895897308622, 0.7092454836023632, 0.710683976497374, 0.7124729706961983, 0.7145225677419331, 0.7169041670534638, 0.7193930422582125, 0.7221182334480782, 0.7251101008872411, 0.7283218043655051, 0.7317593630837627, 0.7353780876479066, 0.7391679465393722, 0.7450144681466131, 0.7492419021866944, 0.7538321812649158, 0.75893584756046, 0.7645063291560645, 0.7705501486026827, 0.7767902237288686, 0.782472780340851, 0.785155110302541, 0.7726127613360285, 0.8336468679387509] + - name: LE_reinforcement + material: glass_uni + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8] + values: [0.003, 0.002964285714285715, 0.0029285714285714293, 0.002901379909498383, 0.002874188390425336, 0.0028469968713522894, 0.0028198053522792434, 0.002792613833206198, 0.0027627303925306336, 0.0027328469518550684, 0.0027029635111795037, 0.0026730800705039386, 0.002641555671704317, 0.002610031272904696, 0.002578506874105075, 0.0025469824753054553, 0.002515458076505835, 0.0024873174877451153, 0.002459176898984395, 0.002431036310223674, 0.002402895721462955, 0.0023747551327022364, 0.0023460304898999685, 0.0023173058470977006, 0.0022885812042954317, 0.002259856561493163, 0.002231131918690894, 0.0022038796339245255, 0.0021766273491581572, 0.0021493750643917886, 0.0021221227796254195, 0.0020948704948590495, 0.0020676182100926805, 0.002040365925326312, 0.002] + fiber_orientation: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + midpoint_nd_arc: {fixed: LE} + width: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8] + values: [0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.7999660022114599, 0.799808764223006, 0.7983592796500668, 0.7942584952386328, 0.7823447701815651, 0.7628015030477565, 0.7360619547805919, 0.7000000000000001] + start_nd_arc: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.5000006654037845, 0.5000006654037842, 0.5002060277935696, 0.5006729174479077, 0.5011391259091965, 0.47346462151331714, 0.4718093545618548, 0.47076145665348734, 0.4701871709067392, 0.46981163253812597, 0.46943797907983936, 0.46898315286244396, 0.46840921108356154, 0.46756151597240136, 0.46639944253599985, 0.4650983204499207, 0.4637474479462891, 0.4623814213061447, 0.4610807730844251, 0.4598984578330925, 0.4586957997951826, 0.45750128840566523, 0.4564739644234709, 0.4554830835663568, 0.45451383175095833, 0.4535487072231865, 0.45255836592716747, 0.4515170177124577, 0.45044998957667665, 0.4493632184525854, 0.4482468008288618, 0.4470925325450485, 0.44595052036636745, 0.44475327494726175, 0.4435528144192485, 0.4424682269600974, 0.4418972477649065, 0.44183748532653727, 0.4422768823612798, 0.44254520962559685, 0.5031598823532262, 0.5031598823532264, 0.5031598823532264, 0.5031598823532264, 0.503159882353226, 0.5031598823532264, 0.5031598823532263, 0.5031598823532261, 0.5031598823532264, 0.5031598823532263] + end_nd_arc: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.5000006654037845, 0.5000006654037842, 0.5002060277935696, 0.5006729174479077, 0.5011391259091965, 0.5291322625784711, 0.5300124122193507, 0.5301594323492335, 0.5299107446267098, 0.5300120908148028, 0.5302520214971173, 0.5305205825668036, 0.5309090526568446, 0.5314050378185041, 0.5319747587868415, 0.5326868973775315, 0.5336242724476626, 0.5347259492451241, 0.535805032186113, 0.53683115647017, 0.5379675472573262, 0.5392376069917852, 0.5405095220659138, 0.5419072991140025, 0.5434043918737881, 0.5449554290807325, 0.5465197662097414, 0.5481121172705192, 0.5497340953029762, 0.5514025757565802, 0.5531425470581248, 0.5549647025112825, 0.5568162147596158, 0.5587999286456888, 0.5608022930052419, 0.5626370123602913, 0.5638345482721141, 0.5643234669632766, 0.5640428823451725, 0.5637745550808557, 0.5031598823532262, 0.5031598823532264, 0.5031598823532264, 0.5031598823532264, 0.503159882353226, 0.5031598823532264, 0.5031598823532263, 0.5031598823532261, 0.5031598823532264, 0.5031598823532263] + - name: TE_reinforcement_SS + material: glass_uni + side: suction + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8] + values: [0.014070829560136859, 0.022160430655669527, 0.030782769539623476, 0.03726831832745499, 0.043340757160609436, 0.04868802898982519, 0.053420517202720286, 0.05799770760351344, 0.0634520411459693, 0.06869127985025639, 0.07351107288889727, 0.0772925251716927, 0.0799890785380285, 0.08059191749850508, 0.0786524779131348, 0.07482392045113133, 0.06840200991343892, 0.061943604714406436, 0.05516030075943382, 0.048439556662600414, 0.042695699138683374, 0.03746845247962702, 0.03188144091497945, 0.02618334012805381, 0.02035123618867921, 0.014980729143164732, 0.010329533513665235, 0.006853678213629035, 0.004827463124691154, 0.003932953371568727, 0.0032868057459755104, 0.002775391173787103, 0.0023260236603008825, 0.001947794263911153, 0.0015403609743885973] + fiber_orientation: + grid: [0.1, 0.8] + values: [0.0, 0.0] + width: + grid: [0.1, 0.8] + values: [0.5, 0.5] + start_nd_arc: {fixed: TE} + - name: TE_reinforcement_PS + material: glass_uni + side: pressure + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8] + values: [0.014070829560136859, 0.022160430655669527, 0.030782769539623476, 0.03726831832745499, 0.043340757160609436, 0.04868802898982519, 0.053420517202720286, 0.05799770760351344, 0.0634520411459693, 0.06869127985025639, 0.07351107288889727, 0.0772925251716927, 0.0799890785380285, 0.08059191749850508, 0.0786524779131348, 0.07482392045113133, 0.06840200991343892, 0.061943604714406436, 0.05516030075943382, 0.048439556662600414, 0.042695699138683374, 0.03746845247962702, 0.03188144091497945, 0.02618334012805381, 0.02035123618867921, 0.014980729143164732, 0.010329533513665235, 0.006853678213629035, 0.004827463124691154, 0.003932953371568727, 0.0032868057459755104, 0.002775391173787103, 0.0023260236603008825, 0.001947794263911153, 0.0015403609743885973] + fiber_orientation: + grid: [0.1, 0.8] + values: [0.0, 0.0] + width: + grid: [0.1, 0.8] + values: [0.5, 0.5] + end_nd_arc: {fixed: TE} + - name: TE_SS_filler + material: medium_density_foam + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8] + values: [0.06, 0.058035714285714295, 0.05607142857142858, 0.054575895022411045, 0.05308036147339351, 0.05158482792437597, 0.050089294375358445, 0.048593760826340926, 0.04695017158918484, 0.04530658235202875, 0.04366299311487268, 0.042019403877716605, 0.04028556194373745, 0.038551720009758296, 0.03681787807577915, 0.03508403614180001, 0.03335019420782087, 0.03180246182598129, 0.030254729444141714, 0.028706997062302113, 0.027159264680462522, 0.02561153229862294, 0.024031676944498204, 0.022451821590373466, 0.020871966236248707, 0.01929211088212396, 0.017712255527999203, 0.01621337986584891, 0.014714504203698625, 0.013215628541548327, 0.01171675287939804, 0.010217877217247743, 0.008719001555097456, 0.00722012589294716, 0.005] + start_nd_arc: + fixed: TE_reinforcement_SS + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [1.0, 1.0, 1.0, 1.0, 1.0, 0.034792275665721295, 0.03637691103593488, 0.037123734809841435, 0.03732723357498169, 0.037625286422922954, 0.03800877651079859, 0.03846089356522486, 0.039062400983301826, 0.039902201153814154, 0.04098457265677613, 0.04224286057975668, 0.04367301531335843, 0.04521532996186206, 0.04670266193855488, 0.048082936648173424, 0.04954484216383981, 0.05108519911632503, 0.0525222235265268, 0.05401513471727859, 0.05555660007676866, 0.057129201160966314, 0.058725875176608655, 0.06037193722378853, 0.06205256607893728, 0.06377459831499666, 0.06555984139328941, 0.06742010622889616, 0.06929400379939055, 0.07129620154214034, 0.07343152486270688, 0.07564841051154847, 0.07793066762554623, 0.0802869299203981, 0.08271450466434516, 0.0865923896108991, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] + end_nd_arc: + fixed: Spar_Cap_SS + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.17773574415091226, 0.1821383302374979, 0.1871009332318214, 0.19249766577284227, 0.19909487385335925, 0.20737659863174399, 0.2199563361667385, 0.23350030064214203, 0.2427908278512117, 0.2510319817189903, 0.25817999326235086, 0.2640222447594565, 0.26847452041144376, 0.2723675397633476, 0.27537254893766394, 0.2774500732168921, 0.27892856252835135, 0.2801147338948552, 0.2812396202718402, 0.2825052719168474, 0.28372563674648144, 0.28484219419451967, 0.2856108338834729, 0.28616541775075416, 0.28651108512022494, 0.2865704975066126, 0.28632375439281, 0.2857054110482848, 0.28495802005810855, 0.28384007813924583, 0.28247070235731614, 0.2807878820118879, 0.2790021706772168, 0.2770373700835421, 0.2748470321944108, 0.27247329866326264, 0.26987814641494146, 0.26700229102005213, 0.26380367016835893, 0.2585962219214307, 0.2546725630541853, 0.2501832999132221, 0.24509579187321692, 0.2394959247202817, 0.23337437446593906, 0.2270055310048491, 0.22114542327869086, 0.2182172070860106, 0.2303158393899657, 0.1687033757034503] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975] + - name: LE_SS_filler + material: medium_density_foam + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8] + values: [0.06, 0.058035714285714295, 0.05607142857142858, 0.054575895022411045, 0.05308036147339351, 0.05158482792437597, 0.050089294375358445, 0.048593760826340926, 0.04695017158918484, 0.04530658235202875, 0.04366299311487268, 0.042019403877716605, 0.04028556194373745, 0.038551720009758296, 0.03681787807577915, 0.03508403614180001, 0.03335019420782087, 0.03180246182598129, 0.030254729444141714, 0.028706997062302113, 0.027159264680462522, 0.02561153229862294, 0.024031676944498204, 0.022451821590373466, 0.020871966236248707, 0.01929211088212396, 0.017712255527999203, 0.01621337986584891, 0.014714504203698625, 0.013215628541548327, 0.01171675287939804, 0.010217877217247743, 0.008719001555097456, 0.00722012589294716, 0.005] + start_nd_arc: + fixed: Spar_Cap_SS + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.23283082909688213, 0.23714582578511298, 0.24270283977249643, 0.2498597082304933, 0.25896584329361694, 0.27000269483004224, 0.2854347760314214, 0.30032302329985644, 0.3099798482861786, 0.3187574972802518, 0.32659579098178837, 0.33325185317686107, 0.33878684218138727, 0.3441915018402132, 0.3491447797198609, 0.35348722226045426, 0.3575399900923965, 0.36150232782620695, 0.3653044117612391, 0.36905455788355945, 0.37290635264139294, 0.3767955526039047, 0.3801508362312212, 0.38339266024185553, 0.3865129652584084, 0.38940305959635185, 0.3920303297107056, 0.394374898051104, 0.39665263900019554, 0.39863435510624, 0.40047841686523705, 0.40214407322390117, 0.40373137751611976, 0.4053705328593945, 0.40702377694728326, 0.4086404375840501, 0.4101533481409244, 0.41151876487676886, 0.41268977856418043, 0.41446252322104926, 0.4156954509495021, 0.41688836508912697, 0.41810427553004403, 0.4194529930165829, 0.42097165234280315, 0.4224528900690906, 0.4230490209476922, 0.4201789285679513, 0.399162484943435, 0.450598781748058] + end_nd_arc: + fixed: LE_reinforcement + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.5000006654037845, 0.5000006654037842, 0.5002060277935696, 0.5006729174479077, 0.5011391259091965, 0.47346462151331714, 0.4718093545618548, 0.47076145665348734, 0.4701871709067392, 0.46981163253812597, 0.46943797907983936, 0.46898315286244396, 0.46840921108356154, 0.46756151597240136, 0.46639944253599985, 0.4650983204499207, 0.4637474479462891, 0.4623814213061447, 0.4610807730844251, 0.4598984578330925, 0.4586957997951826, 0.45750128840566523, 0.4564739644234709, 0.4554830835663568, 0.45451383175095833, 0.4535487072231865, 0.45255836592716747, 0.4515170177124577, 0.45044998957667665, 0.4493632184525854, 0.4482468008288618, 0.4470925325450485, 0.44595052036636745, 0.44475327494726175, 0.4435528144192485, 0.4424682269600974, 0.4418972477649065, 0.44183748532653727, 0.4422768823612798, 0.44254520962559685, 0.5031598823532262, 0.5031598823532264, 0.5031598823532264, 0.5031598823532264, 0.503159882353226, 0.5031598823532264, 0.5031598823532263, 0.5031598823532261, 0.5031598823532264, 0.5031598823532263] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975] + - name: LE_PS_filler + material: medium_density_foam + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8] + values: [0.06, 0.058035714285714295, 0.05607142857142858, 0.054575895022411045, 0.05308036147339351, 0.05158482792437597, 0.050089294375358445, 0.048593760826340926, 0.04695017158918484, 0.04530658235202875, 0.04366299311487268, 0.042019403877716605, 0.04028556194373745, 0.038551720009758296, 0.03681787807577915, 0.03508403614180001, 0.03335019420782087, 0.03180246182598129, 0.030254729444141714, 0.028706997062302113, 0.027159264680462522, 0.02561153229862294, 0.024031676944498204, 0.022451821590373466, 0.020871966236248707, 0.01929211088212396, 0.017712255527999203, 0.01621337986584891, 0.014714504203698625, 0.013215628541548327, 0.01171675287939804, 0.010217877217247743, 0.008719001555097456, 0.00722012589294716, 0.005] + start_nd_arc: + fixed: LE_reinforcement + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.5000006654037845, 0.5000006654037842, 0.5002060277935696, 0.5006729174479077, 0.5011391259091965, 0.5291322625784711, 0.5300124122193507, 0.5301594323492335, 0.5299107446267098, 0.5300120908148028, 0.5302520214971173, 0.5305205825668036, 0.5309090526568446, 0.5314050378185041, 0.5319747587868415, 0.5326868973775315, 0.5336242724476626, 0.5347259492451241, 0.535805032186113, 0.53683115647017, 0.5379675472573262, 0.5392376069917852, 0.5405095220659138, 0.5419072991140025, 0.5434043918737881, 0.5449554290807325, 0.5465197662097414, 0.5481121172705192, 0.5497340953029762, 0.5514025757565802, 0.5531425470581248, 0.5549647025112825, 0.5568162147596158, 0.5587999286456888, 0.5608022930052419, 0.5626370123602913, 0.5638345482721141, 0.5643234669632766, 0.5640428823451725, 0.5637745550808557, 0.5031598823532262, 0.5031598823532264, 0.5031598823532264, 0.5031598823532264, 0.503159882353226, 0.5031598823532264, 0.5031598823532263, 0.5031598823532261, 0.5031598823532264, 0.5031598823532263] + end_nd_arc: + fixed: Spar_Cap_PS + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.6805338907416869, 0.6762385706910707, 0.6730711171317508, 0.6720853702156632, 0.6715238147243324, 0.669935389335444, 0.6655671806707737, 0.6593685054871514, 0.6542602412429819, 0.6497245342820102, 0.6454069412689026, 0.6414525764647957, 0.638054167874096, 0.6347842632835325, 0.6316279880452333, 0.6288379737893852, 0.6262727455681317, 0.6238260766815458, 0.6213782858463365, 0.6188336115785243, 0.6161050675653428, 0.6132734389653898, 0.6108151075104965, 0.6084315592635592, 0.6061360135894776, 0.6040465000196825, 0.6021893219907264, 0.6005759965995441, 0.5989893575552869, 0.597678693729204, 0.5965148532340123, 0.5955479758414505, 0.5946638354193096, 0.5937850706722259, 0.5929333561343686, 0.5921546654447176, 0.5914841613577797, 0.5908616137911897, 0.5902818381435507, 0.5891481668469944, 0.5882190142913776, 0.587127116089011, 0.5859273639036329, 0.5845492608597633, 0.5829528707258185, 0.5813428646646273, 0.5805691826718496, 0.5831933888206003, 0.6037661157825593, 0.5517514618941431] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975] + - name: TE_PS_filler + material: medium_density_foam + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8] + values: [0.06, 0.058035714285714295, 0.05607142857142858, 0.054575895022411045, 0.05308036147339351, 0.05158482792437597, 0.050089294375358445, 0.048593760826340926, 0.04695017158918484, 0.04530658235202875, 0.04366299311487268, 0.042019403877716605, 0.04028556194373745, 0.038551720009758296, 0.03681787807577915, 0.03508403614180001, 0.03335019420782087, 0.03180246182598129, 0.030254729444141714, 0.028706997062302113, 0.027159264680462522, 0.02561153229862294, 0.024031676944498204, 0.022451821590373466, 0.020871966236248707, 0.01929211088212396, 0.017712255527999203, 0.01621337986584891, 0.014714504203698625, 0.013215628541548327, 0.01171675287939804, 0.010217877217247743, 0.008719001555097456, 0.00722012589294716, 0.005] + start_nd_arc: + fixed: Spar_Cap_PS + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.7356289756876568, 0.7312460662386859, 0.7286730236724258, 0.7294474126733143, 0.7313947841645901, 0.7325614855337423, 0.7310456205354565, 0.7261912281448659, 0.7214492616779489, 0.7174500498432717, 0.7138227389883401, 0.7106821848822004, 0.7083664896440395, 0.706608225360398, 0.7054002188274302, 0.7048751228329473, 0.704884173132177, 0.7052136706128975, 0.7054430773357353, 0.7053828975452364, 0.7052857834602544, 0.7052267973747748, 0.7053551098582448, 0.7056588017546606, 0.706137893727661, 0.7068790621094218, 0.707895897308622, 0.7092454836023632, 0.710683976497374, 0.7124729706961983, 0.7145225677419331, 0.7169041670534638, 0.7193930422582125, 0.7221182334480782, 0.7251101008872411, 0.7283218043655051, 0.7317593630837627, 0.7353780876479066, 0.7391679465393722, 0.7450144681466131, 0.7492419021866944, 0.7538321812649158, 0.75893584756046, 0.7645063291560645, 0.7705501486026827, 0.7767902237288686, 0.782472780340851, 0.785155110302541, 0.7726127613360285, 0.8336468679387509] + end_nd_arc: + fixed: TE_reinforcement_PS + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [1.0, 1.0, 1.0, 1.0, 1.0, 0.9652077243342787, 0.963623088964065, 0.9628762651901587, 0.9626727664250184, 0.9623747135770769, 0.9619912234892014, 0.9615391064347752, 0.9609375990166981, 0.9600977988461858, 0.9590154273432239, 0.9577571394202432, 0.9563269846866416, 0.9547846700381379, 0.953297338061445, 0.9519170633518266, 0.9504551578361603, 0.948914800883675, 0.9474777764734732, 0.9459848652827214, 0.9444433999232313, 0.9428707988390338, 0.9412741248233913, 0.9396280627762116, 0.9379474339210627, 0.9362254016850032, 0.9344401586067106, 0.9325798937711037, 0.9307059962006095, 0.9287037984578598, 0.9265684751372931, 0.9243515894884514, 0.9220693323744539, 0.9197130700796018, 0.9172854953356547, 0.9134076103891008, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975] + - name: Shell_skin_inner + material: glass_triax + fiber_orientation: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + thickness: + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + values: [0.05, 0.044591322442333034, 0.03941021393803537, 0.03441462790857325, 0.029675608520261305, 0.025, 0.018746440238161553, 0.012935658206036059, 0.009215755156010518, 0.006529885804404432, 0.004719386872874692, 0.0036740071088946866, 0.0030103299903238034, 0.0024577650586213515, 0.002138757820887468, 0.0020411160305407556, 0.002001744944261837, 0.002000350046275909, 0.0020000346243765573, 0.0020000022429495484, 0.002000000000106529, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.0018889580666709893, 0.0016806403193428728, 0.0013888318819373973, 0.001170340950441993, 0.0010489579419444472, 0.001008605037770434, 0.001001324884824214, 0.001, 0.001, 0.001] + start_nd_arc: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + end_nd_arc: + values: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] + grid: [0.0, 0.02, 0.04, 0.06, 0.08, 0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95, 0.975, 1.0] + - name: web0_skinLE + material: glass_biax + web: web0 + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + values: [0.002, 0.001955882352941177, 0.0019117647058823533, 0.0018781751823215315, 0.0018445856587607098, 0.001810996135199888, 0.0017774066116390667, 0.0017438170880782456, 0.0017069022495966651, 0.0016699874111150846, 0.0016330725726335042, 0.0015961577341519235, 0.0015572158297523914, 0.0015182739253528598, 0.0014793320209533286, 0.0014403901165537974, 0.0014014482121542657, 0.0013666863083910236, 0.0013319244046277818, 0.0012971625008645394, 0.0012624005971012973, 0.0012276386933380555, 0.0011921553110529005, 0.0011566719287677458, 0.001121188546482591, 0.0010857051641974364, 0.0010502217819122813, 0.0010165571948479433, 0.000982892607783605, 0.0009492280207192671, 0.000915563433654929, 0.0008818988465905908, 0.0008482342595262528, 0.0008145696724619145, 0.0007647058823529412, 0.0007316176470588235, 0.0006985294117647059, 0.0006654411764705883, 0.0006323529411764706, 0.0005992647058823529, 0.0005661764705882353, 0.0005330882352941178, 0.0005000000000000001] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + - name: web0_filler + material: medium_density_foam + web: web0 + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + values: [0.043, 0.04188235294117647, 0.04076470588235294, 0.039913771285478794, 0.03906283668860465, 0.038211902091730504, 0.03736096749485635, 0.0365100328979822, 0.03557485698978217, 0.034639681081582135, 0.03370450517338209, 0.03276932926518204, 0.031782801020393915, 0.03079627277560579, 0.029809744530817663, 0.02882321628602953, 0.027836688041241398, 0.026956053145905937, 0.02607541825057048, 0.025194783355235006, 0.024314148459899543, 0.02343351356456408, 0.022534601213340156, 0.021635688862116233, 0.020736776510892303, 0.019837864159668383, 0.01893895180844446, 0.01808611560281456, 0.017233279397184664, 0.016380443191554763, 0.015527606985924867, 0.014674770780294964, 0.013821934574665068, 0.012969098369035169, 0.011705882352941174, 0.010867647058823525, 0.01002941176470588, 0.009191176470588236, 0.008352941176470586, 0.0075147058823529355, 0.006676470588235292, 0.005838235294117648, 0.005000000000000001] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + - name: web0_skinTE + material: glass_biax + web: web0 + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + values: [0.002, 0.001955882352941177, 0.0019117647058823533, 0.0018781751823215315, 0.0018445856587607098, 0.001810996135199888, 0.0017774066116390667, 0.0017438170880782456, 0.0017069022495966651, 0.0016699874111150846, 0.0016330725726335042, 0.0015961577341519235, 0.0015572158297523914, 0.0015182739253528598, 0.0014793320209533286, 0.0014403901165537974, 0.0014014482121542657, 0.0013666863083910236, 0.0013319244046277818, 0.0012971625008645394, 0.0012624005971012973, 0.0012276386933380555, 0.0011921553110529005, 0.0011566719287677458, 0.001121188546482591, 0.0010857051641974364, 0.0010502217819122813, 0.0010165571948479433, 0.000982892607783605, 0.0009492280207192671, 0.000915563433654929, 0.0008818988465905908, 0.0008482342595262528, 0.0008145696724619145, 0.0007647058823529412, 0.0007316176470588235, 0.0006985294117647059, 0.0006654411764705883, 0.0006323529411764706, 0.0005992647058823529, 0.0005661764705882353, 0.0005330882352941178, 0.0005000000000000001] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + - name: web1_skinLE + material: glass_biax + web: web1 + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + values: [0.002, 0.001955882352941177, 0.0019117647058823533, 0.0018781751823215315, 0.0018445856587607098, 0.001810996135199888, 0.0017774066116390667, 0.0017438170880782456, 0.0017069022495966651, 0.0016699874111150846, 0.0016330725726335042, 0.0015961577341519235, 0.0015572158297523914, 0.0015182739253528598, 0.0014793320209533286, 0.0014403901165537974, 0.0014014482121542657, 0.0013666863083910236, 0.0013319244046277818, 0.0012971625008645394, 0.0012624005971012973, 0.0012276386933380555, 0.0011921553110529005, 0.0011566719287677458, 0.001121188546482591, 0.0010857051641974364, 0.0010502217819122813, 0.0010165571948479433, 0.000982892607783605, 0.0009492280207192671, 0.000915563433654929, 0.0008818988465905908, 0.0008482342595262528, 0.0008145696724619145, 0.0007647058823529412, 0.0007316176470588235, 0.0006985294117647059, 0.0006654411764705883, 0.0006323529411764706, 0.0005992647058823529, 0.0005661764705882353, 0.0005330882352941178, 0.0005000000000000001] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + - name: web1_filler + material: medium_density_foam + web: web1 + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + values: [0.043, 0.04188235294117647, 0.04076470588235294, 0.039913771285478794, 0.03906283668860465, 0.038211902091730504, 0.03736096749485635, 0.0365100328979822, 0.03557485698978217, 0.034639681081582135, 0.03370450517338209, 0.03276932926518204, 0.031782801020393915, 0.03079627277560579, 0.029809744530817663, 0.02882321628602953, 0.027836688041241398, 0.026956053145905937, 0.02607541825057048, 0.025194783355235006, 0.024314148459899543, 0.02343351356456408, 0.022534601213340156, 0.021635688862116233, 0.020736776510892303, 0.019837864159668383, 0.01893895180844446, 0.01808611560281456, 0.017233279397184664, 0.016380443191554763, 0.015527606985924867, 0.014674770780294964, 0.013821934574665068, 0.012969098369035169, 0.011705882352941174, 0.010867647058823525, 0.01002941176470588, 0.009191176470588236, 0.008352941176470586, 0.0075147058823529355, 0.006676470588235292, 0.005838235294117648, 0.005000000000000001] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + - name: web1_skinTE + material: glass_biax + web: web1 + thickness: + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + values: [0.002, 0.001955882352941177, 0.0019117647058823533, 0.0018781751823215315, 0.0018445856587607098, 0.001810996135199888, 0.0017774066116390667, 0.0017438170880782456, 0.0017069022495966651, 0.0016699874111150846, 0.0016330725726335042, 0.0015961577341519235, 0.0015572158297523914, 0.0015182739253528598, 0.0014793320209533286, 0.0014403901165537974, 0.0014014482121542657, 0.0013666863083910236, 0.0013319244046277818, 0.0012971625008645394, 0.0012624005971012973, 0.0012276386933380555, 0.0011921553110529005, 0.0011566719287677458, 0.001121188546482591, 0.0010857051641974364, 0.0010502217819122813, 0.0010165571948479433, 0.000982892607783605, 0.0009492280207192671, 0.000915563433654929, 0.0008818988465905908, 0.0008482342595262528, 0.0008145696724619145, 0.0007647058823529412, 0.0007316176470588235, 0.0006985294117647059, 0.0006654411764705883, 0.0006323529411764706, 0.0005992647058823529, 0.0005661764705882353, 0.0005330882352941178, 0.0005000000000000001] + fiber_orientation: + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + grid: [0.1, 0.125, 0.15, 0.1690340633511322, 0.18806812670226436, 0.20710219005339656, 0.22613625340452875, 0.24517031675566095, 0.2660887252285566, 0.2870071337014522, 0.30792554217434787, 0.3288439506472435, 0.350911029806978, 0.3729781089667125, 0.39504518812644707, 0.41711226728618156, 0.4391793464459161, 0.45887775857841995, 0.47857617071092373, 0.49827458284342757, 0.5179729949759314, 0.5376714071084352, 0.5577786570700229, 0.5778859070316106, 0.5979931569931983, 0.618100406954786, 0.6382076569163737, 0.657284256252832, 0.6763608555892903, 0.6954374549257486, 0.7145140542622068, 0.7335906535986652, 0.7526672529351234, 0.7717438522715817, 0.8, 0.8187500000000001, 0.8375, 0.85625, 0.875, 0.89375, 0.9125, 0.9312499999999999, 0.95] + root: {d_f: 0.03, sigma_max: 675000000.0} + joint: {position: 0.0, mass: 0.0, cost: 0.0, bolt: M30, nonmaterial_cost: 0.0, reinforcement_layer_ss: joint_reinf_ss, reinforcement_layer_ps: joint_reinf_ps} + hub: {diameter: 2.0, cone_angle: 0.0, drag_coefficient: 0.0, flange_t2shell_t: 6.0, flange_OD2hub_D: 0.6, flange_ID2OD: 0.8, hub_blade_spacing_margin: 1.2, hub_stress_concentration: 3.0, n_front_brackets: 5, n_rear_brackets: 5, clearance_hub_spinner: 0.5, spin_hole_incr: 1.2, pitch_system_scaling_factor: 0.75, spinner_gust_ws: 70.0, hub_material: cast_iron, spinner_material: glass_uni} + nacelle: + drivetrain: + uptilt: -0.0 + distance_tt_hub: -1.2 + distance_hub_mb: 2.0 + distance_mb_mb: 1.0 + overhang: 4.91 + generator_length: 2.0 + generator_radius_user: 0.25 + generator_mass_user: 8928.0 + generator_rpm_efficiency_user: + grid: [0.0,100] + values: [1.0,1.0] + gear_ratio: 53.0 + gearbox_length_user: 0.0 + gearbox_radius_user: 0.0 + gearbox_mass_user: 0.0 + gearbox_efficiency: 0.92 + damping_ratio: 0.01 + lss_diameter: [0.577, 0.577] + lss_wall_thickness: [0.288, 0.288] + lss_material: steel + hss_length: 1.5 + hss_diameter: [0.288, 0.288] + hss_wall_thickness: [0.144, 0.144] + hss_material: steel + nose_diameter: [0.3, 0.3] + nose_wall_thickness: [0.1, 0.1] + bedplate_wall_thickness: + grid: [0.0, 1.0] + values: [0.05, 0.05] + bedplate_flange_width: 1.0 + bedplate_flange_thickness: 0.05 + bedplate_web_thickness: 0.05 + bedplate_material: steel + mb1Type: CARB + mb2Type: SRB + uptower: true + gear_configuration: eep + planet_numbers: [3, 3, 0] + brake_mass_user: 0.0 + hvac_mass_coefficient: 0.025 + converter_mass_user: 0.0 + transformer_mass_user: 0.0 + # generator: {generator_type: DFIG, rho_Fe: 7700.0, rho_Fes: 7850.0, rho_Copper: 8900.0, rho_PM: 7450.0, B_r: 1.2, P_Fe0e: 1.0, P_Fe0h: 4.0, S_N: -0.002, alpha_p: 1.0995574287564276, b_r_tau_r: 0.45, b_ro: 0.004, b_s_tau_s: 0.45, b_so: 0.004, freq: 60, h_i: 0.001, h_sy0: 0.0, h_w: 0.005, k_fes: 0.9, k_s: 0.2, m: 3, mu_0: 1.2566370614359173e-06, mu_r: 1.06, p: 3.0, phi: 1.5707963267948966, ratio_mw2pp: 0.7, resist_Cu: 2.52e-08, y_tau_pr: 0.8333333, rated_rpm: 1200.0, cofi: 0.9, y_tau_p: 0.8, sigma: 21500.0, rad_ag: 0.61, len_s: 0.49, h_s: 0.08, I_0: 40.0, B_symax: 1.3, S_Nmax: -0.2, h_0: 0.01, k_fillr: 0.55, k_fills: 0.65, q1: 5, q2: 4, C_Cu: 4.786, C_Fe: 0.556, C_Fes: 0.50139, C_PM: 50.0, mass_coefficient: 0.0, q3: 4, d_r: 0.0, h_m: 0.0, n_r: 0.0, t_wr: 0.0, n_s: 0.0, b_st: 0.0, d_s: 0.0, t_ws: 0.0} + tower: + outer_shape_bem: + reference_axis: + x: + grid: [0.375, 0.5833333333333334, 0.7916666666666666, 1.0] + values: [0, 0, 0, 0] + y: + grid: [0.375, 0.5833333333333334, 0.7916666666666666, 1.0] + values: [0, 0, 0, 0] + z: + grid: [0.375, 0.5833333333333334, 0.7916666666666666, 1.0] + values: [-9.0, -14.0, -19.0, -24.0] + outer_diameter: + grid: [0.375, 0.5833333333333334, 0.7916666666666666, 1.0] + values: [0.3253, 0.3253, 0.3253, 0.3253] + drag_coefficient: + grid: [0.375, 0.5833333333333334, 0.7916666666666666, 1.0] + values: [0.2, 0.2, 0.2, 0.2] + internal_structure_2d_fem: + outfitting_factor: 1.07 + reference_axis: + x: + grid: [0.0, 1.0] + values: [0.0, 0.0] + y: + grid: [0.0, 1.0] + values: [0.0, 0.0] + z: + grid: [0.0, 7.728811463372998e-05, 0.10047454902385111, 0.10055183713848485, 0.20094909804770222, 0.20102638616233595, 0.30142364707155334, 0.30150093518618704, 0.40189819609540445, 0.40197548421003826, 0.5023727451192556, 0.5024500332338894, 0.6028472941431067, 0.6029245822577405, 0.7033218431669578, 0.7033991312815916, 0.8037963921908089, 0.8038736803054427, 0.90427094121466, 0.9043482293292937, 1.0] + values: [15, 15.01, 28, 28.01, 41, 41.01, 54, 54.01, 67, 67.01, 80, 80.01, 93, 93.01, 106, 106.01, 119, 119.01, 132, 132.01, 144.386] + layers: + - name: tower_wall + material: steel + thickness: + grid: [0.0, 0.10047454902385111, 0.20094909804770222, 0.30142364707155334, 0.40189819609540445, 0.5023727451192556, 0.6028472941431067, 0.7033218431669578, 0.8037963921908089, 0.90427094121466, 1.0] + values: [0.09, 0.0870568244887821, 0.06969791129654272, 0.06659467020278927, 0.048969783194233195, 0.04562355995431616, 0.028128174258004363, 0.025616868141627953, 0.009881156462835017, 0.009941082963793929, 0.005931142626464429] + floating_platform: + joints: + - name: 'downstream_upper_col' + location: [28.0, 0.0, 6.0] + cylindrical: false + axial_coeffs: &ax_coeffs_col + Cd: 0.0 + Ca: 0.0 + Cp: 0.0 + - name: 'downstream_lower_col' + location: [28.0, 0.0, -10.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'upstream_upper_col' + location: [-28.0, 0.0, 6.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'upstream_lower_col' + location: [-28.0, 0.0, -10.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'starboard_upper_col' + location: [0.0, -12.0, 6.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'starboard_lower_col' + location: [0.0, -12.0, -10.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'port_upper_col' + location: [0.0, 12.0, 6.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'port_lower_col' + location: [0.0, 12.0, -10.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'anchor_1' + location: [-152.0, -50.0, -50.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'anchor_2' + location: [-152.0, 50.0, -50.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'anchor_3' + location: [152.0, -50.0, -50.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'anchor_4' + location: [152.0, 50.0, -50.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'anchor_5' + location: [152.0, 0.0, -50.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + - name: 'anchor_6' + location: [-152.0, 0.0, -50.0] + cylindrical: false + axial_coeffs: *ax_coeffs_col + members: + - name: 'downstream_col' + joint1: 'downstream_lower_col' + joint2: 'downstream_upper_col' + outer_shape: &col_out + shape: circular + outer_diameter: + grid: [0.0, 1.0] + values: [8.0, 8.0] + internal_structure: &col_int + layers: + - name: col_twall + material: steel + thickness: + grid: [0.0, 1.0] + values: [0.02, 0.02] + ballasts: + # - variable_flag: False + # material: slurry + # volume: 40 + # grid: [0.0, 0.05] + - variable_flag: True + grid: [0.0, 0.4] + bulkhead: + material: 'steel' + thickness: + grid: [0.0, 0.4, 1.0] + values: [0.02, 0.02, 0.02] + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'upstream_col' + joint1: 'upstream_lower_col' + joint2: 'upstream_upper_col' + outer_shape: *col_out + internal_structure: *col_int + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'starboard_col' + joint1: 'starboard_lower_col' + joint2: 'starboard_upper_col' + outer_shape: *col_out + internal_structure: *col_int + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'port_col' + joint1: 'port_lower_col' + joint2: 'port_upper_col' + outer_shape: *col_out + internal_structure: *col_int + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'upper_pontoon_DP' + joint1: 'downstream_upper_col' + joint2: 'port_upper_col' + outer_shape: &pon_out + shape: circular + outer_diameter: + grid: [0.0, 1.0] + values: [2.0, 2.0] + internal_structure: &pon_int_upper + layers: + - name: pon_twall + material: steel + thickness: + grid: [0.0, 1.0] + values: [0.02, 0.02] + # ballasts: + # - variable_flag: False + # material: slurry + # volume: 519 + # grid: [0.0, 0.05] + # - variable_flag: True + # grid: [0.0, 1.0] + # bulkhead: + # material: '' + # thickness: + # grid: [] + # values: [] + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'upper_pontoon_DS' + joint1: 'downstream_upper_col' + joint2: 'starboard_upper_col' + outer_shape: *pon_out + internal_structure: *pon_int_upper + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'upper_pontoon_UP' + joint1: 'upstream_upper_col' + joint2: 'port_upper_col' + outer_shape: *pon_out + internal_structure: *pon_int_upper + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'upper_pontoon_US' + joint1: 'upstream_upper_col' + joint2: 'starboard_upper_col' + outer_shape: *pon_out + internal_structure: *pon_int_upper + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'upper_pontoon_PS' + joint1: 'port_upper_col' + joint2: 'starboard_upper_col' + outer_shape: *pon_out + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + internal_structure: *pon_int_upper + - name: 'lower_pontoon_DP' + joint1: 'downstream_lower_col' + joint2: 'port_lower_col' + outer_shape: *pon_out + internal_structure: &pon_int_lower + layers: + - name: pon_twall + material: steel + thickness: + grid: [0.0, 1.0] + values: [0.02, 0.02] + ballasts: + - variable_flag: True + grid: [0.0, 1.0] + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'lower_pontoon_DS' + joint1: 'downstream_lower_col' + joint2: 'starboard_lower_col' + outer_shape: *pon_out + internal_structure: *pon_int_lower + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'lower_pontoon_UP' + joint1: 'upstream_lower_col' + joint2: 'port_lower_col' + outer_shape: *pon_out + internal_structure: *pon_int_lower + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'lower_pontoon_US' + joint1: 'upstream_lower_col' + joint2: 'starboard_lower_col' + outer_shape: *pon_out + internal_structure: *pon_int_lower + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + # axial_joints: + # - {name: '', grid: 0} + - name: 'lower_pontoon_PS' + joint1: 'port_lower_col' + joint2: 'starboard_lower_col' + outer_shape: *pon_out + internal_structure: *pon_int_upper # no ballast because it fills from one end to other + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + axial_joints: + - {name: 'lower_brace', grid: 0.5} + - name: 'tower_brace_port' + joint1: 'port_upper_col' + joint2: 'lower_brace' + outer_shape: *pon_out + internal_structure: *pon_int_lower + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + - name: 'tower_brace_starboard' + joint1: 'starboard_upper_col' + joint2: 'lower_brace' + outer_shape: *pon_out + internal_structure: *pon_int_lower + Ca: 1.0 + Cd: 1.2 + Cp: 1.0 + + transition_piece_mass: 0 + transition_piece_cost: 0 + mooring: + nodes: + - {name: 'line1_anchor', node_type: fixed, joint: 'anchor_1', anchor_type: drag_embedment} + - {name: 'line2_anchor', node_type: fixed, joint: 'anchor_2', anchor_type: drag_embedment} + - {name: 'line3_anchor', node_type: fixed, joint: 'anchor_3', anchor_type: drag_embedment} + - {name: 'line4_anchor', node_type: fixed, joint: 'anchor_4', anchor_type: drag_embedment} + - {name: 'line5_anchor', node_type: fixed, joint: 'anchor_5', anchor_type: drag_embedment} + - {name: 'line6_anchor', node_type: fixed, joint: 'anchor_6', anchor_type: drag_embedment} + - {name: 'line1_fairlead', node_type: vessel, joint: 'upstream_lower_col', fairlead_type: rigid} + - {name: 'line2_fairlead', node_type: vessel, joint: 'upstream_lower_col', fairlead_type: rigid} + - {name: 'line3_fairlead', node_type: vessel, joint: 'downstream_lower_col', fairlead_type: rigid} + - {name: 'line4_fairlead', node_type: vessel, joint: 'downstream_lower_col', fairlead_type: rigid} + - {name: 'line5_fairlead', node_type: vessel, joint: 'downstream_lower_col', fairlead_type: rigid} + - {name: 'line6_fairlead', node_type: vessel, joint: 'upstream_lower_col', fairlead_type: rigid} + lines: + - {name: 'line1', node1: 'line1_anchor', node2: 'line1_fairlead', line_type: 'main', unstretched_length: 160} + - {name: 'line2', node1: 'line2_anchor', node2: 'line2_fairlead', line_type: 'main', unstretched_length: 160} + - {name: 'line3', node1: 'line3_anchor', node2: 'line3_fairlead', line_type: 'main', unstretched_length: 160} + - {name: 'line4', node1: 'line4_anchor', node2: 'line4_fairlead', line_type: 'main', unstretched_length: 160} + - {name: 'line5', node1: 'line5_anchor', node2: 'line5_fairlead', line_type: 'main', unstretched_length: 152} + - {name: 'line6', node1: 'line6_anchor', node2: 'line6_fairlead', line_type: 'main', unstretched_length: 152} + line_types: + - name: 'main' + diameter: 0.324 + type: custom + mass_density: 644.8 + stiffness: 85.4E+8 + damping: 0 + transverse_added_mass: 1.0 + tangential_added_mass: 0.5 + transverse_drag: 2.4 + tangential_drag: 1.15 + breaking_load: 1.0E+10 + cost: 100 + anchor_types: + - {name: drag_embedment, type: drag_embedment} +airfoils: + - name: NACA6_1000 + coordinates: + x: [1.0, 0.993181, 0.972909, 0.939737, 0.89457, 0.838641, 0.773474, 0.700848, 0.622743, 0.54129, 0.45870999999999995, 0.37725699999999995, 0.299152, 0.226526, 0.16135900000000003, 0.10543000000000002, 0.060262999999999955, 0.027090999999999976, 0.0068190000000000195, 0.0, 0.0068190000000000195, 0.027090999999999976, 0.060262999999999955, 0.10543000000000002, 0.16135900000000003, 0.226526, 0.299152, 0.37725699999999995, 0.45870999999999995, 0.54129, 0.622743, 0.700848, 0.773474, 0.838641, 0.89457, 0.939737, 0.972909, 0.993181, 1.0] + y: [0.0, 0.082442, 0.162359, 0.237976, 0.307106, 0.367865, 0.418583, 0.457883, 0.484712, 0.498283, 0.498283, 0.484712, 0.457883, 0.418583, 0.367865, 0.307106, 0.237976, 0.162359, 0.082442, 0.0, -0.082442, -0.162359, -0.237976, -0.307106, -0.367865, -0.418583, -0.457883, -0.484712, -0.498283, -0.498283, -0.484712, -0.457883, -0.418583, -0.367865, -0.307106, -0.237976, -0.162359, -0.082442, 0.0] + relative_thickness: 1.0 + aerodynamic_center: 0.25 + polars: + - configuration: '' + re: 2000000.0 + c_l: + grid: [-3.141592653589793, 0.0, 3.141592653589793] + values: [0.0, 0.0, 0.0] + c_d: + grid: [-3.141592653589793, 0.0, 3.141592653589793] + values: [0.3, 0.3, 0.3] + c_m: + grid: [-3.141592653589793, 0.0, 3.141592653589793] + values: [0.0, 0.0, 0.0] + - name: NACA6_0864 + coordinates: + x: [1.0, 0.993181, 0.972909, 0.939737, 0.89457, 0.838641, 0.773474, 0.700848, 0.622743, 0.54129, 0.45870999999999995, 0.37725699999999995, 0.299152, 0.226526, 0.16135900000000003, 0.10543000000000002, 0.060262999999999955, 0.027090999999999976, 0.0068190000000000195, 0.0, 0.0068190000000000195, 0.027090999999999976, 0.060262999999999955, 0.10543000000000002, 0.16135900000000003, 0.226526, 0.299152, 0.37725699999999995, 0.45870999999999995, 0.54129, 0.622743, 0.700848, 0.773474, 0.838641, 0.89457, 0.939737, 0.972909, 0.993181, 1.0] + y: [0.0, 0.071897, 0.142126, 0.208964, 0.270115, 0.32383, 0.36847, 0.402651, 0.425156, 0.435236, 0.432906, 0.418526, 0.392758, 0.356678, 0.311513, 0.258619, 0.19945, 0.135539, 0.068594, 0.0, -0.068161, -0.134227, -0.197056, -0.255087, -0.306904, -0.351143, -0.38654, -0.41192, -0.426222, -0.428757, -0.419101, -0.397194, -0.363795, -0.32005, -0.267316, -0.207125, -0.141176, -0.071509, 0.0] + relative_thickness: 0.86 + aerodynamic_center: 0.25 + polars: + - configuration: '' + re: 2000000.0 + c_l: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.0558, 0.1117, 0.1675, 0.1378, 0.113, 0.087, 0.0586, 0.0288, 0.0, -0.0288, -0.0586, -0.087, -0.113, -0.1378, -0.1675, -0.1214, -0.1075, -0.1021, -0.0966, -0.087, -0.07, -0.0506, -0.0304, -0.0098, 0.012, 0.0337, 0.0553, 0.0771, 0.0985, 0.1195, 0.1397, 0.1596, 0.1759, 0.1825, 0.1884, 0.1956, 0.2031, 0.2046, 0.2099, 0.2116, 0.2163, 0.2196, 0.2247, 0.2292, 0.2333, 0.2371, 0.2405, 0.2436, 0.2471, 0.2486, 0.2498, 0.25, 0.2491, 0.2447, 0.2414, 0.2393, 0.1968, 0.1614, 0.1243, 0.0837, 0.0412, 0.0, -0.0288, -0.0586, -0.087, -0.113, -0.1378, -0.1675, -0.1117, -0.0558, 0.0] + c_d: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.2481, 0.2481, 0.2589, 0.2898, 0.3277, 0.3683, 0.4069, 0.4389, 0.4607, 0.47, 0.4607, 0.4389, 0.4069, 0.3683, 0.3277, 0.2898, 0.2697, 0.2496, 0.249, 0.2485, 0.2483, 0.2481, 0.248, 0.2479, 0.2477, 0.2476, 0.2476, 0.2476, 0.2476, 0.2477, 0.2477, 0.2478, 0.2479, 0.2481, 0.2484, 0.2488, 0.2493, 0.2499, 0.251, 0.2519, 0.2533, 0.2546, 0.2562, 0.2577, 0.2593, 0.2611, 0.263, 0.265, 0.2671, 0.2691, 0.2714, 0.2737, 0.2762, 0.2788, 0.2841, 0.2871, 0.2898, 0.3277, 0.3683, 0.4069, 0.4389, 0.4607, 0.47, 0.4607, 0.4389, 0.4069, 0.3683, 0.3277, 0.2898, 0.2589, 0.2481, 0.2481] + c_m: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + - name: NACA6_0629 + coordinates: + x: [1.0, 0.993181, 0.972909, 0.939737, 0.89457, 0.838641, 0.773474, 0.700848, 0.622743, 0.54129, 0.45870999999999995, 0.37725699999999995, 0.299152, 0.226526, 0.16135900000000003, 0.10543000000000002, 0.060262999999999955, 0.027090999999999976, 0.0068190000000000195, 0.0, 0.0068190000000000195, 0.027090999999999976, 0.060262999999999955, 0.10543000000000002, 0.16135900000000003, 0.226526, 0.299152, 0.37725699999999995, 0.45870999999999995, 0.54129, 0.622743, 0.700848, 0.773474, 0.838641, 0.89457, 0.939737, 0.972909, 0.993181, 1.0] + y: [0.0, 0.053204, 0.10626, 0.157538, 0.204545, 0.245774, 0.279641, 0.304748, 0.319589, 0.323479, 0.317019, 0.301206, 0.277317, 0.246947, 0.211626, 0.172671, 0.13116, 0.087998, 0.044048, 0.0, -0.042845, -0.08436, -0.124522, -0.162878, -0.198845, -0.2316, -0.260079, -0.282891, -0.298488, -0.305516, -0.302801, -0.289617, -0.266678, -0.235296, -0.196784, -0.15244, -0.103626, -0.052128, 0.0] + relative_thickness: 0.62 + aerodynamic_center: 0.25 + polars: + - configuration: '' + re: 2000000.0 + c_l: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.1523, 0.3046, 0.4569, 0.3758, 0.3081, 0.2373, 0.1599, 0.0786, 0.0, -0.0786, -0.1599, -0.2373, -0.3081, -0.3758, -0.4569, -0.3311, -0.2932, -0.2784, -0.2637, -0.2374, -0.1909, -0.1381, -0.0829, -0.0267, 0.0328, 0.092, 0.1509, 0.2102, 0.2686, 0.3259, 0.3811, 0.4355, 0.4799, 0.4977, 0.5139, 0.5337, 0.5542, 0.5581, 0.5726, 0.5773, 0.59, 0.5991, 0.613, 0.6251, 0.6364, 0.6469, 0.656, 0.6645, 0.6741, 0.6782, 0.6815, 0.682, 0.6796, 0.6675, 0.6584, 0.6527, 0.5369, 0.4402, 0.339, 0.2284, 0.1123, 0.0, -0.0786, -0.1599, -0.2373, -0.3081, -0.3758, -0.4569, -0.3046, -0.1523, 0.0] + c_d: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.1584, 0.1584, 0.188, 0.2721, 0.3756, 0.4864, 0.5916, 0.679, 0.7385, 0.7637, 0.7385, 0.679, 0.5916, 0.4864, 0.3756, 0.2721, 0.2173, 0.1625, 0.1609, 0.1596, 0.159, 0.1585, 0.1581, 0.1578, 0.1573, 0.1572, 0.1571, 0.1572, 0.1572, 0.1573, 0.1574, 0.1576, 0.1578, 0.1583, 0.1591, 0.1602, 0.1617, 0.1633, 0.1662, 0.1688, 0.1727, 0.1762, 0.1804, 0.1845, 0.1889, 0.1938, 0.199, 0.2045, 0.2101, 0.2156, 0.2219, 0.2283, 0.235, 0.2421, 0.2567, 0.2648, 0.2721, 0.3756, 0.4864, 0.5916, 0.679, 0.7385, 0.7637, 0.7385, 0.679, 0.5916, 0.4864, 0.3756, 0.2721, 0.188, 0.1584, 0.1584] + c_m: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + - name: NACA6_0444 + coordinates: + x: [1.0, 0.993181, 0.972909, 0.939737, 0.89457, 0.838641, 0.773474, 0.700848, 0.622743, 0.54129, 0.45870999999999995, 0.37725699999999995, 0.299152, 0.226526, 0.16135900000000003, 0.10543000000000002, 0.060262999999999955, 0.027090999999999976, 0.0068190000000000195, 0.0, 0.0068190000000000195, 0.027090999999999976, 0.060262999999999955, 0.10543000000000002, 0.16135900000000003, 0.226526, 0.299152, 0.37725699999999995, 0.45870999999999995, 0.54129, 0.622743, 0.700848, 0.773474, 0.838641, 0.89457, 0.939737, 0.972909, 0.993181, 1.0] + y: [0.0, 0.038173, 0.07742, 0.116187, 0.151821, 0.183011, 0.208215, 0.226025, 0.234704, 0.233617, 0.223836, 0.206871, 0.184493, 0.158713, 0.131307, 0.103562, 0.076248, 0.04977, 0.02431, 0.0, -0.022489, -0.044262, -0.066198, -0.088734, -0.111957, -0.135477, -0.158393, -0.17914, -0.195779, -0.20642, -0.209286, -0.203115, -0.188588, -0.167145, -0.14007, -0.108468, -0.073433, -0.036544, 0.0] + relative_thickness: 0.44 + aerodynamic_center: 0.25 + polars: + - configuration: '' + re: 2000000.0 + c_l: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.2283, 0.4565, 0.6848, 0.5632, 0.4618, 0.3556, 0.2396, 0.1178, 0.0, -0.1178, -0.2396, -0.3556, -0.4618, -0.5632, -0.6848, -0.4962, -0.4394, -0.4172, -0.3951, -0.3558, -0.2861, -0.207, -0.1243, -0.04, 0.0491, 0.1378, 0.2262, 0.3151, 0.4026, 0.4885, 0.5711, 0.6526, 0.7191, 0.7459, 0.7701, 0.7998, 0.8305, 0.8363, 0.8581, 0.8652, 0.8843, 0.8978, 0.9186, 0.9369, 0.9538, 0.9695, 0.9832, 0.9959, 1.0102, 1.0165, 1.0214, 1.022, 1.0185, 1.0003, 0.9868, 0.9782, 0.8047, 0.6597, 0.508, 0.3422, 0.1683, 0.0, -0.1178, -0.2396, -0.3556, -0.4618, -0.5632, -0.6848, -0.4565, -0.2283, 0.0] + c_d: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0878, 0.0878, 0.1322, 0.2582, 0.4133, 0.5793, 0.737, 0.8679, 0.9572, 0.995, 0.9572, 0.8679, 0.737, 0.5793, 0.4133, 0.2582, 0.1761, 0.0939, 0.0915, 0.0896, 0.0886, 0.0879, 0.0873, 0.0868, 0.0861, 0.0859, 0.0859, 0.0859, 0.0859, 0.0861, 0.0862, 0.0865, 0.0868, 0.0876, 0.0889, 0.0905, 0.0927, 0.0952, 0.0995, 0.1034, 0.1092, 0.1145, 0.1208, 0.1269, 0.1336, 0.1409, 0.1486, 0.1568, 0.1653, 0.1735, 0.183, 0.1926, 0.2026, 0.2132, 0.235, 0.2472, 0.2582, 0.4133, 0.5793, 0.737, 0.8679, 0.9572, 0.995, 0.9572, 0.8679, 0.737, 0.5793, 0.4133, 0.2582, 0.1322, 0.0878, 0.0878] + c_m: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + - name: NACA6_0329 + coordinates: + x: [1.0, 0.993181, 0.972909, 0.939737, 0.89457, 0.838641, 0.773474, 0.700848, 0.622743, 0.54129, 0.45870999999999995, 0.37725699999999995, 0.299152, 0.226526, 0.16135900000000003, 0.10543000000000002, 0.060262999999999955, 0.027090999999999976, 0.0068190000000000195, 0.0, 0.0068190000000000195, 0.027090999999999976, 0.060262999999999955, 0.10543000000000002, 0.16135900000000003, 0.226526, 0.299152, 0.37725699999999995, 0.45870999999999995, 0.54129, 0.622743, 0.700848, 0.773474, 0.838641, 0.89457, 0.939737, 0.972909, 0.993181, 1.0] + y: [0.0, 0.028484, 0.058831, 0.089532, 0.117836, 0.142554, 0.162174, 0.175281, 0.179988, 0.175693, 0.163772, 0.146064, 0.12466, 0.101839, 0.079535, 0.059015, 0.040853, 0.02513, 0.011587, 0.0, -0.009368, -0.018416, -0.028604, -0.040942, -0.05595, -0.073518, -0.092848, -0.112264, -0.129574, -0.142543, -0.149007, -0.147357, -0.138252, -0.123216, -0.103514, -0.080124, -0.053971, -0.026499, 0.0] + relative_thickness: 0.32 + aerodynamic_center: 0.25 + polars: + - configuration: '' + re: 2000000.0 + c_l: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.2755, 0.5509, 0.8264, 0.6797, 0.5573, 0.4292, 0.2891, 0.1421, 0.0, -0.1421, -0.2891, -0.4292, -0.5573, -0.6797, -0.8264, -0.5988, -0.5303, -0.5035, -0.4769, -0.4294, -0.3453, -0.2498, -0.15, -0.0483, 0.0592, 0.1663, 0.273, 0.3803, 0.4859, 0.5895, 0.6893, 0.7876, 0.8679, 0.9002, 0.9294, 0.9652, 1.0023, 1.0093, 1.0356, 1.0441, 1.0672, 1.0835, 1.1087, 1.1306, 1.151, 1.17, 1.1865, 1.2019, 1.2192, 1.2267, 1.2326, 1.2334, 1.2292, 1.2072, 1.1908, 1.1805, 0.9711, 0.7961, 0.6131, 0.413, 0.2031, 0.0, -0.1421, -0.2891, -0.4292, -0.5573, -0.6797, -0.8264, -0.5509, -0.2755, 0.0] + c_d: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.044, 0.044, 0.0975, 0.2495, 0.4368, 0.6371, 0.8274, 0.9854, 1.0931, 1.1387, 1.0931, 0.9854, 0.8274, 0.6371, 0.4368, 0.2495, 0.1504, 0.0513, 0.0484, 0.0461, 0.0449, 0.044, 0.0433, 0.0427, 0.0418, 0.0417, 0.0416, 0.0417, 0.0417, 0.0418, 0.042, 0.0424, 0.0427, 0.0437, 0.0452, 0.0472, 0.0498, 0.0528, 0.058, 0.0628, 0.0697, 0.0761, 0.0837, 0.0911, 0.0991, 0.108, 0.1172, 0.1272, 0.1375, 0.1473, 0.1588, 0.1704, 0.1825, 0.1953, 0.2216, 0.2363, 0.2495, 0.4368, 0.6371, 0.8274, 0.9854, 1.0931, 1.1387, 1.0931, 0.9854, 0.8274, 0.6371, 0.4368, 0.2495, 0.0975, 0.044, 0.044] + c_m: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + - name: NACA6_0276 + coordinates: + x: [1.0, 0.993181, 0.972909, 0.939737, 0.89457, 0.838641, 0.773474, 0.700848, 0.622743, 0.54129, 0.45870999999999995, 0.37725699999999995, 0.299152, 0.226526, 0.16135900000000003, 0.10543000000000002, 0.060262999999999955, 0.027090999999999976, 0.0068190000000000195, 0.0, 0.0068190000000000195, 0.027090999999999976, 0.060262999999999955, 0.10543000000000002, 0.16135900000000003, 0.226526, 0.299152, 0.37725699999999995, 0.45870999999999995, 0.54129, 0.622743, 0.700848, 0.773474, 0.838641, 0.89457, 0.939737, 0.972909, 0.993181, 1.0] + y: [0.0, 0.024017, 0.050261, 0.077244, 0.102168, 0.123903, 0.140948, 0.151887, 0.154763, 0.148989, 0.136081, 0.11803, 0.097075, 0.075618, 0.055666, 0.038477, 0.024535, 0.013769, 0.005721, 0.0, -0.003319, -0.0065, -0.011272, -0.018909, -0.030129, -0.044953, -0.06263, -0.081432, -0.099052, -0.113095, -0.121217, -0.121652, -0.115046, -0.102964, -0.08666, -0.067057, -0.044998, -0.021867, 0.0] + relative_thickness: 0.28 + aerodynamic_center: 0.25 + polars: + - configuration: '' + re: 2000000.0 + c_l: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.2972, 0.5944, 0.8917, 0.7334, 0.6013, 0.4631, 0.312, 0.1534, 0.0, -0.1534, -0.312, -0.4631, -0.6013, -0.7334, -0.8917, -0.6461, -0.5722, -0.5433, -0.5145, -0.4633, -0.3726, -0.2695, -0.1619, -0.0521, 0.0639, 0.1795, 0.2946, 0.4103, 0.5242, 0.6361, 0.7437, 0.8498, 0.9364, 0.9713, 1.0028, 1.0414, 1.0814, 1.089, 1.1174, 1.1266, 1.1514, 1.1691, 1.1962, 1.2199, 1.2419, 1.2624, 1.2802, 1.2968, 1.3155, 1.3236, 1.33, 1.3308, 1.3263, 1.3025, 1.2849, 1.2738, 1.0478, 0.859, 0.6615, 0.4456, 0.2191, 0.0, -0.1534, -0.312, -0.4631, -0.6013, -0.7334, -0.8917, -0.5944, -0.2972, 0.0] + c_d: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0237, 0.0237, 0.0815, 0.2455, 0.4476, 0.6637, 0.869, 1.0395, 1.1557, 1.205, 1.1557, 1.0395, 0.869, 0.6637, 0.4476, 0.2455, 0.1386, 0.0316, 0.0285, 0.026, 0.0248, 0.0238, 0.0231, 0.0224, 0.0215, 0.0213, 0.0212, 0.0213, 0.0213, 0.0215, 0.0216, 0.022, 0.0224, 0.0235, 0.0251, 0.0273, 0.03, 0.0333, 0.0389, 0.044, 0.0516, 0.0584, 0.0666, 0.0746, 0.0833, 0.0928, 0.1028, 0.1136, 0.1246, 0.1353, 0.1477, 0.1602, 0.1732, 0.187, 0.2154, 0.2312, 0.2455, 0.4476, 0.6637, 0.869, 1.0395, 1.1557, 1.205, 1.1557, 1.0395, 0.869, 0.6637, 0.4476, 0.2455, 0.0815, 0.0237, 0.0237] + c_m: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + - name: NACA6_0259 + coordinates: + x: [1.0, 0.993181, 0.972909, 0.939737, 0.89457, 0.838641, 0.773474, 0.700848, 0.622743, 0.54129, 0.45870999999999995, 0.37725699999999995, 0.299152, 0.226526, 0.16135900000000003, 0.10543000000000002, 0.060262999999999955, 0.027090999999999976, 0.0068190000000000195, 0.0, 0.0068190000000000195, 0.027090999999999976, 0.060262999999999955, 0.10543000000000002, 0.16135900000000003, 0.226526, 0.299152, 0.37725699999999995, 0.45870999999999995, 0.54129, 0.622743, 0.700848, 0.773474, 0.838641, 0.89457, 0.939737, 0.972909, 0.993181, 1.0] + y: [0.0, 0.022584, 0.04751, 0.073301, 0.09714, 0.117917, 0.134137, 0.144379, 0.146668, 0.140419, 0.127194, 0.109034, 0.088223, 0.067204, 0.048007, 0.031887, 0.019298, 0.010124, 0.003839, 0.0, -0.001378, -0.002676, -0.00571, -0.011838, -0.021843, -0.035786, -0.052933, -0.071538, -0.089257, -0.103644, -0.112299, -0.113402, -0.107598, -0.096465, -0.081252, -0.062864, -0.042119, -0.020381, 0.0] + relative_thickness: 0.26 + aerodynamic_center: 0.25 + polars: + - configuration: '' + re: 2000000.0 + c_l: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.3042, 0.6084, 0.9126, 0.7507, 0.6154, 0.4739, 0.3193, 0.157, 0.0, -0.157, -0.3193, -0.4739, -0.6154, -0.7507, -0.9126, -0.6612, -0.5856, -0.556, -0.5266, -0.4741, -0.3813, -0.2758, -0.1657, -0.0533, 0.0654, 0.1837, 0.3015, 0.4199, 0.5365, 0.651, 0.7612, 0.8698, 0.9584, 0.9941, 1.0264, 1.0659, 1.1068, 1.1146, 1.1437, 1.153, 1.1785, 1.1965, 1.2243, 1.2486, 1.2711, 1.2921, 1.3103, 1.3273, 1.3464, 1.3547, 1.3612, 1.3621, 1.3574, 1.3331, 1.3151, 1.3037, 1.0724, 0.8792, 0.677, 0.4561, 0.2243, 0.0, -0.157, -0.3193, -0.4739, -0.6154, -0.7507, -0.9126, -0.6084, -0.3042, 0.0] + c_d: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0173, 0.0173, 0.0763, 0.2442, 0.451, 0.6723, 0.8824, 1.0569, 1.1758, 1.2263, 1.1758, 1.0569, 0.8824, 0.6723, 0.451, 0.2442, 0.1348, 0.0253, 0.0221, 0.0196, 0.0183, 0.0173, 0.0166, 0.0159, 0.0149, 0.0147, 0.0146, 0.0147, 0.0147, 0.0149, 0.0151, 0.0155, 0.0159, 0.017, 0.0186, 0.0209, 0.0237, 0.027, 0.0328, 0.038, 0.0457, 0.0527, 0.0611, 0.0693, 0.0782, 0.0879, 0.0982, 0.1092, 0.1205, 0.1314, 0.1441, 0.1569, 0.1702, 0.1844, 0.2134, 0.2296, 0.2442, 0.451, 0.6723, 0.8824, 1.0569, 1.1758, 1.2263, 1.1758, 1.0569, 0.8824, 0.6723, 0.451, 0.2442, 0.0763, 0.0173, 0.0173] + c_m: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + - name: NACA6_0247 + coordinates: + x: [1.0, 0.993181, 0.972909, 0.939737, 0.89457, 0.838641, 0.773474, 0.700848, 0.622743, 0.54129, 0.45870999999999995, 0.37725699999999995, 0.299152, 0.226526, 0.16135900000000003, 0.10543000000000002, 0.060262999999999955, 0.027090999999999976, 0.0068190000000000195, 0.0, 0.0068190000000000195, 0.027090999999999976, 0.060262999999999955, 0.10543000000000002, 0.16135900000000003, 0.226526, 0.299152, 0.37725699999999995, 0.45870999999999995, 0.54129, 0.622743, 0.700848, 0.773474, 0.838641, 0.89457, 0.939737, 0.972909, 0.993181, 1.0] + y: [0.0, 0.021573, 0.045571, 0.070519, 0.093593, 0.113695, 0.129332, 0.139084, 0.140958, 0.134375, 0.120926, 0.102688, 0.081979, 0.061268, 0.042604, 0.027238, 0.015604, 0.007552, 0.002511, 0.0, -9e-06, 2.1e-05, -0.001786, -0.006851, -0.015998, -0.02932, -0.046093, -0.064559, -0.082348, -0.096978, -0.106009, -0.107583, -0.102345, -0.091881, -0.077436, -0.059906, -0.040088, -0.019333, 0.0] + relative_thickness: 0.24 + aerodynamic_center: 0.25 + polars: + - configuration: '' + re: 2000000.0 + c_l: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.3091, 0.6183, 0.9274, 0.7628, 0.6254, 0.4816, 0.3245, 0.1595, 0.0, -0.1595, -0.3245, -0.4816, -0.6254, -0.7628, -0.9274, -0.672, -0.5951, -0.565, -0.5351, -0.4818, -0.3875, -0.2803, -0.1683, -0.0542, 0.0665, 0.1867, 0.3064, 0.4267, 0.5452, 0.6616, 0.7735, 0.8839, 0.9739, 1.0102, 1.043, 1.0831, 1.1247, 1.1327, 1.1622, 1.1717, 1.1976, 1.2159, 1.2441, 1.2688, 1.2917, 1.313, 1.3315, 1.3488, 1.3682, 1.3766, 1.3832, 1.3841, 1.3794, 1.3547, 1.3364, 1.3248, 1.0898, 0.8934, 0.688, 0.4635, 0.2279, 0.0, -0.1595, -0.3245, -0.4816, -0.6254, -0.7628, -0.9274, -0.6183, -0.3091, 0.0] + c_d: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0127, 0.0127, 0.0727, 0.2433, 0.4535, 0.6783, 0.8918, 1.0691, 1.19, 1.2413, 1.19, 1.0691, 0.8918, 0.6783, 0.4535, 0.2433, 0.1322, 0.0209, 0.0176, 0.015, 0.0138, 0.0128, 0.012, 0.0113, 0.0103, 0.0101, 0.01, 0.0101, 0.0101, 0.0103, 0.0105, 0.0109, 0.0113, 0.0124, 0.0141, 0.0163, 0.0192, 0.0226, 0.0284, 0.0338, 0.0416, 0.0487, 0.0573, 0.0656, 0.0746, 0.0845, 0.0949, 0.1061, 0.1176, 0.1287, 0.1416, 0.1546, 0.1681, 0.1825, 0.212, 0.2285, 0.2433, 0.4535, 0.6783, 0.8918, 1.0691, 1.19, 1.2413, 1.19, 1.0691, 0.8918, 0.6783, 0.4535, 0.2433, 0.0727, 0.0127, 0.0127] + c_m: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + - name: NACA6_0240 + coordinates: + x: [1.0, 0.99826, 0.99001, 0.97316, 0.91462, 0.87398, 0.8269299999999999, 0.77437, 0.6569, 0.5943499999999999, 0.5309699999999999, 0.46787, 0.34612, 0.28898999999999997, 0.23524999999999996, 0.1855, 0.10043999999999997, 0.06635000000000002, 0.03861000000000003, 0.017719999999999958, 0.017719999999999958, 0.03861000000000003, 0.06649000000000005, 0.14090999999999998, 0.18618, 0.23590999999999995, 0.2894, 0.40503, 0.46584000000000003, 0.52766, 0.5897, 0.7104699999999999, 0.76693, 0.81936, 0.86682, 0.94321, 0.9702500000000001, 0.98873, 1.0] + y: [0.0, 0.00999, 0.02554, 0.04384, 0.08183, 0.09889, 0.1137, 0.12545, 0.13689, 0.13501, 0.12832, 0.11785, 0.08982, 0.07432, 0.05915, 0.0451, 0.02238, 0.01414, 0.00798, 0.00244, 0.00183, 0.00209, 0.00085, -0.00804, -0.01605, -0.02635, -0.03851, -0.0655, -0.07843, -0.08968, -0.09814, -0.10284, -0.09896, -0.0919, -0.08208, -0.05597, -0.04038, -0.02443, 0.0] + relative_thickness: 0.24 + aerodynamic_center: 0.25 + polars: + - configuration: '' + re: 2000000.0 + c_l: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.312, 0.624, 0.936, 0.7699, 0.6312, 0.4861, 0.3275, 0.161, 0.0, -0.161, -0.3275, -0.4861, -0.6312, -0.7699, -0.936, -0.6782, -0.6006, -0.5703, -0.5401, -0.4863, -0.3911, -0.2829, -0.1699, -0.0547, 0.0671, 0.1884, 0.3092, 0.4307, 0.5503, 0.6677, 0.7807, 0.8921, 0.983, 1.0196, 1.0527, 1.0932, 1.1352, 1.1432, 1.173, 1.1826, 1.2087, 1.2272, 1.2557, 1.2806, 1.3037, 1.3252, 1.3439, 1.3613, 1.3809, 1.3894, 1.3961, 1.397, 1.3922, 1.3673, 1.3488, 1.3371, 1.0999, 0.9017, 0.6944, 0.4678, 0.23, 0.0, -0.161, -0.3275, -0.4861, -0.6312, -0.7699, -0.936, -0.624, -0.312, 0.0] + c_d: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.01, 0.01, 0.0706, 0.2428, 0.4549, 0.6818, 0.8973, 1.0763, 1.1983, 1.25, 1.1983, 1.0763, 0.8973, 0.6818, 0.4549, 0.2428, 0.1306, 0.0183, 0.015, 0.0124, 0.0111, 0.0101, 0.0093, 0.0086, 0.0076, 0.0074, 0.0073, 0.0074, 0.0074, 0.0076, 0.0078, 0.0082, 0.0086, 0.0097, 0.0114, 0.0137, 0.0166, 0.02, 0.0259, 0.0313, 0.0392, 0.0464, 0.055, 0.0634, 0.0725, 0.0825, 0.093, 0.1043, 0.1159, 0.1271, 0.1401, 0.1532, 0.1669, 0.1814, 0.2112, 0.2278, 0.2428, 0.4549, 0.6818, 0.8973, 1.0763, 1.1983, 1.25, 1.1983, 1.0763, 0.8973, 0.6818, 0.4549, 0.2428, 0.0706, 0.01, 0.01] + c_m: + grid: [-3.141592653589793, -2.9670597283903604, -2.792526803190927, -2.6179938779914944, -2.443460952792061, -2.2689280275926285, -2.0943951023931953, -1.9198621771937625, -1.7453292519943295, -1.5707963267948966, -1.3962634015954636, -1.2217304763960306, -1.0471975511965976, -0.8726646259971648, -0.6981317007977318, -0.5235987755982988, -0.3490658503988659, -0.17453292519943295, -0.15707963267948966, -0.13962634015954636, -0.12217304763960307, -0.10471975511965977, -0.08726646259971647, -0.06981317007977318, -0.05235987755982988, -0.03490658503988659, -0.017453292519943295, 0.0, 0.017453292519943295, 0.03490658503988659, 0.05235987755982988, 0.06981317007977318, 0.08726646259971647, 0.10471975511965977, 0.12217304763960307, 0.13962634015954636, 0.15707963267948966, 0.17453292519943295, 0.19198621771937624, 0.20943951023931953, 0.22689280275926285, 0.24434609527920614, 0.2617993877991494, 0.2792526803190927, 0.29670597283903605, 0.3141592653589793, 0.3316125578789226, 0.3490658503988659, 0.3665191429188092, 0.3839724354387525, 0.40142572795869574, 0.41887902047863906, 0.4363323129985824, 0.4537856055185257, 0.4886921905584123, 0.5061454830783556, 0.5235987755982988, 0.6981317007977318, 0.8726646259971648, 1.0471975511965976, 1.2217304763960306, 1.3962634015954636, 1.5707963267948966, 1.7453292519943295, 1.9198621771937625, 2.0943951023931953, 2.2689280275926285, 2.443460952792061, 2.6179938779914944, 2.792526803190927, 2.9670597283903604, 3.141592653589793] + values: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +materials: + - {name: Gelcoat, orth: 0, rho: 1235.0, E: 3440000000.0, G: 1323000000.0, nu: 0.3, alpha: 0.0, Xt: 74, Xc: 87, S: 21260000.0, GIc: 303, GIIc: 3446, alp0: 53, ply_t: 0.0005, waste: 0.25, unit_cost: 7.23, component_id: 0} + - {name: steel, description: Steel of the tower and monopile ASTM A572 Grade 50, source: http://www.matweb.com/search/DataSheet.aspx?MatGUID=9ced5dc901c54bd1aef19403d0385d7f, orth: 0, rho: 7800, alpha: 0.0, E: 200000000000.0, nu: 0.3, G: 79300000000.0, GIc: 0, GIIc: 0, alp0: 0, Xt: 450000000.0, Xc: 450000000.0, S: 0, Xy: 345000000.0, m: 3, unit_cost: 0.7} + - {name: steel_drive, description: Steel of the drivetrain ASTM 4140 40Cr1Mo28, source: http://www.matweb.com/search/DataSheet.aspx?MatGUID=38108bfd64c44b4c9c6a02af78d5b6c6, orth: 0, rho: 7850, alpha: 0.0, E: 205000000000.0, nu: 0.3, G: 80000000000.0, GIc: 0, GIIc: 0, alp0: 0, Xt: 814000000.0, Xc: 814000000.0, S: 0, Xy: 485000000.0, m: 3, unit_cost: 0.9} + - {name: cast_iron, description: Cast iron for hub and nacelle components, source: TODO, orth: 0, rho: 7200, alpha: 0.0, E: 118000000000.0, nu: 0.3, G: 47600000000.0, GIc: 0, GIIc: 0, alp0: 0, Xt: 310000000.0, Xc: 310000000.0, S: 0, Xy: 265000000.0, m: 3, unit_cost: 0.5} + - name: glass_uni + description: Vectorply E-LT-5500, Epikote MGS RIMR 135/Epicure MGS RIMH 1366 epoxy + source: MSU composites database 3D property tests, Engineering Mechanics of Composite Materials, Daniel, I & Ishai, O., 1994, pg. 34 + orth: 1 + rho: 1940.0 + E: [44600000000.0, 17000000000.0, 16700000000.0] + G: [3270000000.0, 3480000000.0, 3500000000.0] + nu: [0.262, 0.35, 0.264] + Xt: [609200000.0, 38100000.0, 15290000.0] + Xc: [474710000.0, 112640000.0, 113220000.0] + S: [18910000.0, 17240000.0, 13160000.0] + m: 10 + GIc: 303 + GIIc: 3446 + alp0: 53 + fvf: 0.57 + fwf: 0.7450682696347697 + ply_t: 0.005 + unit_cost: 1.87 + waste: 0.05 + fiber_density: 2535.5 + area_density_dry: 7.227162215457267 + component_id: 5 + - name: CarbonUD + E: [114500000000.0, 8390000000.0, 8390000000.0] + G: [5990000000.0, 5990000000.0, 5990000000.0] + rho: 1220.0 + orth: 1 + nu: [0.27, 0.27, 0.27] + Xt: [1546000000.0, 0.0, 0.0] + Xc: [1047000000.0, 0.0, 0.0] + S: [0.0, 0.0, 0.0] + m: 16.1 + GIc: 0.0 + GIIc: 0.0 + alp0: 0.0 + fvf: 0.1076923076923077 + fwf: 0.15889029003783103 + ply_t: 0.005158730158730159 + unit_cost: 30.0 + waste: 0.05 + fiber_density: 1800.0 + area_density_dry: 1.0 + component_id: 4 + - name: glass_biax + description: Vectorply E-LT-5500, Epikote MGS RIMR 135/Epicure MGS RIMH 1366 epoxy + source: MSU composites database 3D property tests, Engineering Mechanics of Composite Materials, Daniel, I & Ishai, O., 1994, pg. 34 + orth: 1 + rho: 1940.0 + E: [11100000000.0, 11100000000.0, 16700000000.0] + G: [13530000000.0, 3490000000.0, 3490000000.0] + nu: [0.5, 0.0, 0.066] + Xt: [42900000.0, 42600000.0, 15300000.0] + Xc: [70700000.0, 70700000.0, 113200000.0] + S: [103400000.0, 17200000.0, 13200000.0] + m: 10 + GIc: 303 + GIIc: 3446 + alp0: 53 + fvf: 0.57 + fwf: 0.7450682696347697 + ply_t: 0.001 + waste: 0.15 + unit_cost: 3.0 + fiber_density: 2535.5 + area_density_dry: 1.4454324430914534 + component_id: 3 + roll_mass: 181.4368 + - name: glass_triax + description: Vectorply E-LT-5500, Epikote MGS RIMR 135/Epicure MGS RIMH 1366 epoxy + source: MSU composites database 3D property tests, Engineering Mechanics of Composite Materials, Daniel, I & Ishai, O., 1994, pg. 34 + orth: 1.0 + rho: 1940.0 + E: [28700000000.0, 16600000000.0, 16700000000.0] + G: [8400000000.0, 3490000000.0, 3490000000.0] + nu: [0.5, 0.0, 0.17] + Xt: [396000000.0, 76400000.0, 15300000.0] + Xc: [448900000.0, 174700000.0, 113200000.0] + S: [103400000.0, 17200000.0, 13200000.0] + m: 10 + GIc: 303 + GIIc: 3446 + alp0: 53 + fvf: 0.57 + fwf: 0.7450682696347697 + ply_t: 0.001 + unit_cost: 2.86 + waste: 0.15 + fiber_density: 2535.5 + area_density_dry: 1.4454324430914534 + component_id: 2 + roll_mass: 181.4368 + - {name: medium_density_foam, description: "Airex C70.130 PVC Foam, source 'https://www.3accorematerials.com/uploads/documents/TDS-AIREX-C70-E_1106.pdf'", orth: 0.0, rho: 130.0, E: 129200000.0, G: 48946969.696969695, nu: 0.32, Xt: 2083000.0, Xc: 1563000.0, S: 1250000.0, GIc: 303, GIIc: 3446, alp0: 53, component_id: 1, waste: 0.2, unit_cost: 13} + - {name: resin, description: epoxy, E: 1000000.0, nu: 0.3, G: 312500.0, GIc: 0, GIIc: 0, alp0: 0, Xt: 0, Xc: 0, S: 0, rho: 1150.0, alpha: 0.0, orth: 0, unit_cost: 3.63} + - {name: slurry, description: fixed/permanent ballast, E: 1.0, nu: 0.3, G: 1.0, Xt: 0, Xc: 0, S: 0, rho: 5000.0, alpha: 0.0, unit_cost: 1.0, orth: 0.0} + - {name: adhesive, description: Sample adhesive, source: https://www.nrel.gov/docs/fy19osti/73585.pdf, orth: 0, rho: 1100, E: 4560000.0, nu: 0.49, alpha: 0.0, Xt: 690000.0, Xc: 400000.0, S: 310000.0, G: 1520000.0, unit_cost: 9.0} +control: + supervisory: {Vin: 0.5, Vout: 4.0, maxTS: 60} + pitch: {PC_zeta: !!null '', PC_omega: !!null '', ps_percent: !!null '', max_pitch: !!null '', max_pitch_rate: 0.1745, min_pitch: 0.00088} + torque: {control_type: !!null '', tsr: 7.64, VS_zeta: !!null '', VS_omega: !!null '', max_torque_rate: 1500000.0, VS_minspd: 0.0, VS_maxspd: 1.26711} + setpoint_smooth: {ss_vsgain: !!null '', ss_pcgain: !!null ''} + shutdown: {limit_type: !!null '', limit_value: !!null ''} +environment: {air_density: 1.225, air_dyn_viscosity: 1.81e-05, speed_sound: 1500.0, shear_exp: 0.0, gravity: 9.80665, weib_shape_parameter: 2.0, water_density: 1025.0, water_dyn_viscosity: 0.0013351, soil_shear_modulus: 140000000.0, soil_poisson: 0.4, water_depth: 50.0, air_pressure: 101325.0, air_vapor_pressure: 2500.0, significant_wave_height: !!null '', significant_wave_period: !!null ''} +bos: {plant_turbine_spacing: 7, plant_row_spacing: 7, commissioning_pct: 0.01, decommissioning_pct: 0.15, distance_to_substation: 1.0, distance_to_interconnection: 8.5, interconnect_voltage: 130.0, distance_to_site: 115.0, distance_to_landfall: 50.0, port_cost_per_month: 2000000.0, site_auction_price: 100000000.0, site_assessment_plan_cost: 1000000.0, site_assessment_cost: 25000000.0, construction_operations_plan_cost: 2500000.0, boem_review_cost: 0.0, design_install_plan_cost: 2500000.0} +costs: {wake_loss_factor: 0.15, fixed_charge_rate: 0.056, bos_per_kW: 4053.0, opex_per_kW: 137.0, turbine_number: 40.0, labor_rate: 58.8, painting_rate: 30.0, blade_mass_cost_coeff: 14.6, hub_mass_cost_coeff: 3.9, pitch_system_mass_cost_coeff: 22.1, spinner_mass_cost_coeff: 11.1, lss_mass_cost_coeff: 11.9, bearing_mass_cost_coeff: 4.5, gearbox_mass_cost_coeff: 12.9, hss_mass_cost_coeff: 6.8, generator_mass_cost_coeff: 12.4, bedplate_mass_cost_coeff: 2.9, yaw_mass_cost_coeff: 8.3, converter_mass_cost_coeff: 18.8, transformer_mass_cost_coeff: 18.8, hvac_mass_cost_coeff: 124.0, cover_mass_cost_coeff: 5.7, elec_connec_machine_rating_cost_coeff: 41.85, platforms_mass_cost_coeff: 17.1, tower_mass_cost_coeff: 2.9, controls_machine_rating_cost_coeff: 21.15, crane_cost: 12000.0, electricity_price: 0.04, reserve_margin_price: 120.0, capacity_credit: 0.0, benchmark_price: 0.071} diff --git a/examples/19_DFSM/analysis_options_dfsm_fowt.yaml b/examples/19_DFSM/analysis_options_dfsm_fowt.yaml new file mode 100644 index 000000000..59802855b --- /dev/null +++ b/examples/19_DFSM/analysis_options_dfsm_fowt.yaml @@ -0,0 +1,86 @@ +general: + folder_output: outputs/FOWT_DFSM_test2 + fname_output: refturb_output + + +design_variables: + control: + servo: + pitch_control: + omega: + flag: False + min: 0.1 + max: 0.4 + zeta: + flag: False + min: 0.1 + max: 3.0 + Kp_float: + flag: False + min: -40 + max: 0 + ptfm_freq: + flag: False + max: 0.4 + + # floating: + # joints: + # flag: True + # # z_coordinate: + # # - names: [main_keel, col1_keel, col2_keel, col3_keel] + # # lower_bound: -40.0 + # # upper_bound: -15.0 + # r_coordinate: + # - names: [col1_keel, col1_freeboard, col2_keel, col2_freeboard, col3_keel, col3_freeboard] + # lower_bound: 38.8125 + # upper_bound: 64.6875 + # members: + # flag: True + # groups: + # - names: [column1,column2,column3] + # diameter: + # lower_bound: 9.375 + # upper_bound: 15.625 + # groups: + # - names: [main_column] + # diameter: + # lower_bound: 7.5 + # upper_bound: 12.5 + + + +constraints: + control: + rotor_overspeed: + flag: False + min: 0.0 + max: 0.25 + Max_PtfmPitch: + flag: False + max: 5.5 + Std_PtfmPitch: + flag: False + max: 2. + Max_Offset: + flag: False + max: 30. + +merit_figure: DEL_TwrBsMyt # Merit figure of the optimization problem. The options are 'AEP' - 'LCOE' - 'Cp' - 'blade_mass' - 'blade_tip_deflection' + + +driver: + optimization: + flag: False # Flag to enable optimization + solver: LN_COBYLA # Optimization solver. Other options are 'SLSQP' - 'CONMIN' + tol: 1.e-2 # Optimality tolerance + max_iter: 100 # Maximum number of iterations (SLSQP) + design_of_experiments: + flag: False # Flag to enable design of experiments + run_parallel: False # Flag to run using parallel processing + generator: FullFact # Type of input generator. (Uniform) + num_samples: 6 # number of samples for (Uniform only) + +recorder: + flag: True # Flag to activate OpenMDAO recorder + file_name: log_opt.sql # Name of OpenMDAO recorder + includes: ['*raft*','*floating*','*platform*'] \ No newline at end of file diff --git a/examples/19_DFSM/analysis_options_dfsm_mhk.yaml b/examples/19_DFSM/analysis_options_dfsm_mhk.yaml new file mode 100644 index 000000000..ebb18c822 --- /dev/null +++ b/examples/19_DFSM/analysis_options_dfsm_mhk.yaml @@ -0,0 +1,46 @@ +general: + folder_output: outputs/test_constant + fname_output: iea15mw + +# design_variables: +# control: +# servo: +# pitch_control: +# omega: +# flag: True +# min: 0.1 +# max: 1.1 +# zeta: +# flag: True +# min: 0.1 +# max: 3.0 + +merit_figure: DEL_TwrBsMyt # Merit figure of the optimization problem. The options are 'AEP' - 'LCOE' - 'Cp' - 'blade_mass' - 'blade_tip_deflection' + +constraints: + control: + rotor_overspeed: + flag: True + min: 0.0 + max: 0.2 + +driver: + optimization: + flag: False + tol: 1.e-2 # Optimality tolerance + max_major_iter: 2 # Maximum number of major design iterations (SNOPT) + max_minor_iter: 100 # Maximum number of minor design iterations (SNOPT) + max_iter: 2 # Maximum number of iterations (SLSQP) + solver: LN_COBYLA # Optimization solver. Other options are 'SLSQP' - 'CONMIN' + step_size: 1.e-3 # Step size for finite differencing + form: forward # Finite differencing mode, either forward or central + design_of_experiments: + flag: False # Flag to enable design of experiments + run_parallel: False # Flag to run using parallel processing + generator: FullFact # Type of input generator. (Uniform) + num_samples: 5 # number of samples for (Uniform only) + criterion: center + +recorder: + flag: True # Flag to activate OpenMDAO recorder + file_name: log_opt.sql # Name of OpenMDAO recorder diff --git a/examples/19_DFSM/dfsm_1p6.pkl b/examples/19_DFSM/dfsm_1p6.pkl new file mode 100644 index 000000000..f4ae601e6 Binary files /dev/null and b/examples/19_DFSM/dfsm_1p6.pkl differ diff --git a/examples/19_DFSM/modeling_options_dfsm_fowt.yaml b/examples/19_DFSM/modeling_options_dfsm_fowt.yaml new file mode 100644 index 000000000..132f346ad --- /dev/null +++ b/examples/19_DFSM/modeling_options_dfsm_fowt.yaml @@ -0,0 +1,174 @@ +General: + verbosity: False # When set to True, the code prints to screen many infos + openfast_configuration: + OF_run_fst: IEA_w_TMD + OF_run_dir: outputs/FOWT_DFSM_test + save_iterations: True + save_timeseries: True + use_exe: True + allow_fails: True + fail_value: 9999 + +WISDEM: + RotorSE: + flag: True + n_pitch_perf_surfaces: 5 + n_tsr_perf_surfaces: 5 + spar_cap_ss: Spar_Cap_SS + spar_cap_ps: Spar_Cap_PS + te_ss: TE_reinforcement_SS + te_ps: TE_reinforcement_PS + TowerSE: + flag: True + DriveSE: + flag: True + FloatingSE: + flag: True + rank_and_file: True + # BOS: + # flag: True + +Level3: # Options for WEIS fidelity level 3 = nonlinear time domain + flag: False + simulation: + DT: 0.01 + CompElast: 1 + CompInflow: 1 + CompAero: 0 + CompServo: 1 + CompHydro: 1 + CompSub: 0 + CompMooring: 3 + CompIce: 0 + OutFileFmt: 3 + linearization: + Linearize: False + ElastoDyn: + FlapDOF1: False + FlapDOF2: False + EdgeDOF: False + TeetDOF: False + DrTrDOF: False + GenDOF: True + YawDOF: False + TwFADOF1 : True + TwFADOF2 : False + TwSSDOF1 : False + TwSSDOF2 : False + PtfmSgDOF: False + PtfmSwDOF: False + PtfmHvDOF: False + PtfmRDOF : False + PtfmPDOF : True + PtfmYDOF : False + HydroDyn: + WvLowCOff: 0.15708 + WvHiCOff: 3.2 + WaveSeed1: 123456789 + AddBQuad1: [9.23e5, 0.0, 0.0, 0.0, -8.92e6, 0.0] + AddBQuad2: [0.0, 9.23e5, 0.0, 8.92e6, 0.0, 0.0] + AddBQuad3: [0.0, 0.0, 2.3e6, 0.0, 0.0, 0.0] + AddBQuad4: [0.0, 8.92e6, 0.0, 1.68e10, 0.0, 0.0] + AddBQuad5: [-8.92e6, 0.0, 0.0, 0.0, 1.68e10, 0.0] + AddBQuad6: [0.0, 0.0, 0.0, 0.0, 0.0, 4.8e10] + PotMod: 1 + WaveMod: 2 + # PotFile: examples/01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT-UMaineSemi/HydroData/IEA-15-240-RWT-UMaineSemi + +Level1: + flag: False + potential_model_override: 2 + trim_ballast: 2 + heave_tol: 1 + save_designs: True + +ROSCO: + flag: True + SD_Mode: 0 + PS_Mode: 1 + ps_percent: 0.85 + F_LPFType: 2 + F_NotchType: 2 + Fl_Mode: 2 + tuning_yaml: ../01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT-UMaineSemi/IEA15MW-UMaineSemi.yaml + zeta_pc: [1] + omega_pc: [0.2] + U_pc: [12] + zeta_vs: 0.85 # Torque controller desired damping ratio [-] + omega_vs: 0.12 + twr_freq: 3.2 + ptfm_freq: 0.2 + Kp_float: -10 + + +DFSM: + flag: True + general_options: + model_data_availability: offline + testing_data_availability: offline + storage_type: outb + modeling_data_path: /home/athulsun/DFSM/data/FOWT_1p6 + testing_data_path: /home/athulsun/DFSM/data/1p6_test/test + save_results: True + usecase_options: + usecase: simulation + plot_flag: False + param: + VS_GenEff: 95.89835000000 + WE_GearboxRatio: 1.0 + VS_RtPwr: 15000000.00000 + DT: 0.01 + num_blade: 3 + DLL_FileName: /home/athulsun/anaconda3/envs/weis-env/lib/libdiscon.so + model_options: + reqd_states: [PtfmPitch,TTDspFA,GenSpeed] + reqd_controls: [RtVAvgxh,GenTq,BldPitch1,Wave1Elev] + reqd_outputs: [TwrBsFxt,TwrBsMyt,YawBrTAxp,NcIMURAys,GenPwr] + scale_args: + state_scaling_factor: [1,1,100] + filter_args: + state_filter_flag: [True,True,True] + state_filter_type: [[filtfilt],[filtfilt],[filtfilt]] + state_filter_tf: [[0.1],[0.1],[0.1]] + linear_model_file: /home/athulsun/WEIS-AKS-commit/examples/17_DFSM/FOWT_1p6_LPV.mat + construction_options: + L_type: LPV + N_type: None + train_split: 0.5 + n_samples: 1 + +DLC_driver: + metocean_conditions: + wind_speed: [4., 6., 8., 10., 12., 14., 16., 18., 20., 22., 24.] + wave_height_NSS: [0.83, 0.88, 0.94, 1.03, 1.16, 1.34, 1.57, 1.86, 2.22, 2.62, 3.07] + wave_period_NSS: [6.9, 6.96, 7.02, 7.12, 7.25, 7.43, 7.66, 7.94, 8.27, 8.63, 9.01] + wave_height_SSS: [6.3, 8, 8, 8.1, 8.5, 8.5, 9.8, 9.8, 9.8, 9.8, 9.9] + wave_period_SSS: [11.5, 12.7, 12.7, 12.8, 13.1, 13.1, 14.1, 14.1, 14.1, 14.1, 14.1] + wave_height1: 6.98 + wave_period1: 11.7 + wave_height50: 10.68 + wave_period50: 14.2 + DLCs: + # - DLC: "1.1" + # n_seeds: 6 + # - DLC: "1.3" + # n_seeds: 6 + # - DLC: "1.4" + # - DLC: "1.5" + - DLC: "1.6" + n_seeds: 1 + wind_speed: [16,18,20] + #wind_speed: [3,5,7,9,11,13,15,17,19,21,23,25] + analysis_time: 600. + transient_time: 0. + turbulent_wind: + HubHt: 150.0 + RefHt: 150.0 + GridHeight: 299.999 + GridWidth: 299.999 + PLExp: 0.15 + # - DLC: "6.1" + # n_seeds: 6 + # - DLC: "6.3" + # n_seeds: 6 + diff --git a/examples/19_DFSM/modeling_options_dfsm_mhk.yaml b/examples/19_DFSM/modeling_options_dfsm_mhk.yaml new file mode 100644 index 000000000..583846236 --- /dev/null +++ b/examples/19_DFSM/modeling_options_dfsm_mhk.yaml @@ -0,0 +1,192 @@ +General: + verbosity: False # When set to True, the code prints to screen many infos + openfast_configuration: + OF_run_fst: RM1 + # OF_run_dir: outputs/05_low_shear_hi_TI + save_timeseries: True + save_iterations: True + use_exe: True + allow_fails: True + fail_value: 9999 + + +WISDEM: + RotorSE: + flag: False + n_pitch_perf_surfaces: 5 + n_tsr_perf_surfaces: 5 + spar_cap_ss: Spar_Cap_SS + spar_cap_ps: Spar_Cap_PS + te_ss: TE_reinforcement_SS + te_ps: TE_reinforcement_PS + TowerSE: + flag: False + DriveSE: + flag: False + FloatingSE: + flag: False + rank_and_file: True + frame3dd: + flag: False + BOS: + flag: False + +Level3: # Options for WEIS fidelity level 3 = nonlinear time domain + flag: True + from_openfast: True + openfast_file: MHK_RM1_Floating.fst + openfast_dir: OpenFAST #../01_aeroelasticse/OpenFAST_models/MHK_RM1/MHK_RM1_Floating + simulation: + # CompElast: 1 + # CompInflow: 1 + # CompAero: 2 + # CompServo: 1 + CompHydro: 1 + # CompSub: 0 + CompMooring: 3 + # CompIce: 0 + OutFileFmt: 3 + DT: 0.01 + # DT_Out: default + NumCrctn: 5 + # Gravity: 9.81 + # WtrDpth: 35 + linearization: + Linearize: False + ElastoDyn: + FlapDOF1: False + FlapDOF2: False + EdgeDOF: False + TeetDOF: False + DrTrDOF: False + GenDOF: True + YawDOF: False + TwFADOF1 : False + TwFADOF2 : False + TwSSDOF1 : False + TwSSDOF2 : False + PtfmSgDOF: False + PtfmSwDOF: False + PtfmHvDOF: False + PtfmRDOF : False + PtfmPDOF : True + PtfmYDOF : False + # TwrNodes: 20 + # RotSpeed: 4 + # BlPitch1: 0 + # BlPitch2: 0 + HydroDyn: + # WaveSeed1: 123456789 + # WaveSeed2: 123456789 + # AddBLin3: [0.0, 0.0,0.0, 0.0, 0.0, 0.0] + WaveMod: 0 + # WaveHs: 2.0 + # WaveTp: 6.75 + # WaveTMax: 600 + # WvLowCOff: 0.314159 + # WvHiCOff: 1.570796 + # WvSumQTF: False + # RdtnMod: 0 + # PotMod: 1 + # ExctnMod: 0 + # DiffQTF: 0 + # PotFile: examples/01_aeroelasticse/OpenFAST_models/MHK-RM1/MHK-RM1-Floating/HydroData/MHK_RM1_Floating + # ServoDyn: + # PitManRat(1): 2. + # PitManRat(2): 2. + # PitManRat(3): 2. + # SubDyn: + # SDdeltaT: 0.005 + + # InflowWind: + # RefHt: 150.0 + +DFSM: + flag: False + general_options: + model_data_availability: offline + storage_type: outb + modeling_data_path: /home/athulsun/WEIS-AKS/examples/17_DFSM/outputs/simple_sim_TR/openfast_runs/rank_0 + testing_data_availability: online + save_results: True + usecase_options: + usecase: simulation + plot_flag: False + solver_options: + atol: 1e-4 + rto: 1e-4 + model_options: + reqd_states: [GenSpeed] + state_props: + units: [rpm] + key_freq_name: [[2P]] + key_freq_val: [[0.39]] + reqd_controls: [RtVAvgxh,GenTq,BldPitch1] + reqd_outputs: [GenPwr,TwrBsMyt,'RtFldCp','RotSpeed'] + construction_options: + L_type: LTI + N_type: None + train_split: 0.4 + + +ROSCO: + flag: True + tuning_yaml: OpenFAST/RM1_MHK.yaml + + +DLC_driver: + metocean_conditions: + current_speed: [0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. , 2.25, 2.5 , 2.75, 3. , 3.25, 3.5 , 3.75, 4. ] + current_std: [0.100,0.096,0.093,0.089,0.086,0.082,0.079,0.075,0.071,0.068,0.064,0.061,0.057,0.054,0.050] + wave_height_NSS: [0.84,0.84,0.87,0.99,1.15,1.34,1.58,1.82,2.08,2.34,2.66,2.98,3.28,3.77,3.94] + wave_period_NSS: [8.3,8.3,8.3,7.7,7.1,6.3,6.1,6.2,6.2,6.7,7.1,7.1,7.7,7.7,7.7] + wave_height_fatigue: [0.84,0.84,0.87,0.99,1.15,1.34,1.58,1.82,2.08,2.34,2.66,2.98,3.28,3.77,3.94] + wave_period_fatigue: [8.3,8.3,8.3,7.7,7.1,6.3,6.1,6.2,6.2,6.7,7.1,7.1,7.7,7.7,7.7] + wave_height_SSS: [9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7] + wave_period_SSS: [13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6] + wave_height1: 5.9 + wave_period1: 11.2 + wave_height50: 9.7 + wave_period50: 13.6 + current_50: 4.5 + user_probability: + speed: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6] + probability: [0.176358711313469, 0.225347242233877, 0.233415941444297, 0.231686934470636, 0.210362515128811, 0.213820529076134, 0.240331969338943, 0.228228920523313, 0.245518990259927, 0.245518990259927, 0.253011353812460, 0.275488444470059, 0.293354849864562, 0.327934989337790, 0.352717422626938, 0.374041841968762, 0.391908247363264, 0.447812806178319, 0.501412022361823, 0.577488329202929, 0.566537951703071, 0.586709699729122, 0.515244078151115, 0.510633392888018, 0.442625785257335, 0.383839548152844, 0.301423549074981, 0.262809059996542, 0.169442683418823, 0.0829923347357504, 0.0547518874992795, 0.0443778456573108, 0.0190190767102761, 0.00806869921042014, 0.00403434960521009, 0.00172900697366146] + DLCs: + # - DLC: "1.1" + # n_seeds: 2 + # current_speed: [2.0] #[0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. , 2.25, 2.5 , 2.75, 3.] + # # current_std: [ 0.079,0.075,0.071,0.068,0.064] #[0.100,0.096,0.093,0.089,0.086,0.082,0.079,0.075,0.071,0.068,0.064,0.061,0.057,0.054,0.050] + # # wave_height_NSS: [ 1.58,1.82,2.08,2.34,2.66] #[0.84,0.84,0.87,0.99,1.15,1.34,1.58,1.82,2.08,2.34,2.66,2.98,3.28,3.77,3.94] + # # wave_period_NSS: [ 2.75,2.75,2.75,2.75,2.75] #[6.1,6.2,6.2,6.7,7.1] #[8.3,8.3,8.3,7.7,7.1,6.3,6.1,6.2,6.2,6.7,7.1,7.1,7.7,7.7,7.7] + # # wave_height_fatigue: [ 1.58,1.82,2.08,2.34,2.66] #[0.84,0.84,0.87,0.99,1.15,1.34,1.58,1.82,2.08,2.34,2.66,2.98,3.28,3.77,3.94] + # # wave_period_fatigue: [6.2,6.2,6.2,6.2,6.2] #[8.3,8.3,8.3,7.7,7.1,6.3,6.1,6.2,6.2,6.7,7.1,7.1,7.7,7.7,7.7] + # # wave_height_SSS: [9.7,9.7,9.7,9.7,9.7] #[9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7,9.7] + # # wave_period_SSS: [13.6,13.6,13.6,13.6,13.6] #[13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6,13.6] + # transient_time: 0. + # analysis_time: 700. + # ws_bin_size: 0.25 + # turbulent_wind: + # PLExp: 0 + - DLC: "12.1" + wind_file: /home/athulsun/WEIS-AKS/examples/17_DFSM/step_2.wnd + analysis_time: 700 + transient_time: 0 + wave_period: [6.75] + wave_height: [2.0] + + + # - DLC: "1.2" + # # current_speed: [2.2] + # # wave_heading: [0, 30., 60.] + # transient_time: 0. + # analysis_time: 720. + # ws_bin_size: 0.25 + # - DLC: "1.3" + # # current_speed: [2.2] + # transient_time: 0. + # analysis_time: 720. + # ws_bin_size: 0.25 + # - DLC: "6.1" + # transient_time: 0. + # analysis_time: 720. diff --git a/examples/19_DFSM/run_simulation.py b/examples/19_DFSM/run_simulation.py new file mode 100644 index 000000000..69b49c4ee --- /dev/null +++ b/examples/19_DFSM/run_simulation.py @@ -0,0 +1,204 @@ +''' +Example to run a close-loop simulation with the DFSM model used as 'plant' for the ROSCO controller. +''' + +import matplotlib.pyplot as plt +import numpy as np +import pickle +import os +import time as timer +from scipy.interpolate import CubicSpline + +# ROSCO toolbox modules +from rosco.toolbox import control_interface as ROSCO_ci +from rosco import discon_lib_path + +# DFSM modules +from weis.dfsm.ode_algorithms import RK4 + +if __name__ == '__main__': + + # path to this directory + this_dir = os.path.dirname(os.path.abspath(__file__)) + + # path to DISCON library + lib_name = discon_lib_path + + # Write parameter input file + param_filename = os.path.join(this_dir,'IEA_15_MW','IEA_w_TMD_DISCON.IN') + + plot_path = 'plot_dfsm_result';save_flag = False + + # pickle with the saved DFSM model + pkl_name = this_dir + os.sep +'dfsm_1p6.pkl' + + # load dfsm model + with open(pkl_name,'rb') as handle: + dfsm = pickle.load(handle) + + # pickle file with the test data + test_pkl_name = this_dir + os.sep +'test_data_1p6.pkl' + + # load test data + with open(test_pkl_name,'rb') as handle: + FAST_sim = pickle.load(handle) + + test_data = FAST_sim[0] + + + # extract controls + controls_of = test_data['controls'] + states_of = test_data['states'] + outputs_of = test_data['outputs'] + + # get control, state, output names + state_names = test_data['state_names'];ns = len(state_names) + control_names = test_data['control_names'] + output_names = test_data['output_names'] + + # extract wind speed + wind_speed = controls_of[:,dfsm.wind_speed_ind] # + nt = len(wind_speed) + t0 = 0;tf = 600 + time_of = np.linspace(t0,tf,nt) + + # create interpolating function for + w_pp = CubicSpline(time_of, wind_speed) + wind_fun = lambda t: w_pp(t) + w0 = wind_fun(0) + bp0 = 16 + gt0 = 19000 + + if control_names[-1] == 'Wave1Elev': + wave_elev = controls_of[:,dfsm.wave_elev_ind] + wave_pp = CubicSpline(time_of,wave_elev) + wave_fun = lambda t:wave_pp(t) + + else: + wave_fun = None + + # time span + tspan = [t0,tf] + + # initial states + x0 = test_data['states'][0,:] + + # parameters for ROSCO + dt = 0.01 + num_blade = int(3) + args = {'DT': dt, 'num_blade': int(3)} + + # Load controller library + controller_interface = ROSCO_ci.ControllerInterface(lib_name,param_filename=param_filename,sim_name='sim_test',**args) + + # hardcoded for now + param = {'VS_GenEff':95.89835000000, + 'WE_GearboxRatio':1.0, + 'VS_RtPwr':15000000.00000, + 'time':[t0], + 'dt':[dt], + 'blade_pitch':[bp0], + 'gen_torque':[gt0], + 't0':t0, + 'tf':tf, + 'w_fun':wind_fun, + 'gen_speed_scaling':100, + 'controller_interface':controller_interface, + 'wave_fun':wave_fun, + 'ny': len(output_names) + } + + # start timer and solve for the states and controls + t1 = timer.time() + time_dfsm, states_dfsm, controls_dfsm,outputs_dfsm,T_extrap, U_extrap = RK4(x0, dt, tspan, dfsm, param) + t2 = timer.time() + dfsm.simulation_time.append(t2-t1) + + # shutdown controller + param['controller_interface'].kill_discon() + + #---------------------------------------------------------------------- + # Plot results + #---------------------------------------------------------------------- + + # plot properties + markersize = 10 + linewidth = 1.5 + fontsize_legend = 16 + fontsize_axlabel = 18 + fontsize_tick = 12 + + #------------------------------------------------ + # Plot controls + #----------------------------------------------- + for iu,control in enumerate(control_names): + + fig,ax = plt.subplots(1) + ax.plot(time_of,controls_of[:,iu],label = 'OpenFAST') + ax.plot(time_dfsm,controls_dfsm[:,iu],label = 'DFSM') + + ax.set_title(control,fontsize = fontsize_axlabel) + ax.set_xlim(tspan) + ax.tick_params(labelsize=fontsize_tick) + ax.legend(ncol = 2,fontsize = fontsize_legend) + ax.set_xlabel('Time [s]',fontsize = fontsize_axlabel) + + if save_flag: + if not os.path.exists(plot_path): + os.makedirs(plot_path) + + fig.savefig(plot_path +os.sep+ control +'_comp.pdf') + + #------------------------------------------------------ + # Plot States + #------------------------------------------------------ + for ix,state in enumerate(state_names[:3]): + + fig,ax = plt.subplots(1) + ax.plot(time_of,states_of[:,ix],label = 'OpenFAST') + ax.plot(time_dfsm,states_dfsm[:,ix],label = 'DFSM') + + ax.set_title(state,fontsize = fontsize_axlabel) + ax.set_xlim(tspan) + ax.tick_params(labelsize=fontsize_tick) + ax.legend(ncol = 2,fontsize = fontsize_legend) + ax.set_xlabel('Time [s]',fontsize = fontsize_axlabel) + + if save_flag: + if not os.path.exists(plot_path): + os.makedirs(plot_path) + + fig.savefig(plot_path +os.sep+ state +'_comp.pdf') + + #------------------------------------------ + # Plot Outputs + #------------------------------------------ + for iy,output in enumerate(output_names): + + fig,ax = plt.subplots(1) + ax.plot(time_of,outputs_of[:,iy],label = 'OpenFAST') + ax.plot(time_dfsm,outputs_dfsm[:,iy],label = 'DFSM') + + + ax.set_title(output,fontsize = fontsize_axlabel) + ax.set_xlim(tspan) + ax.tick_params(labelsize=fontsize_tick) + ax.legend(ncol = 2,fontsize = fontsize_legend) + ax.set_xlabel('Time [s]',fontsize = fontsize_axlabel) + + if save_flag: + if not os.path.exists(plot_path): + os.makedirs(plot_path) + + fig.savefig(plot_path +os.sep+ output + '_comp.pdf') + + + plt.show() + + + + + + + + diff --git a/examples/19_DFSM/test_data_1p6.pkl b/examples/19_DFSM/test_data_1p6.pkl new file mode 100644 index 000000000..f3238a523 Binary files /dev/null and b/examples/19_DFSM/test_data_1p6.pkl differ diff --git a/examples/19_DFSM/weis_driver_dfsm_fowt.py b/examples/19_DFSM/weis_driver_dfsm_fowt.py new file mode 100644 index 000000000..6c177a3ed --- /dev/null +++ b/examples/19_DFSM/weis_driver_dfsm_fowt.py @@ -0,0 +1,24 @@ +import os +import time +import sys + +from weis.glue_code.runWEIS import run_weis +from wisdem.commonse.mpi_tools import MPI + +## File management +run_dir = os.path.dirname( os.path.realpath(__file__) ) + os.sep +fname_wt_input = os.path.join(run_dir,"..","06_IEA-15-240-RWT", "IEA-15-240-RWT_VolturnUS-S.yaml") +fname_modeling_options = run_dir + "modeling_options_dfsm_fowt.yaml" +fname_analysis_options = run_dir + "analysis_options_dfsm_fowt.yaml" + + +tt = time.time() +wt_opt, modeling_options, opt_options = run_weis(fname_wt_input, fname_modeling_options, fname_analysis_options) + +if MPI: + rank = MPI.COMM_WORLD.Get_rank() +else: + rank = 0 +if rank == 0: + print('Run time: %f'%(time.time()-tt)) + sys.stdout.flush() diff --git a/examples/19_DFSM/weis_driver_dfsm_mhk.py b/examples/19_DFSM/weis_driver_dfsm_mhk.py new file mode 100644 index 000000000..736c0d8af --- /dev/null +++ b/examples/19_DFSM/weis_driver_dfsm_mhk.py @@ -0,0 +1,15 @@ +import os +from weis.glue_code.runWEIS import run_weis + + +if __name__ == "__main__": + + mydir = os.path.dirname(os.path.realpath(__file__)) # get path to this file + + # get path to modelling, geometry and analysis files + fname_modeling_options = mydir + os.sep + "modeling_options_dfsm_mhk.yaml" + fname_wt_input = mydir + os.sep + "RM1.yaml" + fname_analysis_options = mydir + os.sep + "analysis_options_dfsm_mhk.yaml" + + wt_opt, modeling_options, opt_options = run_weis(fname_wt_input, fname_modeling_options, fname_analysis_options) + diff --git a/weis/aeroelasticse/openmdao_openfast.py b/weis/aeroelasticse/openmdao_openfast.py index 5a261c643..d14273644 100644 --- a/weis/aeroelasticse/openmdao_openfast.py +++ b/weis/aeroelasticse/openmdao_openfast.py @@ -36,6 +36,7 @@ from weis.aeroelasticse.StC_defaults import default_StC_vt from weis.aeroelasticse.CaseGen_General import case_naming from wisdem.inputs import load_yaml +from weis.dfsm.dfsm_wrapper import dfsm_wrapper if MPI: from mpi4py import MPI @@ -614,144 +615,152 @@ def compute(self, inputs, outputs, discrete_inputs, discrete_outputs): # Write input OF files, but do not run OF self.write_FAST(fst_vt, discrete_outputs) else: - # Write OF model and run - summary_stats, extreme_table, DELs, Damage, case_list, case_name, chan_time, dlc_generator = self.run_FAST(inputs, discrete_inputs, fst_vt) - # Set up linear turbine model - if modopt['Level2']['flag']: - try: - LinearTurbine = LinearTurbineModel( - self.FAST_runDirectory, - self.lin_case_name, - nlin=modopt['Level2']['linearization']['NLinTimes'], - reduceControls=True - ) - except FileNotFoundError as e: - logger.warning('FileNotFoundError: {} {}'.format(e.strerror, e.filename)) - return - - # Save linearizations - logger.warning('Saving ABCD matrices!') - ABCD = { - 'sim_idx' : self.sim_idx, - 'A' : LinearTurbine.A_ops, - 'B' : LinearTurbine.B_ops, - 'C' : LinearTurbine.C_ops, - 'D' : LinearTurbine.D_ops, - 'x_ops':LinearTurbine.x_ops, - 'u_ops':LinearTurbine.u_ops, - 'y_ops':LinearTurbine.y_ops, - 'u_h':LinearTurbine.u_h, - 'omega_rpm' : LinearTurbine.omega_rpm, - 'DescCntrlInpt' : LinearTurbine.DescCntrlInpt, - 'DescStates' : LinearTurbine.DescStates, - 'DescOutput' : LinearTurbine.DescOutput, - 'StateDerivOrder' : LinearTurbine.StateDerivOrder, - 'ind_fast_inps' : LinearTurbine.ind_fast_inps, - 'ind_fast_outs' : LinearTurbine.ind_fast_outs, - } - with open(self.lin_pkl_file_name, 'rb') as handle: - ABCD_list = pickle.load(handle) + if modopt['Level3']['flag'] or modopt['Level2']['flag']: + # Write OF model and run + summary_stats, extreme_table, DELs, Damage, case_list, case_name, chan_time, dlc_generator = self.run_FAST(inputs, discrete_inputs, fst_vt) + + # Set up linear turbine model + if modopt['Level2']['flag']: + try: + LinearTurbine = LinearTurbineModel( + self.FAST_runDirectory, + self.lin_case_name, + nlin=modopt['Level2']['linearization']['NLinTimes'], + reduceControls=True + ) + except FileNotFoundError as e: + logger.warning('FileNotFoundError: {} {}'.format(e.strerror, e.filename)) + return + + # Save linearizations + logger.warning('Saving ABCD matrices!') + ABCD = { + 'sim_idx' : self.sim_idx, + 'A' : LinearTurbine.A_ops, + 'B' : LinearTurbine.B_ops, + 'C' : LinearTurbine.C_ops, + 'D' : LinearTurbine.D_ops, + 'x_ops':LinearTurbine.x_ops, + 'u_ops':LinearTurbine.u_ops, + 'y_ops':LinearTurbine.y_ops, + 'u_h':LinearTurbine.u_h, + 'omega_rpm' : LinearTurbine.omega_rpm, + 'DescCntrlInpt' : LinearTurbine.DescCntrlInpt, + 'DescStates' : LinearTurbine.DescStates, + 'DescOutput' : LinearTurbine.DescOutput, + 'StateDerivOrder' : LinearTurbine.StateDerivOrder, + 'ind_fast_inps' : LinearTurbine.ind_fast_inps, + 'ind_fast_outs' : LinearTurbine.ind_fast_outs, + } + with open(self.lin_pkl_file_name, 'rb') as handle: + ABCD_list = pickle.load(handle) - ABCD_list[self.sim_idx] = ABCD + ABCD_list[self.sim_idx] = ABCD - with open(self.lin_pkl_file_name, 'wb') as handle: - pickle.dump(ABCD_list, handle) + with open(self.lin_pkl_file_name, 'wb') as handle: + pickle.dump(ABCD_list, handle) + + lin_files = glob.glob(os.path.join(self.FAST_runDirectory, '*.lin')) - lin_files = glob.glob(os.path.join(self.FAST_runDirectory, '*.lin')) + dest = os.path.join(self.FAST_runDirectory, f'copied_lin_files_{self.lin_idx}') + Path(dest).mkdir(parents=True, exist_ok=True) + for file in lin_files: + shutil.copy2(file, dest) + self.lin_idx += 1 + + # Shorten output names from linearization output to one like level3 openfast output + # This depends on how openfast sets up the linearization output names and may break if that is changed + OutList = [out_name.split()[1][:-1] for out_name in LinearTurbine.DescOutput] + OutOps = {} + for i_out, out in enumerate(OutList): + OutOps[out] = LinearTurbine.y_ops[i_out,:] + + # save to yaml, might want in analysis outputs + FileTools.save_yaml( + self.FAST_runDirectory, + 'OutOps.yaml',OutOps) + + # Set up Level 2 disturbance (simulation or DTQP) + if modopt['Level2']['simulation']['flag'] or modopt['Level2']['DTQP']['flag']: + # Extract disturbance(s) + level2_disturbance = [] + for case in case_list: + ts_file = TurbSimFile(case[('InflowWind','FileName_BTS')]) + ts_file.compute_rot_avg(fst_vt['ElastoDyn']['TipRad']) + u_h = ts_file['rot_avg'][0,:] + tt = ts_file['t'] + level2_disturbance.append({'Time':tt, 'Wind': u_h}) + + # Run linear simulation: + + # Get case list, wind inputs should have already been generated + if modopt['Level2']['simulation']['flag']: - dest = os.path.join(self.FAST_runDirectory, f'copied_lin_files_{self.lin_idx}') - Path(dest).mkdir(parents=True, exist_ok=True) - for file in lin_files: - shutil.copy2(file, dest) - self.lin_idx += 1 - - # Shorten output names from linearization output to one like level3 openfast output - # This depends on how openfast sets up the linearization output names and may break if that is changed - OutList = [out_name.split()[1][:-1] for out_name in LinearTurbine.DescOutput] - OutOps = {} - for i_out, out in enumerate(OutList): - OutOps[out] = LinearTurbine.y_ops[i_out,:] - - # save to yaml, might want in analysis outputs - FileTools.save_yaml( - self.FAST_runDirectory, - 'OutOps.yaml',OutOps) - - # Set up Level 2 disturbance (simulation or DTQP) - if modopt['Level2']['simulation']['flag'] or modopt['Level2']['DTQP']['flag']: - # Extract disturbance(s) - level2_disturbance = [] - for case in case_list: - ts_file = TurbSimFile(case[('InflowWind','FileName_BTS')]) - ts_file.compute_rot_avg(fst_vt['ElastoDyn']['TipRad']) - u_h = ts_file['rot_avg'][0,:] - tt = ts_file['t'] - level2_disturbance.append({'Time':tt, 'Wind': u_h}) - - # Run linear simulation: - - # Get case list, wind inputs should have already been generated - if modopt['Level2']['simulation']['flag']: - - if modopt['Level2']['DTQP']['flag']: - raise Exception('Only DTQP or simulation flag can be set to true in Level2 modeling options') - - # This is going to use the last discon_in file of the linearization set as the simulation file - # Currently fine because openfast is executed (or not executed if overwrite=False) after the file writing - if 'DLL_InFile' in self.fst_vt['ServoDyn']: # if using file inputs - discon_in_file = os.path.join(self.FAST_runDirectory, self.fst_vt['ServoDyn']['DLL_InFile']) - else: # if using fst_vt inputs from openfast_openmdao - discon_in_file = os.path.join(self.FAST_runDirectory, self.lin_case_name[0] + '_DISCON.IN') - - lib_name = modopt['General']['openfast_configuration']['path2dll'] - - ss = {} - et = {} - dl = {} - dam = {} - ct = [] - for i_dist, dist in enumerate(level2_disturbance): - sim_name = 'l2_sim_{}'.format(i_dist) - controller_int = ROSCO_ci.ControllerInterface( - lib_name, - param_filename=discon_in_file, - DT=1/80, # modelling input? - sim_name = os.path.join(self.FAST_runDirectory,sim_name) - ) - - l2_out, _, P_op = LinearTurbine.solve(dist,Plot=False,controller=controller_int) - - output = OpenFASTOutput.from_dict(l2_out, sim_name, magnitude_channels=self.magnitude_channels) - - _name, _ss, _et, _dl, _dam = self.la._process_output(output) - ss[_name] = _ss - et[_name] = _et - dl[_name] = _dl - dam[_name] = _dam - ct.append(l2_out) - - output.df.to_pickle(os.path.join(self.FAST_runDirectory,sim_name+'.p')) - - summary_stats, extreme_table, DELs, Damage = self.la.post_process(ss, et, dl, dam) - - # Overwrite timeseries with simulated data instead of saved linearization timeseries - chan_time = ct - - elif modopt['Level2']['DTQP']['flag']: - - summary_stats, extreme_table, DELs, Damage = dtqp_wrapper( - LinearTurbine, - level2_disturbance, - self.options['opt_options'], - self.options['modeling_options'], - self.fst_vt, - self.la, - self.magnitude_channels, - self.FAST_runDirectory - ) - - # TODO: pull chan_time out of here + if modopt['Level2']['DTQP']['flag']: + raise Exception('Only DTQP or simulation flag can be set to true in Level2 modeling options') + + # This is going to use the last discon_in file of the linearization set as the simulation file + # Currently fine because openfast is executed (or not executed if overwrite=False) after the file writing + if 'DLL_InFile' in self.fst_vt['ServoDyn']: # if using file inputs + discon_in_file = os.path.join(self.FAST_runDirectory, self.fst_vt['ServoDyn']['DLL_InFile']) + else: # if using fst_vt inputs from openfast_openmdao + discon_in_file = os.path.join(self.FAST_runDirectory, self.lin_case_name[0] + '_DISCON.IN') + + lib_name = modopt['General']['openfast_configuration']['path2dll'] + + ss = {} + et = {} + dl = {} + dam = {} + ct = [] + for i_dist, dist in enumerate(level2_disturbance): + sim_name = 'l2_sim_{}'.format(i_dist) + controller_int = ROSCO_ci.ControllerInterface( + lib_name, + param_filename=discon_in_file, + DT=1/80, # modelling input? + sim_name = os.path.join(self.FAST_runDirectory,sim_name) + ) + + l2_out, _, P_op = LinearTurbine.solve(dist,Plot=False,controller=controller_int) + + output = OpenFASTOutput.from_dict(l2_out, sim_name, magnitude_channels=self.magnitude_channels) + + _name, _ss, _et, _dl, _dam = self.la._process_output(output) + ss[_name] = _ss + et[_name] = _et + dl[_name] = _dl + dam[_name] = _dam + ct.append(l2_out) + + output.df.to_pickle(os.path.join(self.FAST_runDirectory,sim_name+'.p')) + + summary_stats, extreme_table, DELs, Damage = self.la.post_process(ss, et, dl, dam) + + # Overwrite timeseries with simulated data instead of saved linearization timeseries + chan_time = ct + + elif modopt['Level2']['DTQP']['flag']: + + summary_stats, extreme_table, DELs, Damage = dtqp_wrapper( + LinearTurbine, + level2_disturbance, + self.options['opt_options'], + self.options['modeling_options'], + self.fst_vt, + self.la, + self.magnitude_channels, + self.FAST_runDirectory + ) + + # TODO: pull chan_time out of here + + elif (modopt['DFSM']['flag']): + + # Call DFSM wrapper + summary_stats, extreme_table, DELs, Damage,case_list,case_name, chan_time,dlc_generator,TMax,TStart = dfsm_wrapper(fst_vt, modopt, inputs, discrete_inputs) + self.fst_vt = fst_vt # Post process regardless of level self.post_process(summary_stats, extreme_table, DELs, Damage, case_list, dlc_generator, chan_time, inputs, discrete_inputs, outputs, discrete_outputs) diff --git a/weis/control/tune_rosco.py b/weis/control/tune_rosco.py index 93fee3da9..ab963b581 100644 --- a/weis/control/tune_rosco.py +++ b/weis/control/tune_rosco.py @@ -378,7 +378,7 @@ def compute(self,inputs,outputs, discrete_inputs, discrete_outputs): ROSCO_input['Ct'] = WISDEM_turbine.Ct ROSCO_input['Cq'] = WISDEM_turbine.Cq - if (self.modeling_options['Level2']['flag'] or self.modeling_options['Level3']['flag']): + if (self.modeling_options['Level2']['flag'] or self.modeling_options['DFSM']['flag'] or self.modeling_options['Level3']['flag']): self.modeling_options['General']['openfast_configuration']['fst_vt']['DISCON_in'] = ROSCO_input # Outputs diff --git a/weis/dfsm/__init__.py b/weis/dfsm/__init__.py new file mode 100644 index 000000000..b588f3a97 --- /dev/null +++ b/weis/dfsm/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +"""Top-level package for DFSM Repo.""" + +__author__ = """Athul K. Sundarrajan and Daniel R. Herber""" +__email__ = 'Athul.Sundarrajan@colostate.edu' +__version__ = '1.0.0' diff --git a/weis/dfsm/construct_dfsm.py b/weis/dfsm/construct_dfsm.py new file mode 100755 index 000000000..ac90436da --- /dev/null +++ b/weis/dfsm/construct_dfsm.py @@ -0,0 +1,412 @@ +import os +import numpy as np + +from scipy.interpolate import CubicSpline,interp1d +import matplotlib.pyplot as plt + +from scipy.integrate import solve_ivp +from numpy.linalg import lstsq,qr,inv,norm +import pickle + +from sklearn.gaussian_process import GaussianProcessRegressor +from sklearn.gaussian_process.kernels import RBF as RBFsk +from sklearn.gaussian_process.kernels import ExpSineSquared +import time as timer +from sklearn.cluster import KMeans +from sklearn.preprocessing import StandardScaler + +from weis.dfsm.dfsm_sample_data import sample_data +from sklearn.neural_network import MLPRegressor +from mat4py import loadmat +from weis.dfsm.wrapper_LTI import wrapper_LTI +PYOPT = True +try: + from pyoptsparse import IPOPT, Optimization +except Exception: + PYOPT = False +import argparse + + +class DFSM: + + def __init__(self,SimulationDetails,L_type = 'LTI',N_type = 'GPR',n_samples = 300,sampling_method = 'KM',train_split = 0.8): + + self.L_type = L_type + self.N_type = N_type + self.n_samples = n_samples + self.sampling_method = sampling_method + self.train_split = train_split + + FAST_sim = SimulationDetails.FAST_sim + + self.n_model_inputs = SimulationDetails.n_model_inputs + self.n_deriv = SimulationDetails.n_deriv + self.n_outputs = SimulationDetails.n_outputs + self.gen_speed_ind = SimulationDetails.gen_speed_ind + self.FA_Acc_ind_s = SimulationDetails.FA_Acc_ind_s + self.NacIMU_FA_Acc_ind_s = SimulationDetails.NacIMU_FA_Acc_ind_s + self.FA_Acc_ind_o = SimulationDetails.FA_Acc_ind_o + self.NacIMU_FA_Acc_ind_o = SimulationDetails.NacIMU_FA_Acc_ind_o + self.wind_speed_ind = SimulationDetails.wind_speed_ind + self.gen_torque_ind = SimulationDetails.gen_torque_ind + self.blade_pitch_ind = SimulationDetails.blade_pitch_ind + self.wave_elev_ind = SimulationDetails.wave_elev_ind + self.linear_model_file = SimulationDetails.linear_model_file + self.region = SimulationDetails.region + + n_sim = SimulationDetails.n_sim + + train_index = int(np.floor(train_split*n_sim)) + self.train_data = FAST_sim[0:train_index] + + self.test_data = FAST_sim[train_index:] + + def construct_nonlinear(self,inputs,outputs,N_type,error_ind,n_inputs,n_outputs,ftype = 'deriv',scaling = True): + + sm = [] + + if N_type == 'GPR': + + + if scaling: + # scale inputs + scaler = StandardScaler().fit(inputs) + inputs_scaled = scaler.transform(inputs) + + self.scaler = scaler + + + else: + + inputs_scaled = inputs + self.scaler = None + + # store inputs + self.inputs_scaled = inputs_scaled + + + for ifunc in range(n_outputs): + + if error_ind[ifunc]: + + # train a gaussian process model + kernel = 1*RBFsk(length_scale = [1]*n_inputs,length_scale_bounds=(1e-5, 1e5)) + smi = GaussianProcessRegressor(kernel = kernel,n_restarts_optimizer = 5,n_targets = 1, optimizer = 'fmin_l_bfgs_b') + smi.fit(inputs_scaled,outputs[:,ifunc]) + + sm.append(smi) + + else: + sm.append(None) + + elif N_type == 'NN': + + + # train a neural network to predict the errors + sm = MLPRegressor(hidden_layer_sizes = (100,50,10),max_iter = 1000,activation = 'tanh',solver = 'adam',verbose = True,tol = 1e-4) + sm.fit(inputs,outputs[:,error_ind]) + + if ftype == 'deriv': + + self.nonlin_deriv = sm + + elif ftype == 'outputs': + + self.nonlin_outputs = sm + + + def construct_surrogate(self): + + # extract samples + t1 = timer.time() + inputs_sampled,dx_sampled,outputs_sampled,model_inputs,state_derivatives,outputs = sample_data(self.train_data,self.sampling_method,self.n_samples,grouping = 'together') + t2 = timer.time() + + self.sampling_time = t2 - t1 + + # depending on the type of L and N construct the surrogate model + if self.L_type == None: + + # set the AB and CD matrices as empty + self.AB = [] + self.CD = [] + self.lin_construct = 0 + + self.error_ind_deriv = np.full(self.n_deriv,True) + + if self.n_outputs > 0: + self.error_ind_outputs = np.full(self.n_outputs,True) + + t1 = timer.time() + self.construct_nonlinear(inputs_sampled,dx_sampled,self.N_type,self.error_ind_deriv,self.n_model_inputs,self.n_deriv,'deriv') + + if self.n_outputs > 0: + self.construct_nonlinear(inputs_sampled,outputs_sampled,self.N_type,self.error_ind_outputs,self.n_model_inputs,self.n_outputs,'outputs') + + t2 = timer.time() + + self.nonlin_construct_time = t2-t1 + self.linear_construct_time = 0 + self.inputs_sampled = inputs_sampled + self.dx_sampled = dx_sampled + + else: + + if self.L_type == 'LTI': + + if self.linear_model_file == None: + + n_states = self.n_deriv + n_controls = self.n_model_inputs - n_states + + # start timer + t1 = timer.time() + + # construct ta least squares approximation + AB = lstsq(model_inputs,state_derivatives,rcond = -1) + AB = AB[0] + + # extract the A matrix + AB_ = AB.T + + A = AB_[:,n_controls:] + Aeig = np.linalg.eig(A)[0] + Aeig_real = Aeig.real + + if all(Aeig_real < 0): + print('') + print('The least squares estimate is stable, using this as the linear model') + print('') + else: + print('') + print('The linear model identified using least-squares estimation is unstable, using grey-box estimation to identify a stable model') + print('') + + # extract the identified parameters + par0 = AB_[int(n_states/2):,:] + + # reshape + par0 = np.squeeze(par0.reshape([-1,1],order = 'F')) + + # get the length and specify upper and lower bounds + nx = len(par0) + lb = [-100]*nx + ub = [100]*nx + + # instantiate wrapper class + LTI = wrapper_LTI(inputs = model_inputs,outputs = state_derivatives,nstates = int(n_states),ncontrols = int(n_controls)) + + # # set default options + parser = argparse.ArgumentParser() + parser.add_argument("--opt",help = "optimizer",type = str) + args = parser.parse_args() + + # set specific solver options + optOptions_ipopt = {'max_iter':500,'tol':1e-8,'print_level':1, + 'file_print_level':5,'dual_inf_tol':float(1e-8),'linear_solver':'mumps'} + + # options for nsga + optOptions_nsga = {'maxGen':200,'seed':34534,'PopSize':200} + + # options for SLSQP + optOptions_slsqp = {'ACC':float(1e-6),'MAXIT':500,'IPRINT':1} + + # optimization problem + prob = wrapper_LTI(inputs = model_inputs,outputs = state_derivatives, + nstates = n_states,ncontrols = n_controls) + + # add relevant fields + optProb = Optimization('LTI',prob.objective_function) + optProb.addObj('obj') + optProb.addConGroup('con',n_states,lower = [None]*n_states,upper = -0*np.ones((n_states,))) + optProb.addVarGroup("xvars", nx, lower=lb, upper=ub, value=par0) + + hybrid_flag = True + + if hybrid_flag: + print('') + print('Using a hybrid-optimization approach to estimate the linear model parameters') + print('Using the NSGA2 algorithm to get a good starting point') + print('') + # solve the problem using NSGA2 algorithm + opt = NSGA2(options = optOptions_nsga) + sol = opt(optProb) + + # extract the solution + X_nsga_dict = sol.xStar + X_nsga = X_nsga_dict['xvars'] + F_ga = sol.fStar + self.X_nsga = X_nsga + self.X_nsga_dict = X_nsga_dict + else: + X_nsga = par0 + self.X_nsga = X_nsga + self.X_nsga_dict = {'xvars':X_nsga} + + + grad_flag = True + solver = 'SLSQP' + # Hack for pyoptsparse segfault + + if grad_flag: + + print('') + print('Using a gradient-based algorithm to estimate the model parameters') + print('') + + # add problem elements for IPOPT + optProb2 = Optimization('LTI',prob.objective_function) + optProb2.addObj('obj') + optProb2.addConGroup('con',n_states,lower = [None]*n_states,upper = -0*np.ones((n_states,))) + optProb2.addVarGroup("xvars", nx, lower=lb, upper=ub, value=X_nsga) + + if solver == 'SLSQP': + opt_ipopt = SLSQP(options = optOptions_slsqp) + sol_ipopt = opt_ipopt(optProb2,sens = 'FD') + + elif solver == 'IPOPT': + # solve + opt_ipopt = IPOPT(args,options = optOptions_ipopt) + sol_ipopt = opt_ipopt(optProb2,sens = 'FD') + + + # extract ipopt solution + F_ipopt = sol_ipopt.fStar + + X_ipopt_dict = sol_ipopt.xStar + X_ipopt = X_ipopt_dict['xvars'] + self.X_ipopt = X_ipopt + self.X_ipopt_dict = X_ipopt_dict + + else: + X_ipopt = X_nsga + self.X_ipopt = X_ipopt + self.X_ipopt_dict = {'xvars':X_ipopt} + + + # linear model + A,B = LTI.linear_model(X_ipopt) + func_ip,sens = LTI.objective_function(self.X_ipopt_dict) + + AB = np.hstack([B,A]).T + + else: + print('') + print('Loading linear model from mat file') + print('') + + + AB_dict = loadmat(self.linear_model_file) + + if self.region == 'BR': + AB = AB_dict['AB_br'] + + elif self.region == 'TR': + AB = AB_dict['AB_tr'] + + elif self.region == 'R': + AB = AB_dict['AB_r'] + + AB = np.array(AB) + + self.AB = AB + + if (self.n_outputs > 0): + CD = lstsq(model_inputs,outputs,rcond = -1) + + self.CD = CD[0] + + else: + + self.CD = [] + + # end timer + t2 = timer.time() + + # training time + self.linear_construct_time = t2-t1 + self.inputs_sampled = inputs_sampled + self.dx_sampled = dx_sampled + self.model_inputs = model_inputs + self.state_derivatives = state_derivatives + + + # evaluate the error between the linear model and actual derivatives + dx_error = dx_sampled - np.dot(inputs_sampled,self.AB) + + # evaluate mean + error_mean = np.mean(dx_error,0) + + # find indices with error > 1e-5 + error_ind_deriv = np.array((np.abs(error_mean) > 1e-5)) + + # store indices and error + self.error_ind_deriv = error_ind_deriv + self.dx_error = dx_error + + + if self.n_outputs > 0: + + # error between outputs + outputs_error = outputs_sampled - np.dot(inputs_sampled,self.CD) + + # store indices + self.error_ind_outputs = (np.abs(np.mean(outputs_error,0)) > 1e-5) + + elif self.L_type == 'LPV': + + AB_dict = loadmat(self.linear_model_file) + + A_list = AB_dict['A_cell'] + B_list = AB_dict['B_cell'] + C_list = AB_dict['C_cell'] + D_list = AB_dict['D_cell'] + + A = np.squeeze(np.array(A_list)) + B = np.squeeze(np.array(B_list)) + C = np.squeeze(np.array(C_list)) + D = np.squeeze(np.array(D_list)) + + W = np.squeeze(np.array(AB_dict['W'])) + + A_fun = interp1d(W,A,kind = 'nearest',axis = 0,fill_value = 'extrapolate') + B_fun = interp1d(W,B,kind = 'nearest',axis = 0,fill_value = 'extrapolate') + C_fun = interp1d(W,C,kind = 'nearest',axis = 0,fill_value = 'extrapolate') + D_fun = interp1d(W,D,kind = 'nearest',axis = 0,fill_value = 'extrapolate') + + self.A_fun = A_fun + self.B_fun = B_fun + self.C_fun = C_fun + self.D_fun = D_fun + + + self.AB = [] + self.CD = [] + self.error_ind_deriv = [] + self.error_ind_outputs = [] + #breakpoint() + + if self.N_type == None: + + # if no nonlinear corrective function is specified, do nothing + self.nonlin_deriv = None + self.nonlin_outputs = None + self.nonlin_construct_time = 0 + + else: + print('') + print('Constructing nonlinear corrective function') + print('') + + t1 = timer.time() + + self.construct_nonlinear(inputs_sampled,dx_error,self.N_type,self.error_ind_deriv,self.n_model_inputs,self.n_deriv,'deriv') + + if self.n_outputs > 0: + self.construct_nonlinear(inputs_sampled,outputs_error,self.N_type,self.error_ind_outputs,self.n_model_inputs,self.n_outputs,'outputs') + + t2 = timer.time() + + self.nonlin_construct_time = t2-t1 + + diff --git a/weis/dfsm/dfsm_plotting_scripts.py b/weis/dfsm/dfsm_plotting_scripts.py new file mode 100755 index 000000000..0b976971a --- /dev/null +++ b/weis/dfsm/dfsm_plotting_scripts.py @@ -0,0 +1,247 @@ +import os +import numpy as np +import matplotlib.pyplot as plt +import pickle +from pCrunch.io import load_FAST_out +from rosco.toolbox.ofTools.fast_io import output_processing +from rosco.toolbox.ofTools.util import spectral + + +def plot_signal(signal_dict,save_flag,save_path): + + time = signal_dict['time'] + signals_act = signal_dict['OpenFAST'] + signals_dfsm = signal_dict['DFSM'] + n_signals = signal_dict['n'] + signal_names = signal_dict['names'] + units = signal_dict['units'] + + if 'key_freq_name' in signal_dict: + key_freq_name = signal_dict['key_freq_name'] + key_freq_val = signal_dict['key_freq_val'] + + dx_flag = [not(name[0] == 'd') for name in signal_names] + + t0 = time[0];tf = time[-1] + + wd = os. getcwd() + + plot_path = wd + os.sep + save_path + + + for idx,qty in enumerate(signal_names): + + if not(qty[0] == 'd'): + + # plot controls + fig,ax = plt.subplots(2,1) + if qty == 'RtVAvgxh' or qty == 'Wind1VelX': + qty = 'Current Speed' + fig.suptitle(qty + ' '+units[idx]) + fig.subplots_adjust(hspace = 0.4) + + ax[0].set_xlabel('Time [s]') + ax[0].plot(time,signals_act[:,idx],label = 'OpenFAST') + ax[0].plot(time,signals_dfsm[:,idx],label = 'DFSM') + ax[0].legend(ncol = 2,bbox_to_anchor = (0.7,1.26)) + ax[0].set_xlim([t0,tf]) + + xf,FFT_act,_ = spectral.fft_wrap(time,signals_act[:,idx],averaging = 'Welch',averaging_window= 'hamming') + xf,FFT_dfsm,_ = spectral.fft_wrap(time,signals_dfsm[:,idx],averaging = 'Welch',averaging_window= 'hamming') + + col_list = ['k','tab:red'] + + if 'key_freq_name' in signal_dict: + for i,val in enumerate(key_freq_val[idx]): + ax[1].axvline(val,color = col_list[i],label = key_freq_name[idx][i],linestyle = ':') + ax[1].legend() + + ax[1].loglog(xf,np.sqrt(FFT_act)) + ax[1].loglog(xf,np.sqrt(FFT_dfsm)) + + ax[1].set_xlabel('Freq [Hz]') + ax[1].set_xlim([np.min(xf),np.max(xf)]) + + if save_flag: + if not os.path.exists(plot_path): + os.makedirs(plot_path) + + fig.savefig(plot_path +os.sep+ qty + '_comp.svg') + + + +def plot_dfsm_results(U_list,X_list,dx_list,Y_list,simulation_flag,outputs_flag,control_flag = False,save_flag = False,save_path = 'plots'): + + n_results = len(U_list) + + for ix in range(n_results): + + # plot controls + if control_flag: + u_dict = U_list[ix] + plot_signal(u_dict,save_flag,save_path) + + + if simulation_flag: + x_dict = X_list[ix] + plot_signal(x_dict,save_flag,save_path) + + if outputs_flag: + y_dict = Y_list[ix] + plot_signal(y_dict,save_flag,save_path) + + + + +def plot_inputs(SimulationDetails,index,plot_type,save_flag = False,save_path = 'plots'): + + # extract + sim_details = SimulationDetails.FAST_sim[index] + wd = os. getcwd() + + time = sim_details['time'] + controls = sim_details['controls'] + states = sim_details['states'] + outputs = sim_details['outputs'] + + control_names = sim_details['control_names'] + + for iu,qty in enumerate(control_names): + if (qty == 'RtVAvgxh') or (qty == 'Wind1VelX'): + control_names[iu] = 'Current Speed' + + state_names = sim_details['state_names'] + output_names = sim_details['output_names'] + + n_controls = sim_details['n_controls'] + n_outputs = sim_details['n_outputs'] + n_states = sim_details['n_states'] + + + t0 = time[0]; tf = time[-1] + print(state_names) + state_flag = [not(name[0] == 'd') for name in state_names] + n_states_ = sum(state_flag) + states_ = states[:,state_flag] + state_names_ = [] + + for idx,flag in enumerate(state_flag): + if flag: + state_names_.append(state_names[idx]) + + # depending on plot type, plot the time series quantities + if plot_type == 'vertical': + + if not(len(outputs) > 0): + + # combine all signals into a single array + quantities = np.hstack([controls,states_]) + + # get the names + quantity_names = control_names + state_names_ + + + else: + + # combine all signals into a single array + quantities = np.hstack([controls,states_,outputs]) + + # names of the quantities + quantity_names = control_names + state_names_ + output_names + + n_qty = len(quantity_names) + + # intialize plot + fig,ax = plt.subplots(n_qty,1) + + ax[-1].set_xlabel('Time [s]') + + fig.subplots_adjust(hspace = 1) + + for idx,qty in enumerate(quantity_names): + + if not(qty[0] == 'd'): + ax[idx].plot(time,quantities[:,idx]) + ax[idx].set_title(qty) + ax[idx].set_xlim([t0,tf]) + + if not(idx == n_qty-1): + ax[idx].tick_params( + axis='x', # changes apply to the x-axis + which='both', # both major and minor ticks are affected + bottom=False, # ticks along the bottom edge are off + top=False, # ticks along the top edge are off + labelbottom=False) # labels along the bottom edge are off + + + + plot_path = wd + os.sep + save_path + + if save_flag: + if not os.path.exists(plot_path): + os.makedirs(plot_path) + + fig.savefig(plot_path +os.sep+ 'inputs.svg') + + elif plot_type == 'separate': + + # plot controls + fig,axc = plt.subplots(n_controls,1) + if n_controls == 1: + axc = [axc] + axc[-1].set_xlabel('Time [s]') + fig.subplots_adjust(hspace = 0.65) + + for idx,qty in enumerate(control_names): + + axc[idx].plot(time,controls[:,idx]) + axc[idx].set_title(qty) + axc[idx].set_xlim([t0,tf]) + + plot_path = wd + os.sep + save_path + + if save_flag: + if not os.path.exists(plot_path): + os.makedirs(plot_path) + + fig.savefig(plot_path +os.sep+ 'inputs.svg') + + # plot states + fig,axs = plt.subplots(n_states,1) + if n_states == 1: + axs = [axs] + fig.subplots_adjust(hspace = 1) + axc[-1].set_xlabel('Time [s]') + + for idx,qty in enumerate(state_names): + + axs[idx].plot(time,states[:,idx]) + axs[idx].set_title(qty) + axs[idx].set_xlim([t0,tf]) + + # plot outputs + if n_outputs > 0: + + fig,axo = plt.subplots(n_outputs,1) + axc[-1].set_xlabel('Time [s]') + fig.subplots_adjust(hspace = 0.65) + + for idx,qty in enumerate(output_names): + + axo[idx].plot(time,outputs[:,idx]) + axo[idx].set_title(qty) + axo[idx].set_xlim([t0,tf]) + + + + + + + + + + + + + + \ No newline at end of file diff --git a/weis/dfsm/dfsm_rosco_simulation.py b/weis/dfsm/dfsm_rosco_simulation.py new file mode 100644 index 000000000..3dc70cf20 --- /dev/null +++ b/weis/dfsm/dfsm_rosco_simulation.py @@ -0,0 +1,74 @@ +import numpy as np +from weis.dfsm.evaluate_dfsm import evaluate_dfsm + +def run_sim_ROSCO(t,x,DFSM,param): + + turbine_state = {} + dt = t - param['time'][-1] + param['dt'].append(dt) + param['time'].append(t) + + if dt == 0: + dt = 1e-4 + + # extract data from param dict + w = param['w_fun'](t) + rpm2RadSec = 2.0*(np.pi)/60.0 + gen_speed_scaling = param['gen_speed_scaling'] + + + + # populate turbine state dictionary + if t == param['tf']: + turbine_state['iStatus'] = -1 + else: + turbine_state['iStatus'] = 1 + + + # else: + turbine_state['bld_pitch'] = np.deg2rad(param['blade_pitch'][-1]) + turbine_state['gen_torque'] = param['gen_torque'][-1]*1000 + + + turbine_state['t'] = t + turbine_state['dt'] = np.abs(dt) + turbine_state['ws'] = w + turbine_state['num_blades'] = int(2) + turbine_state['gen_speed'] = x[DFSM.gen_speed_ind]*rpm2RadSec*gen_speed_scaling + turbine_state['gen_eff'] = param['VS_GenEff']/100 + turbine_state['rot_speed'] = x[DFSM.gen_speed_ind]*rpm2RadSec*gen_speed_scaling/param['WE_GearboxRatio'] + turbine_state['Yaw_fromNorth'] = 0 + turbine_state['Y_MeasErr'] = 0 + + if not(DFSM.FA_Acc_ind == None): + turbine_state['FA_Acc'] = x[DFSM.FA_Acc_ind] + + if not(DFSM.NacIMU_FA_Acc_ind == None): + turbine_state['NacIMU_FA_Acc'] = x[DFSM.NacIMU_FA_Acc_ind] + + # call ROSCO to get control values + gen_torque, bld_pitch, nac_yawrate = param['controller_interface'].call_controller(turbine_state) + + # convert to right units + gen_torque = gen_torque/1000 + bld_pitch = np.rad2deg(bld_pitch) + + if param['wave_fun'] == None: + u = np.array([w,gen_torque,bld_pitch]) + + else: + wv = param['wave_fun'](t) + u = np.array([w,gen_torque,bld_pitch,wv]) + + # update param list + param['gen_torque'].append(gen_torque) + param['blade_pitch'].append(bld_pitch) + #param['time'].append(t) + + # combine + inputs = np.hstack([u,x]) + + # evaluate dfsm + dx = evaluate_dfsm(DFSM,inputs,'deriv') + + return dx \ No newline at end of file diff --git a/weis/dfsm/dfsm_sample_data.py b/weis/dfsm/dfsm_sample_data.py new file mode 100755 index 000000000..e60db3e4e --- /dev/null +++ b/weis/dfsm/dfsm_sample_data.py @@ -0,0 +1,134 @@ +import numpy as np +from sklearn.cluster import KMeans + +def dict2array(data): + + + # initialize storage array + input_list = [] + state_dx_list = [] + output_list = [] + + # loop through and extract data from each dictionary + for isim in data: + + # extract + controls = isim['controls'] + states = isim['states'] + state_derivatives = isim['state_derivatives'] + outputs = isim['outputs'] + + # number of outputs + n_outputs = isim['n_outputs'] + + # stack controls and states + model_inputs = np.hstack([controls,states]) + + # add to list + input_list.append(model_inputs) + state_dx_list.append(state_derivatives) + + # if there are outputs, then append + if n_outputs > 0: + output_list.append(outputs) + + # vertically stack input and outputs + model_inputs = np.vstack(input_list) + state_derivatives = np.vstack(state_dx_list) + + if n_outputs > 0: + outputs = np.vstack(output_list) + else: + outputs = [] + + + return model_inputs,state_derivatives,outputs + +def sample_data(data,sampling_type,n_samples,grouping = 'together'): + + # extract data from dict + model_inputs,state_derivatives,outputs = dict2array(data) + + # get the number of state derivatives and outputs + n_deriv = data[0]['n_deriv'] + n_outputs = data[0]['n_outputs'] + n_model_inputs = data[0]['n_model_inputs'] + + + if sampling_type == 'KM': + + if grouping == 'separate': + + # initialize storage array + dx_sampled = np.zeros((n_samples,n_deriv)) + + # if there are outputs, then initialize + if n_outputs > 0: + outputs_sampled = np.zeros((n_samples,n_outputs)) + else: + outputs_sampled = [] + + # perform kmeans clustering algorithm + kmeans = KMeans(n_clusters = n_samples,n_init = 10).fit(X = model_inputs) + + # extract centroid centers and centroid index + inputs_sampled = kmeans.cluster_centers_ + labels_ = kmeans.labels_ + + + # loop through and find the state derrivative values at the cluster centroids + for icluster in range(n_samples): + + # index of elements of the original array present in the current cluster + cluster_ind = (labels_ == icluster) + + # extract the sate derivative values at these indices + dx_ind = state_derivatives[cluster_ind,:] + + # evaluate the state derivative values at the centroid of this cluster + dx_sampled[icluster,:] = np.mean(dx_ind,axis=0) + + # if there are outputs, then extract + if n_outputs > 0: + outputs_ind = outputs[cluster_ind,:] + + outputs_sampled[icluster,:] = np.mean(outputs_ind, axis = 0) + + elif grouping == 'together': + + + if n_outputs > 0: + model_inputs_ = np.hstack([model_inputs,state_derivatives,outputs]) + else: + model_inputs_ = np.hstack([model_inputs,state_derivatives]) + + # scale the inputs/outputs + inputs_max = np.max(abs(model_inputs_),0) + model_inputs_ = model_inputs_/inputs_max + + + # perform kmeans clustering algorithm + kmeans = KMeans(n_clusters = n_samples,n_init = 10).fit(X = model_inputs_) + + # extract centroid centers and centroid index + inputs_sampled_ = kmeans.cluster_centers_ + + inputs_sampled_ = inputs_sampled_*inputs_max + + inputs_sampled = inputs_sampled_[:,0:n_model_inputs] + dx_sampled = inputs_sampled_[:,n_model_inputs:n_model_inputs+n_deriv] + + if n_outputs >0: + outputs_sampled = inputs_sampled_[:,n_model_inputs+n_deriv:] + else: + outputs_sampled = [] + + + return inputs_sampled,dx_sampled,outputs_sampled,model_inputs,state_derivatives,outputs + + + + + + + diff --git a/weis/dfsm/dfsm_utilities.py b/weis/dfsm/dfsm_utilities.py new file mode 100755 index 000000000..227eb1a03 --- /dev/null +++ b/weis/dfsm/dfsm_utilities.py @@ -0,0 +1,138 @@ +""" +Script containing utility functions required in the DFSM modules + +""" +import numpy as np +from numpy.linalg import norm +import fnmatch + + +def valid_extension(fp): + return any([fnmatch.fnmatch(fp,ext) for ext in ['*.outb']]) + +def valid_extension_DISCON(fp): + return any([fnmatch.fnmatch(fp,ext) for ext in ['*.IN']]) + + +def calculate_MSE(x1,x2): + + ''' + Function to calculate the mean square error between two signals + ''' + + # number of samples + nt = len(x1) + + # MSE + MSE = np.sum((x1-x2)**2)/nt + + return MSE + +def calculate_time(DFSM): + + sampling_time = DFSM.sampling_time/60 + construction_time = (DFSM.linear_construct_time + DFSM.nonlin_construct_time)/60 + simulation_time = DFSM.simulation_time/60 + + return {'sampling_time':sampling_time,'construction_time':construction_time,'simulation_time':simulation_time} + +def calculate_SNE(x1,x2): + + ''' + Function to calculate the sum of normed errors (SNE) as defined in https://doi.org/10.1115/1.4037407 + ''' + + # number of samples + nt = len(x1) + + # initialize + SNE = np.zeros((nt,)) + + #SNE + for i in range(nt): + SNE[i] = norm(x1[i,:]-x2[i,:]) + + # sum + SNE = np.sum(SNE) + + return SNE + +def compile_dfsm_results(time,states_dfsm,controls_dfsm,outputs_dfsm,state_names,control_names,output_names, tmin = 0): + + # initialize + OutData = {} + + # add time + OutData['Time'] = time + + time_ind = (time >= tmin) + + nt = np.sum(time_ind) + + + # add states + for i,name_ in enumerate(state_names): + + if name_[0] == 'd': + pass + else: + OutData[name_] = states_dfsm[:,i] + + if not('PtfmPitch' in state_names): + OutData['PtfmPitch'] = np.zeros((nt,)) + + if not('PtfmSurge' in state_names): + OutData['PtfmSurge'] = np.zeros((nt,)) + + if not('PtfmSway' in state_names): + OutData['PtfmSway'] = np.zeros((nt,)) + + # add controls + for i,name_ in enumerate(control_names): + + OutData[name_] = controls_dfsm[:,i] + + # add controls + if len(output_names) > 1: + for i,name_ in enumerate(output_names): + + OutData[name_] = outputs_dfsm[:,i] + + for i_blade in range(2): + OutData[f'dBldPitch{i_blade+1}'] = np.zeros((nt,)) + + return OutData + + + +def extrapolate_controls(t_out,u, t): + + # extract time + t1 = t[0] + + # scale time + t -= t1 + t_out = t_out - t1 + + if len(t) == 2: + # evaluate slope + u1 = u[0]; u2 = u[1] + b0 = (u2 - u1)/t[1] + + # extrapolate + u_out = u1 + b0*t_out + + elif len(t) == 3: + + u1 = u[0];u2 = u[1]; u3 = u[2] + + b0 = (t[2]**2*(u1 - u2) + t[1]**2*(-u1 + u3))/(t[1]*t[2]*(t[1] - t[2])) + c0 = ( (t[1]-t[2])*u1+ t[2]*u2 - t[1]*u3 ) / (t[1]*t[2]*(t[1] - t[2])) + + u_out = u1 + b0*t_out + c0*t_out**2 + + + return u_out + + + diff --git a/weis/dfsm/dfsm_wrapper.py b/weis/dfsm/dfsm_wrapper.py new file mode 100644 index 000000000..680cba507 --- /dev/null +++ b/weis/dfsm/dfsm_wrapper.py @@ -0,0 +1,817 @@ +import os +import numpy as np +import matplotlib.pyplot as plt +import warnings +import time as timer +from mat4py import loadmat +import pickle + +from rosco.toolbox import control_interface as ROSCO_ci +from weis.aeroelasticse.CaseGen_General import case_naming +from weis.aeroelasticse.FAST_writer import InputWriter_OpenFAST +from pCrunch.io import OpenFASTOutput +from pCrunch import LoadsAnalysis, PowerProduction, FatigueParams +from weis.dlc_driver.dlc_generator import DLCGenerator +from weis.aeroelasticse.turbsim_file import TurbSimFile +from weis.aeroelasticse.turbsim_util import generate_wind_files +from weis.aeroelasticse.CaseGen_General import CaseGen_General + +from weis.dfsm.simulation_details import SimulationDetails +from weis.dfsm.dfsm_plotting_scripts import plot_inputs,plot_dfsm_results +from weis.dfsm.dfsm_utilities import valid_extension,calculate_time,valid_extension_DISCON,compile_dfsm_results +from weis.dfsm.test_dfsm import test_dfsm +from weis.dfsm.construct_dfsm import DFSM +from weis.dfsm.dfsm_rosco_simulation import run_sim_ROSCO +from weis.dfsm.evaluate_dfsm import evaluate_dfsm +from weis.dfsm.ode_algorithms import RK4 + + +from scipy.interpolate import CubicSpline, interp1d +from scipy.integrate import solve_ivp + +def generate_wave_profiles(test_dataset,reqd_controls): + + # check if wave elevation is part of reqd controls + if not 'Wave1Elev' in reqd_controls: + return test_dataset + else: + + return test_dataset + + + +def generate_wind_files_local(fst_vt, modopt, inputs, discrete_inputs, FAST_runDirectory, FAST_namingOut, wind_directory): + + DLCs = modopt['DLC_driver']['DLCs'] + # Initialize the DLC generator + cut_in = float(inputs['V_cutin']) + cut_out = float(inputs['V_cutout']) + rated = float(inputs['Vrated']) + ws_class = discrete_inputs['turbine_class'] + wt_class = discrete_inputs['turbulence_class'] + hub_height = float(inputs['hub_height']) + rotorD = float(inputs['Rtip'])*2. + PLExp = float(inputs['shearExp']) + fix_wind_seeds = modopt['DLC_driver']['fix_wind_seeds'] + fix_wave_seeds = modopt['DLC_driver']['fix_wave_seeds'] + metocean = modopt['DLC_driver']['metocean_conditions'] + dlc_generator = DLCGenerator( + metocean, + **{ + 'ws_cut_in': cut_in, + 'ws_cut_out':cut_out, + 'MHK': modopt['flags']['marine_hydro'], + 'fix_wind_seeds': fix_wind_seeds, + 'fix_wave_seeds': fix_wave_seeds, + }) + # dlc_generator = DLCGenerator(cut_in, cut_out, rated, ws_class, wt_class, fix_wind_seeds, fix_wave_seeds, metocean) + # Generate cases from user inputs + for i_DLC in range(len(DLCs)): + DLCopt = DLCs[i_DLC] + dlc_generator.generate(DLCopt['DLC'], DLCopt) + + # Initialize parametric inputs + WindFile_type = np.zeros(dlc_generator.n_cases, dtype=int) + WindFile_name = [''] * dlc_generator.n_cases + rot_speed_initial = np.zeros(dlc_generator.n_cases) + pitch_initial = np.zeros(dlc_generator.n_cases) + shutdown_time = np.full(dlc_generator.n_cases, fill_value = 9999) + azimuth_init = np.full(dlc_generator.n_cases, fill_value = 0) + WindHd = np.zeros(dlc_generator.n_cases) + WaveHs = np.zeros(dlc_generator.n_cases) + WaveTp = np.zeros(dlc_generator.n_cases) + WaveHd = np.zeros(dlc_generator.n_cases) + WaveGamma = np.zeros(dlc_generator.n_cases) + WaveSeed1 = np.zeros(dlc_generator.n_cases, dtype=int) + TMax = np.zeros(dlc_generator.n_cases) + TStart = np.zeros(dlc_generator.n_cases) + dlc_label = [''] * dlc_generator.n_cases + wind_seed = np.zeros(dlc_generator.n_cases, dtype=int) + mean_wind_speed = np.zeros(dlc_generator.n_cases) + yaw_misalignment = np.zeros(dlc_generator.n_cases) + DT = np.full(dlc_generator.n_cases, fill_value = fst_vt['Fst']['DT']) + aero_mod = np.full(dlc_generator.n_cases, fill_value = fst_vt['AeroDyn15']['AFAeroMod']) + wake_mod = np.full(dlc_generator.n_cases, fill_value = fst_vt['AeroDyn15']['WakeMod']) + dt_fvw = np.zeros(dlc_generator.n_cases) + tMin = np.zeros(dlc_generator.n_cases) + nNWPanels = np.zeros(dlc_generator.n_cases, dtype=int) + nNWPanelsFree = np.zeros(dlc_generator.n_cases, dtype=int) + nFWPanels = np.zeros(dlc_generator.n_cases, dtype=int) + nFWPanelsFree = np.zeros(dlc_generator.n_cases, dtype=int) + + # fix hub height if MHK + if modopt['flags']['marine_hydro']: + # make grid span whole water depth for now, ref height will be actual hub height to get speed right + # in deeper water, will need something better than this + grid_height = 2. * np.abs(hub_height) - 1.e-3 + hub_height = grid_height/ 2 + ref_height = float(inputs['water_depth'] - np.abs(inputs['hub_height'])) + + # Inflow wind wants these relative to sea bed + fst_vt['InflowWind']['WindVziList'] = ref_height + + else: + ref_height = hub_height + + + for i_case in range(dlc_generator.n_cases): + if dlc_generator.cases[i_case].turbulent: + # Assign values common to all DLCs + # Wind turbulence class + if dlc_generator.cases[i_case].IECturbc > 0: # use custom TI for DLC case + dlc_generator.cases[i_case].IECturbc = str(dlc_generator.cases[i_case].IECturbc) + dlc_generator.cases[i_case].IEC_WindType = 'NTM' + else: + dlc_generator.cases[i_case].IECturbc = wt_class + # Reference height for wind speed + if not dlc_generator.cases[i_case].RefHt: # default RefHt is 0, use hub_height if not set + dlc_generator.cases[i_case].RefHt = ref_height + # Center of wind grid (TurbSim confusingly calls it HubHt) + dlc_generator.cases[i_case].HubHt = np.abs(hub_height) + # Height of wind grid, it stops 1 mm above the ground + dlc_generator.cases[i_case].GridHeight = 2. * np.abs(hub_height) - 1.e-3 + # If OLAF is called, make wind grid 3x higher, taller, and wider + if fst_vt['AeroDyn15']['WakeMod'] == 3: + dlc_generator.cases[i_case].HubHt *= 3. + dlc_generator.cases[i_case].GridHeight *= 3. + # Width of wind grid, same of height + dlc_generator.cases[i_case].GridWidth = dlc_generator.cases[i_case].GridHeight + # Power law exponent of wind shear + if dlc_generator.cases[i_case].PLExp < 0: # use PLExp based on environment options (shear_exp), otherwise use custom DLC PLExp + dlc_generator.cases[i_case].PLExp = PLExp + # Length of wind grids + dlc_generator.cases[i_case].AnalysisTime = dlc_generator.cases[i_case].analysis_time + dlc_generator.cases[i_case].transient_time + + for i_case in range(dlc_generator.n_cases): + WindFile_type[i_case] , WindFile_name[i_case] = generate_wind_files( + dlc_generator, FAST_namingOut, wind_directory, rotorD, hub_height, i_case) + + # Set initial rotor speed and pitch if the WT operates in this DLC and available, + # otherwise set pitch to 90 deg and rotor speed to 0 rpm when not operating + # set rotor speed to rated and pitch to 15 deg if operating + for i_case in range(dlc_generator.n_cases): + if 'operating' in dlc_generator.cases[i_case].turbine_status: + # We have initial conditions from WISDEM + if ('U' in inputs) and ('Omega' in inputs) and ('pitch' in inputs): + rot_speed_initial[i_case] = np.interp(dlc_generator.cases[i_case].URef, inputs['U'], inputs['Omega']) + pitch_initial[i_case] = np.interp(dlc_generator.cases[i_case].URef, inputs['U'], inputs['pitch']) + else: + rot_speed_initial[i_case] = fst_vt['DISCON_in']['PC_RefSpd'] * 30 / np.pi / fst_vt['ElastoDyn']['GBRatio'] + pitch_initial[i_case] = 15 + + if dlc_generator.cases[i_case].turbine_status == 'operating-shutdown': + shutdown_time[i_case] = dlc_generator.cases[i_case].shutdown_time + else: + rot_speed_initial[i_case] = 0. + pitch_initial[i_case] = 90. + shutdown_time[i_case] = 0 + aero_mod[i_case] = 1 + wake_mod[i_case] = 0 + + # Wave inputs to HydroDyn + WindHd[i_case] = dlc_generator.cases[i_case].wind_heading + WaveHs[i_case] = dlc_generator.cases[i_case].wave_height + WaveTp[i_case] = dlc_generator.cases[i_case].wave_period + WaveHd[i_case] = dlc_generator.cases[i_case].wave_heading + WaveGamma[i_case] = dlc_generator.cases[i_case].wave_gamma + WaveSeed1[i_case] = dlc_generator.cases[i_case].wave_seed1 + + # Other case info + TMax[i_case] = dlc_generator.cases[i_case].analysis_time + dlc_generator.cases[i_case].transient_time + TStart[i_case] = dlc_generator.cases[i_case].transient_time + dlc_label[i_case] = dlc_generator.cases[i_case].label + wind_seed[i_case] = dlc_generator.cases[i_case].RandSeed1 + mean_wind_speed[i_case] = dlc_generator.cases[i_case].URef + yaw_misalignment[i_case] = dlc_generator.cases[i_case].yaw_misalign + azimuth_init[i_case] = dlc_generator.cases[i_case].azimuth_init + + # Current + CurrMod = np.zeros(dlc_generator.n_cases,dtype=int) + CurrDIV = np.array([c.current for c in dlc_generator.cases]) + CurrMod[CurrDIV > 0] = 1 + + # Parameteric inputs + case_inputs = {} + # Main fst + case_inputs[("Fst","DT")] = {'vals':DT, 'group':1} + case_inputs[("Fst","TMax")] = {'vals':TMax, 'group':1} + case_inputs[("Fst","TStart")] = {'vals':TStart, 'group':1} + # Inflow wind + case_inputs[("InflowWind","WindType")] = {'vals':WindFile_type, 'group':1} + case_inputs[("InflowWind","HWindSpeed")] = {'vals':mean_wind_speed, 'group':1} + case_inputs[("InflowWind","FileName_BTS")] = {'vals':WindFile_name, 'group':1} + case_inputs[("InflowWind","Filename_Uni")] = {'vals':WindFile_name, 'group':1} + case_inputs[("InflowWind","RefLength")] = {'vals':[rotorD], 'group':0} + case_inputs[("InflowWind","PropagationDir")] = {'vals':WindHd, 'group':1} + case_inputs[("InflowWind","RefHt_Uni")] = {'vals':[np.abs(hub_height)], 'group':0} #TODO: check if this is the distance from sea level or bottom + # Initial conditions for rotor speed, pitch, and azimuth + case_inputs[("ElastoDyn","RotSpeed")] = {'vals':rot_speed_initial, 'group':1} + case_inputs[("ElastoDyn","BlPitch1")] = {'vals':pitch_initial, 'group':1} + case_inputs[("ElastoDyn","BlPitch2")] = case_inputs[("ElastoDyn","BlPitch1")] + case_inputs[("ElastoDyn","BlPitch3")] = case_inputs[("ElastoDyn","BlPitch1")] + case_inputs[("ElastoDyn","Azimuth")] = {'vals':azimuth_init, 'group':1} + # Yaw offset + case_inputs[("ElastoDyn","NacYaw")] = {'vals':yaw_misalignment, 'group':1} + # Inputs to HydroDyn + case_inputs[("HydroDyn","WaveHs")] = {'vals':WaveHs, 'group':1} + case_inputs[("HydroDyn","WaveTp")] = {'vals':WaveTp, 'group':1} + case_inputs[("HydroDyn","WaveDir")] = {'vals':WaveHd, 'group':1} + case_inputs[("HydroDyn","WavePkShp")] = {'vals':WaveGamma, 'group':1} + case_inputs[("HydroDyn","WaveSeed1")] = {'vals':WaveSeed1, 'group':1} + # Inputs to ServoDyn (parking), PitManRat and BlPitchF are ServoDyn modeling_options + case_inputs[("ServoDyn","TPitManS1")] = {'vals':shutdown_time, 'group':1} + case_inputs[("ServoDyn","TPitManS2")] = {'vals':shutdown_time, 'group':1} + case_inputs[("ServoDyn","TPitManS3")] = {'vals':shutdown_time, 'group':1} + + case_inputs[("HydroDyn","CurrMod")] = {'vals':CurrMod, 'group':1} + case_inputs[("HydroDyn","CurrDIV")] = {'vals':CurrDIV, 'group':1} + + # Inputs to AeroDyn (parking) + case_inputs[("AeroDyn15","AFAeroMod")] = {'vals':aero_mod, 'group':1} + case_inputs[("AeroDyn15","WakeMod")] = {'vals':wake_mod, 'group':1} + + # Inputs to OLAF + case_inputs[("AeroDyn15","OLAF","DTfvw")] = {'vals':dt_fvw, 'group':1} + case_inputs[("AeroDyn15","OLAF","nNWPanels")] = {'vals':nNWPanels, 'group':1} + case_inputs[("AeroDyn15","OLAF","nNWPanelsFree")] = {'vals':nNWPanelsFree, 'group':1} + case_inputs[("AeroDyn15","OLAF","nFWPanels")] = {'vals':nFWPanels, 'group':1} + case_inputs[("AeroDyn15","OLAF","nFWPanelsFree")] = {'vals':nFWPanelsFree, 'group':1} + + # DLC Label add these for the case matrix and delete from the case_list + case_inputs[("DLC","Label")] = {'vals':dlc_label, 'group':1} + case_inputs[("DLC","WindSeed")] = {'vals':wind_seed, 'group':1} + case_inputs[("DLC","MeanWS")] = {'vals':mean_wind_speed, 'group':1} + fst_vt['DLC'] = [] + + # Append current DLC to full list of cases + FAST_InputFile = modopt['General']['openfast_configuration']['OF_run_fst'] + case_list, case_name = CaseGen_General(case_inputs, FAST_runDirectory, FAST_InputFile) + + + # Now delete the DLC-based case_inputs because they don't play nicely with aeroelasticse + for case in case_list: + for key in list(case): + if key[0] == 'DLC': + del case[key] + + return dlc_generator, case_list, case_name,TMax, TStart + + + +def write_FAST_files(fst_vt, FAST_runDirectory, FAST_namingOut): + writer = InputWriter_OpenFAST() + writer.fst_vt = fst_vt + writer.FAST_runDirectory = FAST_runDirectory + writer.FAST_namingOut = FAST_namingOut + + writer.execute() + + + +def extract_simulation_results(modeling_data_path, model_options): + + # Get the path to the outb files in the folder, and arrange them + outfiles = [os.path.join(modeling_data_path,f) for f in os.listdir(modeling_data_path) if valid_extension(f)] + outfiles = sorted(outfiles) + + # Get the states, controls and outputs of the DFSM model + reqd_states = model_options['reqd_states'] + reqd_controls = model_options['reqd_controls'] + reqd_outputs = model_options['reqd_outputs'] + + + # Get scaling and filtering arguments + # --these arguments are used to scale and filter specific signals before constructing the DFSM model + scale_args = model_options['scale_args'] + filter_args = model_options['filter_args'] + + # Get additional options + + # 1. file name: Referes to file that has the linear models are available + filename = model_options['linear_model_file'] + if filename == 'none': + filename = None + + # 2. region: The region for which the linear model stored in the file is constructed + region = model_options['region'] + + # 3. add_dx2: Flag to add the first time/second time state derivatives to the model + add_dx2 = model_options['add_dx2'] + + # 4. tmin and tmax: If specified, the simulation data corresponding to t \in [tmin,tmax] is used to construct the DFSM + # -- tmin is by default 0, and tmax is none + tmin = model_options['tmin']; tmax = model_options['tmax'] + + # Extract the simulation + # instantiate class + sim_detail = SimulationDetails(outfiles, + reqd_states,reqd_controls,reqd_outputs, + scale_args, filter_args, + tmin = tmin, add_dx2 = add_dx2, + linear_model_file = filename, region = region) + + # load and process data + sim_detail.load_openfast_sim() + + return sim_detail + +def construct_dfsm_helper(sim_detail, construction_options): + + # Extract options + n_samples = construction_options['n_samples'] + + # Sampling method + sampling_method = construction_options['sampling_method'] + + # Linear model type + L_type = construction_options['L_type'] + + # Nonlinear model type + N_type = construction_options['N_type'] + + if N_type == 'None': + N_type = None + + # Train split + train_split = construction_options['train_split'] + + + # instantiate DFSM class + dfsm = DFSM(sim_detail, + n_samples = n_samples, + sampling_method = sampling_method, + L_type = L_type, + N_type = N_type, + train_split = train_split) + + # construct + dfsm.construct_surrogate() + + return dfsm + + + +def dfsm_wrapper(fst_vt, modopt, inputs, discrete_inputs, FAST_runDirectory = None, FAST_namingOut = None): + + # Load the stored DFSM model and run simulations with it + general_options = modopt['DFSM']['general_options'] + usecase_options = modopt['DFSM']['usecase_options'] + model_options = modopt['DFSM']['model_options'] + construction_options = modopt['DFSM']['construction_options'] + + model_options['run_dir'] = modopt['General']['openfast_configuration']['OF_run_dir'] + + + + # extract model/test availability + #-- can be online or offline + modeling_data_availability = general_options['modeling_data_availability'] + testing_data_availability = general_options['testing_data_availability'] + + # check the storage type + #-- can be pickle files or outb files + storage_type = general_options['storage_type'] # outb files by default + + # Extract datapath + # --this is the folder in which the .outb files are available + modeling_data_path = general_options['modeling_data_path'] + + + if testing_data_availability == 'online': + # If the test data is online, this implies, the DFSM will be used to run simulations + # and save them in the current openfast run directory + testing_data_path = FAST_runDirectory + + elif testing_data_availability == 'offline': + testing_data_path = general_options['testing_data_path'] + + dfsm_save_folder = testing_data_path + os.sep + 'dfsm_results' + + if modeling_data_availability == 'offline': + + if (storage_type == 'outb'): + + sim_details = extract_simulation_results(modeling_data_path, model_options) + + #--------------------------------------------------------------- + # Construct DFSM model + #--------------------------------------------------------------- + + dfsm = construct_dfsm_helper(sim_details, construction_options) + + elif storage_type == 'pickle': + + # load DFSM model from pickle file + with open(modeling_data_path,'r') as handle: + stored_data = pickle.load(handle) + + sim_details = stored_data['simulation_details'] + dfsm = stored_data['dfsm'] + + #------------------------------------------------------ + # Use case + #------------------------------------------------------ + + # Get usecase + usecase = usecase_options['usecase'] + + # extract test options + test_options = usecase_options['test_options'] + + # extract solver options + solver_options = usecase_options['solver_options'] + + if usecase == 'simulation': + + if testing_data_availability == 'offline': + + if testing_data_path == modeling_data_path: + # If both the paths are the same, then it implies we are using a part of the data to construct the model + # and part of the data for testing. This testing data should be available from the DFSM class + + # extract test data + test_dataset = dfsm.test_data + + test_ind = test_options['test_ind'] + + else: + + # extract simulation results + test_sim_detail = extract_simulation_results(testing_data_path, model_options) + + test_dataset = test_sim_detail.FAST_sim + test_ind = np.arange(len(test_dataset)) + + n_test = len(test_ind) + + case_list = ['dfsm_test_' + str(cn) for cn in range(n_test)] + + dlc_generator = [] + + + + elif (testing_data_availability == 'online') and (modeling_data_availability == 'offline'): + + # generate wind files + wind_directory = FAST_runDirectory + os.sep + 'wind' + dlc_generator, case_list, case_name, TMax, TStart = generate_wind_files_local(fst_vt, modopt, inputs, discrete_inputs, FAST_runDirectory, FAST_namingOut, wind_directory) + + # Extract disturbance(s) + test_dataset = [] + for case in case_list: + ts_file = TurbSimFile(case[('InflowWind','FileName_BTS')]) + ts_file.compute_rot_avg(fst_vt['ElastoDyn']['TipRad']) + u_h = ts_file['rot_avg'][0,:] + tt = ts_file['t'] + test_dataset.append({'time':tt, 'wind_speed': u_h}) + + test_ind = np.arange(len(case_list)) + + test_dataset = generate_wave_profiles(test_dataset,model_options['reqd_controls']) + breakpoint() + # generate OpenFAST files + # This step generates the DISCON.IN and cp-ct-cq.txt files which are need to run closed-loop simulations + for case in case_name: + write_FAST_files(fst_vt, FAST_runDirectory, case) + + case_names = case_naming(len(case_name),'dfsm') + + + # initialize storage lists + output_list = [] + ct = [] + status = [False]*len(test_ind) + + # required maginitude and fatigue channels + #-- note: Some of these quantities are not always modeled using the DFSM. The corresponding outputs for these quantities will be 'Nan' + magnitude_channels = {'LSShftF': ['RotThrust', 'LSShftFys', 'LSShftFzs'], + 'LSShftM': ['RotTorq', 'LSSTipMys', 'LSSTipMzs'], + 'RootMc1': ['RootMxc1', 'RootMyc1', 'RootMzc1'], + 'RootMc2': ['RootMxc2', 'RootMyc2', 'RootMzc2'], + 'RootMc3': ['RootMxc3', 'RootMyc3', 'RootMzc3'], + 'TipDc1': ['TipDxc1', 'TipDyc1', 'TipDzc1'], + 'TipDc2': ['TipDxc2', 'TipDyc2', 'TipDzc2'], + 'TipDc3': ['TipDxc3', 'TipDyc3', 'TipDzc3'], + 'TwrBsM': ['TwrBsMxt', 'TwrBsMyt', 'TwrBsMzt'], + 'NcIMUTA': ['NcIMUTAxs', 'NcIMUTAys', 'NcIMUTAzs']} + + fatigue_channels = { + 'RootMc1': FatigueParams(slope=10), + 'RootMc2': FatigueParams(slope=10), + 'RootMc3': FatigueParams(slope=10), + 'RootMyb1': FatigueParams(slope=10), + 'RootMyb2': FatigueParams(slope=10), + 'RootMyb3': FatigueParams(slope=10), + 'TwrBsM': FatigueParams(slope=4), + 'LSShftM': FatigueParams(slope=4), + } + + + for idx,ind in enumerate(test_ind): + + if testing_data_availability == 'online': + + test_data = test_dataset[ind] + + time = test_data['time']; wind_speed = test_data['wind_speed'] + x0 = np.array([ 609.36004639, -552.18917651]) + + # initialize param dict + param = {} + + # populate dict with relevant info + param['VS_GenEff'] = fst_vt['DISCON_in']['VS_GenEff'] + param['WE_GearboxRatio'] = fst_vt['DISCON_in']['WE_GearboxRatio'] + param['VS_RtPwr'] = fst_vt['DISCON_in']['VS_RtPwr'] + + + DISCON_file = [os.path.join(testing_data_path,f) for f in os.listdir(testing_data_path) if valid_extension_DISCON(f)] + DISCON_file = DISCON_file[idx] + + param['controller_interface'] = ROSCO_ci.ControllerInterface(fst_vt['ServoDyn']['DLL_FileName'], param_filename = DISCON_file) + + t0 = 0; + tf = test_data['time'][-1] + tspan = [t0,tf] + + if len(model_options['scale_args']) == 0: + param['gen_speed_scaling'] = 1 + + param['t0'] = t0 + param['tf'] = tf + param['time'] = [t0] + param['dt'] = [0] + + param['blade_pitch'] = [15] + param['gen_torque'] = [0] + + w_fun = CubicSpline(time, wind_speed) + + param['w_fun'] = w_fun + param['wave_fun'] = None + + # extract solver options + solver_options = usecase_options['solver_options'] + + # start timer and solve for the states and controls + t1 = timer.time() + sol = solve_ivp(run_sim_ROSCO,tspan,x0,method=solver_options['method'],args = (dfsm,param),rtol = solver_options['rtol'],atol = solver_options['atol']) + t2 = timer.time() + dfsm.simulation_time = (t2-t1) + + status[idx] = sol.success + + # extract solution + time = sol.t + + states = sol.y + states_dfsm = states.T + + + # kill controller + param['controller_interface'].kill_discon() + wind_speed = w_fun(time) + tspan = [0,tf] + time_sim = param['time'] + blade_pitch = np.array(param['blade_pitch']) + gen_torque = np.array(param['gen_torque']) + + # interpolate controls + blade_pitch_DFSM = interp1d(time_sim,blade_pitch)(time) + gen_torque_DFSM = interp1d(time_sim,gen_torque)(time) + + controls_dfsm = np.array([wind_speed,gen_torque_DFSM,blade_pitch_DFSM]).T + inputs_dfsm = np.hstack([controls_dfsm,states_dfsm]) + + fun_type = 'outputs' + + if dfsm.n_outputs > 0: + outputs_dfsm = evaluate_dfsm(dfsm,inputs_dfsm,fun_type) + + else: + outputs_dfsm = [] + + # plot properties + markersize = 10 + linewidth = 1.5 + fontsize_legend = 16 + fontsize_axlabel = 18 + fontsize_tick = 12 + + fig, ((ax1,ax2,ax3)) = plt.subplots(3,1,) + + # wind + ax1.plot(time,controls_dfsm[:,0]) + ax1.set_title('Wind Speed [m/s]') + ax1.set_xlim([t0,tf]) + + # torue + ax2.plot(time,controls_dfsm[:,1]) + #ax2.set_ylim([1.8,2]) + ax2.set_title('Gen Torque [KWm]') + ax2.set_xlim([t0,tf]) + + # blade pitch + ax3.plot(time,controls_dfsm[:,2]) + #ax3.set_ylim([0.2, 0.3]) + ax3.set_title('Bld Pitch [deg]') + ax3.set_xlim([t0,tf]) + + fig.subplots_adjust(hspace = 0.65) + + if general_options['save_results']: + # save results + if not os.path.exists(dfsm_save_folder): + os.makedirs(dfsm_save_folder) + + fig.savefig(dfsm_save_folder +os.sep+ 'Controls' +str(idx) + '.pdf') + + + # post processing + case_name = case_names[idx] + + # compile results from DFSM + OutData = compile_dfsm_results(time,states_dfsm,controls_dfsm,outputs_dfsm,model_options['reqd_states'], + model_options['reqd_controls'],model_options['reqd_outputs'],TStart[idx]) + #breakpoint() + ct.append(OutData) + # get output + + output = OpenFASTOutput.from_dict(OutData,case_name,magnitude_channels = magnitude_channels) + + if general_options['save_results']: + if not os.path.exists(dfsm_save_folder): + os.makedirs(dfsm_save_folder) + + output.df.to_pickle(os.path.join(dfsm_save_folder,case_name+'.p')) + + output_list.append(output) + + elif testing_data_availability == 'offline': + + test_data = test_dataset[ind] + time_OF = test_data['time'] + + wind_speed = test_data['controls'][:,dfsm.wind_speed_ind] + w_pp = CubicSpline(time_OF, wind_speed) + w_fun = lambda t: w_pp(t) + + + GT_OF = test_data['controls'][:,dfsm.gen_torque_ind] + BP_OF = test_data['controls'][:,dfsm.blade_pitch_ind] + + if 'Wave1Elev' in model_options['reqd_controls']: + wave_elev = test_data['controls'][:,dfsm.wave_elev_ind] + wave_pp = CubicSpline(time_OF,wave_elev) + wave_fun = lambda t:wave_pp(t) + + + + time_OF = test_data['time'] + + states_OF = test_data['states'] + x0 = test_data['states'][0,:] + + + # initialize param dict + param = usecase_options['param'] + + # find the discon files + DISCON_files = [os.path.join(testing_data_path,f) for f in os.listdir(testing_data_path) if valid_extension_DISCON(f)] + DISCON_file = DISCON_files[idx] + + #initialize controller interface + args = {'DT':param['DT'], + 'num_blade':param['num_blade']} + + param['controller_interface'] = ROSCO_ci.ControllerInterface(param['DLL_FileName'], param_filename = DISCON_file,**args) + + t0 = 0; + tf = test_data['time'][-1] + tspan = [t0,tf] + + if len(model_options['scale_args']) == 0: + param['gen_speed_scaling'] = 1 + + else: + param['gen_speed_scaling'] = model_options['scale_args']['state_scaling_factor'][dfsm.gen_speed_ind] + + param['t0'] = t0 + param['tf'] = tf + param['time'] = [t0] + dt = param['DT'] + param['ny'] = len(model_options['reqd_outputs']) + param['blade_pitch'] = [16] + param['gen_torque'] = [10000] + + param['w_fun'] = w_fun + + if 'Wave1Elev' in model_options['reqd_controls']: + param['wave_fun'] = wave_fun + else: + param['wave_fun'] = None + + # start timer and solve for the states and controls + t1 = timer.time() + T_dfsm, states_dfsm, controls_dfsm,outputs_dfsm,T_extrap, U_extrap = RK4(x0, dt, tspan, dfsm, param) + t2 = timer.time() + dfsm.simulation_time = (t2-t1) + + # kill controller + param['controller_interface'].kill_discon() + + tspan = [t0,tf] + time = time_OF + time_sim = T_dfsm + blade_pitch = controls_dfsm[:,dfsm.blade_pitch_ind] + gen_torque = controls_dfsm[:,dfsm.gen_torque_ind] + + # interpolate controls + blade_pitch_DFSM = interp1d(time_sim,blade_pitch)(time) + gen_torque_DFSM = interp1d(time_sim,gen_torque)(time) + + # plot properties + markersize = 10 + linewidth = 1.5 + fontsize_legend = 16 + fontsize_axlabel = 18 + fontsize_tick = 12 + + fig,ax = plt.subplots(1) + ax.plot(time,blade_pitch_DFSM,label = 'DFSM') + ax.plot(time,BP_OF,label = 'OpenFAST') + ax.set_title('BldPitch [deg]',fontsize = fontsize_axlabel) + ax.set_xlim(tspan) + ax.tick_params(labelsize=fontsize_tick) + + ax.legend(ncol = 2,fontsize = fontsize_legend) + ax.set_xlabel('Time [s]',fontsize = fontsize_axlabel) + + fig,ax = plt.subplots(1) + ax.plot(time,gen_torque_DFSM,label = 'DFSM') + ax.plot(time,GT_OF,label = 'OpenFAST',alpha = 0.9) + + ax.set_title('GenTq [kNm]',fontsize = fontsize_axlabel) + ax.set_xlim(tspan) + #ax.set_ylim([2,6]) + ax.tick_params(labelsize=fontsize_tick) + ax.legend(ncol = 2,fontsize = fontsize_legend) + ax.set_xlabel('Time [s]',fontsize = fontsize_axlabel) + + # post processing + case_name = 'dfsm_test_' + str(idx) + + # compile results from DFSM + OutData = compile_dfsm_results(time,states_dfsm,controls_dfsm,outputs_dfsm,test_data['state_names'],test_data['control_names'],test_data['output_names']) + + ct.append(OutData) + + if general_options['save_results']: + # save results + if not os.path.exists(dfsm_save_folder): + os.makedirs(dfsm_save_folder) + + fig.savefig(dfsm_save_folder +os.sep+ 'Controls' +str(idx) + '.pdf') + + # get output + + output = OpenFASTOutput.from_dict(OutData,case_name,magnitude_channels = magnitude_channels) + output.df.to_pickle(os.path.join(testing_data_path,case_name+'.p')) + + output_list.append(output) + TMax = tf;TStart = t0 + param['controller_interface'] = [] + param['w_fun'] = [] + param['wave_fun'] = [] + plt.show() + + # Collect outputs + ss = {} + et = {} + dl = {} + dam = {} + + + loads_analysis = LoadsAnalysis( + outputs = [], + magnitude_channels = magnitude_channels, + fatigue_channels = fatigue_channels + ) + + for output in output_list: + _name, _ss, _et, _dl, _dam = loads_analysis._process_output(output) + ss[_name] = _ss + et[_name] = _et + dl[_name] = _dl + dam[_name] = _dam + + summary_stats, extreme_table, DELs, Damage = loads_analysis.post_process(ss, et, dl, dam) + + + return summary_stats,extreme_table,DELs,Damage,case_list, case_name, ct, dlc_generator, TMax, TStart + + + + + + diff --git a/weis/dfsm/evaluate_dfsm.py b/weis/dfsm/evaluate_dfsm.py new file mode 100755 index 000000000..d1ac04929 --- /dev/null +++ b/weis/dfsm/evaluate_dfsm.py @@ -0,0 +1,159 @@ +import numpy as np + + +def evaluate_dfsm(DFSM,inputs,fun_type = 'deriv'): + + # get number of points + n_points = len(np.shape(inputs)) + + if n_points == 1: + inputs = inputs.reshape(1,-1) + nt = 1 + else: + nt = np.shape(inputs)[0] + + # based on the function type extract the info + if fun_type == 'deriv': + + # state derivative function + lin = DFSM.AB + nonlin = DFSM.nonlin_deriv + no = DFSM.n_deriv + error_ind = DFSM.error_ind_deriv + + elif fun_type == 'outputs': + + # output function + lin = DFSM.CD + nonlin = DFSM.nonlin_outputs + no = DFSM.n_outputs + error_ind = DFSM.error_ind_outputs + + if DFSM.L_type == None: + + dx_lin = np.zeros((nt,no)) + + else: + + # if LTI model + if DFSM.L_type == 'LTI': + + dx_lin = np.dot(inputs,lin) + + elif DFSM.L_type == 'LPV': + + A_fun = DFSM.A_fun + B_fun = DFSM.B_fun + C_fun = DFSM.C_fun + D_fun = DFSM.D_fun + + nu = DFSM.n_model_inputs - DFSM.n_deriv + + if nt == 1: + + inputs = np.squeeze(inputs) + + # extract inputs and outputs + u = inputs[:nu] + x = inputs[nu:] + + # extract wind speed + w = u[0] + + # evaluate the LPV function to get the system matrices + if fun_type == 'deriv': + + # A and B matrices for the derivative function + A_ = A_fun(w) + B_ = B_fun(w) + + + dx_lin = np.dot(A_,x) + np.dot(B_,u) + + elif fun_type == 'outputs': + + # C and D matrices for outputs + C_ = C_fun(w) + D_ = D_fun(w) + + dx_lin = np.dot(C_,x) + np.dot(D_,u) + + elif nt > 1: + + # initialize + dx_lin = np.zeros((nt,no)) + + # extract inputs and outputs + u = inputs[:,:nu] + x = inputs[:,nu:] + + for i in range(nt): + + w = u[i,0] + x_ = x[i,:] + u_ = u[i,:] + + # evaluate the LPV function to get the system matrices + if fun_type == 'deriv': + + # A and B matrices for the derivative function + A_ = A_fun(w) + B_ = B_fun(w) + + + dx_lin[i,:] = np.dot(A_,x_) + np.dot(B_,u_) + + elif fun_type == 'outputs': + + # C and D matrices for outputs + C_ = C_fun(w) + D_ = D_fun(w) + + dx_lin[i,:] = np.dot(C_,x_) + np.dot(D_,u_) + + # initialize nonlinear part + dx_nonlin = np.zeros((nt,no)) + + # loop through and evaluate + if not(DFSM.N_type == None): + + for io in range(no): + + if error_ind[io]: + + nonlin_func = nonlin[io] + + scaler = DFSM.scaler + + # scale + if scaler == None: + inputs_ = inputs + else: + inputs_ = scaler.transform(inputs) + + # predict + nonlin_prediction = nonlin_func.predict(inputs_) + + # # reshape if the prediction is for a single point + # if len(np.shape(nonlin_prediction)) == 1: + # nonlin_prediction = nonlin_prediction.reshape(-1,1) + + # add + dx_nonlin[:,io] = dx_nonlin[:,io] + nonlin_prediction + + + dx = dx_lin + dx_nonlin + + if n_points == 1: + dx = np.squeeze(dx) + + return dx + + + + + + + + + diff --git a/weis/dfsm/ode_algorithms.py b/weis/dfsm/ode_algorithms.py new file mode 100644 index 000000000..007acf4f7 --- /dev/null +++ b/weis/dfsm/ode_algorithms.py @@ -0,0 +1,206 @@ +import numpy as np +from weis.dfsm.evaluate_dfsm import evaluate_dfsm +from weis.dfsm.dfsm_utilities import extrapolate_controls + +def RK4(x0, dt, tspan, DFSM, param): + + + + # calculate intervals + t0 = tspan[0]; tf = tspan[1] + + # initialize + T = np.arange(t0,tf+dt,dt) + n = len(T); nx = len(x0) + X = np.zeros((n,nx)) + + # Check the number of outputs in the DFSM model + ny = param['ny'] + + # initalize storage array for outputs + if ny == 0: + Y = [] + else: + Y = np.zeros((n,ny)) + + # starting point + X[0,:] = x0 + + # parameter to scale generator speed + gen_speed_scaling = param['gen_speed_scaling'] + + # extract current speed and wave function + wave_fun = param['wave_fun'] + wind_fun = param['w_fun'] + + # evaluate wind/current speed for the time stencil + WS = wind_fun(T) + + # convert rpm to rad/s + # OpenFAST stores genspeed as rpm, whearas ROSCO requiers genspeed in rad/s + rpm2RadSec = 2.0*(np.pi)/60.0 + KWatt2Watt = 1000 + Deg2Rad = np.pi/180 + + + + # initialize extrapolation arrays + if wave_fun == None: + U_extrap = np.zeros((2*n-1,3)) + U = np.zeros((n,3)) + + else: + WE = wave_fun(T) + U_extrap = np.zeros((2*n-1,4)) + U = np.zeros((n,4)) + + # storage array + ind_extrap = 0 + T_extrap = np.zeros((2*n-1,)) + T_extrap[ind_extrap] = T[0] + + # set first entry in the extrapolation + U_extrap[ind_extrap,0] = WS[0] + U_extrap[ind_extrap,1] = param['gen_torque'][0] + U_extrap[ind_extrap,2] = param['blade_pitch'][0] + + # store control + U[0,DFSM.wind_speed_ind] = WS[0] + U[0,DFSM.gen_torque_ind] = param['gen_torque'][0] + U[0,DFSM.blade_pitch_ind] = param['blade_pitch'][0] + + UK4 = [] + + if not(wave_fun == None): + U[0,DFSM.wave_elev_ind] = WE[0] + U_extrap[ind_extrap,DFSM.wave_elev_ind] = WE[0] + + # loop through and evaluate states + for h in range(1,n): + + t_n = T[h-1] + x_n = X[h-1,:] + + # get from previous time step + u_k1 = U[h-1,:] + + # inputs for DFSM + inputs = np.hstack([u_k1,x_n]) + + k1 = evaluate_dfsm(DFSM,inputs,'deriv') + + # if h == 1: + # u_k2 = u_k1 # zero order hold for the first step + # else: + # #breakpoint() + # u2_ = u_k1 + # u1_ = U_extrap[ind_extrap-1,:] + # t2_ = T_extrap[ind_extrap] + # t1_ = T_extrap[ind_extrap-1] + # u_k2 = extrapolate_controls(t_n + dt/2,[u1_,u2_],[t1_,t2_]) + # u_k2[0] = wind_fun(t_n + dt/2) + + # if not(wave_fun == None): + # u_k2[3] = wave_fun(t_n + dt/2) + u_k2 = u_k1 + + # add values to exrap array + ind_extrap += 1 + U_extrap[ind_extrap] = u_k2 + T_extrap[ind_extrap] = t_n + dt/2 + + # second step + # k2 = f(t_n + h/2,x_n + h*k1/2) + xn_k2 = x_n + dt/2*k1 + inputs = np.hstack([u_k2,xn_k2]) + k2 = evaluate_dfsm(DFSM,inputs,'deriv') + + # Third step + # k3 = f(t_n + h/2,x_n + h*k2/2) + u_k3 = u_k2 + xn_k3 = x_n + dt/2*k2 + inputs = np.hstack([u_k3,xn_k3]) + k3 = evaluate_dfsm(DFSM,inputs,'deriv') + + # extrapolate and find the value of the controls at tn + dt + u2_ = U_extrap[ind_extrap,:] + u1_ = U_extrap[ind_extrap-1,:] + t2_ = T_extrap[ind_extrap] + t1_ = T_extrap[ind_extrap-1] + u_k4 = extrapolate_controls(t_n + dt,[u1_, u2_],[t1_, t2_]) + u_k4[DFSM.wind_speed_ind] = wind_fun(t_n + dt) + + if not(wave_fun == None): + u_k4[DFSM.wave_elev_ind] = wave_fun(t_n + dt) + + # fourth step + # k3 = f(t_n + h,x_n + hk3) + xn_k4 = x_n + dt*k3 + inputs = np.hstack([u_k4,xn_k4]) + k4 = evaluate_dfsm(DFSM,inputs,'deriv') + + # runge kutta step + # x_n+1 = x_n + h/6*(k1 + 2k2 + 2k3 + k4) + x_step = x_n + dt/6*(k1 + 2*k2 + 2*k3 + k4) + + # evaluate outputs at t_n+1 using the stimate states and extrapolated controls + inputs = np.hstack([u_k4,x_step]) + + if ny > 0: + Y[h,:] = evaluate_dfsm(DFSM,inputs,'outputs') + + X[h,:] = x_step + + # Initialize turbine_state dict to pass the necessary information to ROSCO + turbine_state = {} + + # operating status of the turbine + if h == n: + turbine_state['iStatus'] = -1 + else: + turbine_state['iStatus'] = 1 + + turbine_state['bld_pitch'] = np.deg2rad(U[h-1,DFSM.blade_pitch_ind]) # blade pitch + turbine_state['gen_torque'] = U[h-1,DFSM.gen_torque_ind]*KWatt2Watt # generator torque + turbine_state['t'] = t_n # previous time step + turbine_state['dt'] = dt # step size + turbine_state['ws'] = WS[h] # estimate wind speed + turbine_state['num_blades'] = int(2) # number of blades + turbine_state['gen_speed'] = X[h,DFSM.gen_speed_ind]*rpm2RadSec*gen_speed_scaling # generator speed + turbine_state['gen_eff'] = param['VS_GenEff']/100 # generator efficiency + turbine_state['rot_speed'] = X[h,DFSM.gen_speed_ind]*rpm2RadSec*gen_speed_scaling/param['WE_GearboxRatio'] # rotor speed + turbine_state['Yaw_fromNorth'] = 0 # yaw + turbine_state['Y_MeasErr'] = 0 + + if not(DFSM.FA_Acc_ind_s == None): + turbine_state['FA_Acc'] = X[h,DFSM.FA_Acc_ind_s]/2 # tower-top acceleration if it is modelled as a state + + elif not(DFSM.FA_Acc_ind_o == None): + turbine_state['FA_Acc'] = Y[h,DFSM.FA_Acc_ind_o]/2 # tower top acceleration if it is modelled as an output + + if not(DFSM.NacIMU_FA_Acc_ind_s == None): + turbine_state['NacIMU_FA_Acc'] = X[h,DFSM.NacIMU_FA_Acc_ind_s]*np.deg2rad(1) + + elif not(DFSM.NacIMU_FA_Acc_ind_o == None): + turbine_state['NacIMU_FA_Acc'] = Y[h,DFSM.NacIMU_FA_Acc_ind_o]*np.deg2rad(1) + + # call ROSCO to get control values + gen_torque, bld_pitch, nac_yawrate = param['controller_interface'].call_controller(turbine_state) + + # convert to right units + gen_torque = gen_torque/KWatt2Watt + bld_pitch = np.rad2deg(bld_pitch) + + # store + U[h,DFSM.wind_speed_ind] = WS[h] + U[h,DFSM.gen_torque_ind] = gen_torque + U[h,DFSM.blade_pitch_ind] = bld_pitch + + if not(wave_fun == None): + U[h,DFSM.wave_elev_ind] = WE[h] + + # update the extrapolation array with the control values calculated using ROSCO + ind_extrap += 1 + U_extrap[ind_extrap,:] = U[h,:] + + return T,X,U,Y, T_extrap, U_extrap \ No newline at end of file diff --git a/weis/dfsm/simulation_details.py b/weis/dfsm/simulation_details.py new file mode 100755 index 000000000..ba5a06da7 --- /dev/null +++ b/weis/dfsm/simulation_details.py @@ -0,0 +1,331 @@ +import os +import numpy as np +from pCrunch.io import load_FAST_out +from scipy.interpolate import CubicSpline +from scipy.signal import filtfilt +import time as timer +import pickle + + +class SimulationDetails: + + def __init__(self,OF_output_files,reqd_states,reqd_controls,reqd_outputs,scale_args = {} + ,filter_args = {},add_dx2 = True,tmin = 0,tmax = None,linear_model_file = None,region = None,OF_file_type = 'outb'): + + # initialize + self.OF_output_files = OF_output_files + self.OF_file_type = OF_file_type + self.reqd_states = reqd_states + self.reqd_controls = reqd_controls + self.reqd_outputs = reqd_outputs + self.scale_args = scale_args + self.filter_args = filter_args + self.add_dx2 = add_dx2 + self.tmin = tmin + self.tmax = tmax + self.linear_model_file = linear_model_file + self.region = region + + # get number of simulations + self.n_sim = len(OF_output_files) + + # get number of states,inputs and outputs + self.n_states = len(reqd_states) + self.n_controls = len(reqd_controls) + self.n_outputs = len(reqd_outputs) + + # number of inputs and outputs for the DFSM model + + # if we add the second derivatives + if add_dx2: + self.n_states = self.n_states*2 + + # model inputs + self.n_model_inputs = self.n_states + self.n_controls + self.n_deriv = self.n_states + + def scale_quantities(self,states,controls,outputs): + + # extract scale arguments + scale_args = self.scale_args + + # scale states + if 'state_scaling_factor' in scale_args.keys(): + states = states/scale_args['state_scaling_factor'] + + # scale controls + if 'control_scaling_factor' in scale_args.keys(): + controls = controls/scale_args['control_scaling_factor'] + + # scale outputs + if self.n_outputs > 0: + if 'output_scaling_factor' in scale_args.keys(): + outputs = outputs/scale_args['output_scaling_factor'] + + return states,controls,outputs + + def filter_signal(self,t_f,time,signal): + + ''' + Function to filter the given signal + ''' + + dt = time[1]-time[0] + nb = int(np.floor(t_f/dt)) + b = np.ones((nb,))/nb;a = 1 + signal = filtfilt(b,a,signal,axis = 0) + + return signal + + def notch_filter(self,omega,time,signal): + + nt = len(time) + dt = time[1]-time[0] + BetaDen = 0.25 + BetaNum = 0 + signal_filt = np.zeros(nt) + + K = 2/dt + b2 = (K**2 + 2*omega*BetaNum*K + omega**2)/(K**2+2*omega*BetaDen*K+omega**2) + b1 = (2*omega**2 - 2*K**2)/(K**2 + 2*omega*BetaDen*K + omega**2) + b0 = (K**2 - 2*omega*BetaNum*K + omega**2)/(K**2 + 2*omega*BetaDen*K + omega**2) + a1 = (2*omega**2 - 2*K**2)/(K**2 + 2*omega*BetaDen*K + omega**2) + a0 = (K**2 - 2*omega*BetaDen*K + omega**2)/(K**2 + 2*omega*BetaDen*K + omega**2) + + for i_ in range(nt): + + # first iteration + if i_ == 0: + + OutputSignalLast1 = signal[i_] + OutputSignalLast2 = signal[i_] + + InputSignalLast1 = signal[i_] + InputSignalLast2 = signal[i_] + + signal_filt[i_] = b2*signal[i_] + b1*InputSignalLast1 + b0*InputSignalLast2 - a1*OutputSignalLast1 - a0*OutputSignalLast2 + + # update + InputSignalLast2 = InputSignalLast1 + InputSignalLast1 = signal[i_] + + OutputSignalLast2 = OutputSignalLast1 + OutputSignalLast1 = signal_filt[i_] + + return signal_filt + + def filter_quantities(self,time,states,controls,outputs): + + # extract filter arguments + filter_args = self.filter_args + + if 'state_filter_flag' in filter_args.keys(): + for idx,flag in enumerate(filter_args['state_filter_flag']): + if flag: + + for ifilt,filt_type in enumerate(filter_args['state_filter_type'][idx]): + + if filt_type == 'filtfilt': + t_f = filter_args['state_filter_tf'][idx][ifilt] + states[:,idx] = self.filter_signal(t_f,time,states[:,idx]) + + elif ifilt == 'notch': + + corner_freq = filter_args['state_filter_tf'][idx][ifilt] + states[:,idx] = self.notch_filter(corner_freq, time, states[:,idx]) + + if 'control_filter_flag' in filter_args.keys(): + for idx,flag in enumerate(filter_args['control_filter_flag']): + if flag: + t_f = filter_args['control_filter_tf'][idx] + controls[:,idx] = self.filter_signal(t_f,time,controls[:,idx]) + + if 'output_filter_flag' in filter_args.keys(): + if self.n_outputs > 0: + for idx,flag in enumerate(filter_args['output_filter_flag']): + if flag: + t_f = filter_args['output_filter_tf'][idx] + outputs[:,idx] = self.filter_signal(t_f,time,outputs[:,idx]) + + return states,controls,outputs + + + + def load_openfast_sim(self): + + FAST_sim = [] + + # loop through and extract openfast file + for sim_idx,file_name in enumerate(self.OF_output_files): + + # load output file + if self.OF_file_type == 'outb': + FAST_out = load_FAST_out(file_name)[0] + + elif self.OF_file_type == 'pkl': + with open(file_name,'rb') as handle: + FAST_out = pickle.load(handle) + + # extract time + time = FAST_out['Time'] + time = time - np.min(time) + + tmin = self.tmin + tmax = self.tmax + + t_ind = time>=tmin + + time = time[t_ind] + + + # number of points + nt = len(time) + + # extract states + states = np.zeros((nt,len(self.reqd_states))) + + for ix,state_name in enumerate(self.reqd_states): + states[:,ix] = FAST_out[state_name][t_ind] + + # extract controls + controls = np.zeros((nt,self.n_controls)) + + for iu,control_name in enumerate(self.reqd_controls): + controls[:,iu] = FAST_out[control_name][t_ind] + + # extract outputs + if self.n_outputs > 0: + + outputs = np.zeros((nt,self.n_outputs)) + + for iy,output_name in enumerate(self.reqd_outputs): + outputs[:,iy] = FAST_out[output_name][t_ind] + + else: + + outputs = [] + + # scale the inputs and outputs according to the options present in scale_args + if len(self.scale_args) > 0: + states,controls,outputs = self.scale_quantities(states,controls,outputs) + + if len(self.filter_args) > 0: + states,controls,outputs = self.filter_quantities(time,states,controls,outputs) + + # construct polynomial approximation + states_pp = CubicSpline(time,states) + dx_pp = states_pp.derivative + + # evaluate first time derivative + dx_pp1 = dx_pp(nu = 1) + + # evaluate second time derivative + dx_pp2 = dx_pp(nu = 2) + + # evaluate state derivatives + state_derivatives = dx_pp1(time) + + # evaluate the second time derivatives + state_derivatives2 = dx_pp2(time) + + if self.add_dx2: + + states = np.hstack([states,state_derivatives]) + state_derivatives = np.hstack([state_derivatives,state_derivatives2]) + + dx1_names = ['d' + s_name for s_name in self.reqd_states] + dx2_names = ['d' + dx for dx in dx1_names] + dx_names = dx1_names + dx2_names + + else: + + dx1_names = [] + dx_names = ['d' + s_name for s_name in self.reqd_states] + + #self.reqd_states = self.reqd_states + dx_names + + # find index of genspeed + try: + self.gen_speed_ind = self.reqd_states.index('GenSpeed') + + except ValueError: + self.gen_speed_ind = None + + # find index of FA_Acc + try: + self.FA_Acc_ind_s = self.reqd_states.index('YawBrTAxp') + + except ValueError: + self.FA_Acc_ind_s = None + + # find index of genspeed + try: + self.NacIMU_FA_Acc_ind_s = self.reqd_states.index('NcIMURAys') + + except ValueError: + self.NacIMU_FA_Acc_ind_s = None + + # find index of FA_Acc + try: + self.FA_Acc_ind_o = self.reqd_outputs.index('YawBrTAxp') + + except ValueError: + self.FA_Acc_ind_o = None + + # find index of genspeed + try: + self.NacIMU_FA_Acc_ind_o = self.reqd_outputs.index('NcIMURAys') + + except ValueError: + self.NacIMU_FA_Acc_ind_o = None + + # find the index of wind/current speed + try: + self.wind_speed_ind = self.reqd_controls.index('RtVAvgxh') + + except ValueError: + self.wind_speed_ind = None + + # find gen torque + try: + self.gen_torque_ind = self.reqd_controls.index('GenTq') + + except ValueError: + self.gen_torque_ind = None + + # find blade pitch index + try: + self.blade_pitch_ind = self.reqd_controls.index('BldPitch1') + + except ValueError: + self.blade_pitch_ind = None + + # find wave elev index + try: + self.wave_elev_ind = self.reqd_controls.index('Wave1Elev') + + except ValueError: + self.wave_elev_ind = None + + # initialize storage dict + sim_detail = {'sim_idx': sim_idx, + 'n_states': self.n_states, + 'states': states, + 'state_names': self.reqd_states + dx1_names, + 'n_controls': self.n_controls, + 'controls': controls, + 'control_names': self.reqd_controls, + 'n_model_inputs': self.n_model_inputs, + 'n_outputs': self.n_outputs, + 'outputs': outputs, + 'output_names': self.reqd_outputs, + 'n_deriv': self.n_states, + 'state_derivatives': state_derivatives, + 'dx_names':dx_names, + 'nt': len(time), + 'time': time + } + + FAST_sim.append(sim_detail) + + self.FAST_sim = FAST_sim diff --git a/weis/dfsm/test_dfsm.py b/weis/dfsm/test_dfsm.py new file mode 100755 index 000000000..2f4079757 --- /dev/null +++ b/weis/dfsm/test_dfsm.py @@ -0,0 +1,130 @@ +import numpy as np +from scipy.integrate import solve_ivp +from scipy.interpolate import CubicSpline,interp1d +from weis.dfsm.evaluate_dfsm import evaluate_dfsm +import time as timer + +def odefun(t,x,u_fun,DFSM): + + u = u_fun(t) + + # combine + inputs = np.hstack([u,x]) + + # evaluate dfsm + dx = evaluate_dfsm(DFSM,inputs,'deriv') + + return dx + + + +def test_dfsm(DFSM,test_cases,test_ind,simulation_flag = True,plot_flag = True, solver_options = None): + + n_cases = len(test_ind) + + U_list = [] + X_list = [] + dx_list = [] + Y_list = [] + simulation_time = np.zeros(n_cases) + + + + # loop through and evaluate test cases using the dfsm model + for idx,ind in enumerate(test_ind): + + # extract test case + case = test_cases[ind] + + # extract data + time = case['time'] + controls = case['controls'] + states = case['states'] + state_derivatives = case['state_derivatives'] + outputs = case ['outputs'] + n_outputs = case['n_outputs'] + + inputs = np.hstack([controls,states]) + + t0 = time[0];tf = time[-1] + tspan = [t0,tf] + + x0 = states[0,:] + + + + # create interpolating function for controls + u_pp = CubicSpline(time,controls) + u_fun = lambda t: u_pp(t) + + # solver method and options + if solver_options == None: + solver_options = {'method':'RK45','rtol':1e-9,'atol':1e-9} + + + if simulation_flag: + + t1 = timer.time() + sol = solve_ivp(odefun,tspan,x0,method=solver_options['method'],args = (u_fun,DFSM),rtol = solver_options['rtol'],atol = solver_options['atol']) + t2 = timer.time() + + # extract solution + + T = sol['t'] + states_dfsm = sol['y'] + states_dfsm = states_dfsm.T + + states = interp1d(time,states,axis = 0)(T) + controls = u_fun(T) + state_derivatives = interp1d(time,state_derivatives,axis = 0)(T) + + if n_outputs > 0: + outputs = interp1d(time,outputs,axis = 0)(T) + + inputs_dfsm = np.hstack([controls,states_dfsm]) + inputs = np.hstack([controls,states]) + time = T + + simulation_time[idx] = t2-t1 + + X_dict = {'time':time,'names':case['state_names'],'n':case['n_states'],'OpenFAST':states,'DFSM':states_dfsm} + U_dict = {'time': time, 'names': case['control_names'],'n': case['n_controls'],'OpenFAST':controls,'DFSM':controls} + + X_list.append(X_dict) + U_list.append(U_dict) + else: + + simulation_time = 0 + + # evaluate state derivatives predicted by the DFSM + fun_type = 'deriv' + dx_dfsm = evaluate_dfsm(DFSM,inputs,fun_type) + + dx_dict = {'time':time,'names':case['dx_names'],'n':case['n_deriv'],'OpenFAST':state_derivatives,'DFSM':dx_dfsm} + + dx_list.append(dx_dict) + + if n_outputs > 0 and simulation_flag: + + fun_type = 'outputs' + outputs_dfsm = evaluate_dfsm(DFSM,inputs_dfsm,fun_type) + + Y_dict = {'time':time,'names':case['output_names'],'n':case['n_outputs'],'OpenFAST':outputs,'DFSM':outputs_dfsm} + + Y_list.append(Y_dict) + + DFSM.simulation_time = np.mean(simulation_time) + + return DFSM,U_list,X_list,dx_list,Y_list + + + + + + + + + + + + diff --git a/weis/dfsm/wrapper_LTI.py b/weis/dfsm/wrapper_LTI.py new file mode 100755 index 000000000..bdb90811a --- /dev/null +++ b/weis/dfsm/wrapper_LTI.py @@ -0,0 +1,77 @@ +import numpy as np + +class wrapper_LTI(): + + def __init__(self,inputs = None,outputs = None,nstates = None,ncontrols = None): + self.inputs = inputs + self.outputs = outputs + + self.nstates = nstates + self.ncontrols = ncontrols + + + + def linear_model(self,x): + + nstates = self.nstates + ncontrols = self.ncontrols + + # reshape the parameters + x = np.reshape(x,[int(nstates/2),nstates+ncontrols],order = 'F') + + # extract elements corresponding to A and B matrices + B_par = x[:,:ncontrols] + A_par = x[:,ncontrols:ncontrols+nstates] + + # construct A and B matrices + A = np.hstack([np.zeros((int(nstates/2),int(nstates/2))),np.eye(int(nstates/2))]) + A = np.vstack([A,A_par]) + + B = np.vstack([np.zeros((int(nstates/2),ncontrols)),B_par]) + + + return A,B + + def objective_function(self,xdict): + + # extract inputs + inputs = self.inputs + outputs = self.outputs + + # extract parameters + x = xdict['xvars'] + + # reshape + A,B = self.linear_model(x) + + Aeig = np.linalg.eig(A) + Aeig = Aeig[0] + + LM = np.hstack([B,A]).T + + # prediction + dx_predicted = np.dot(inputs,LM) + + # evaluate error + error = outputs - dx_predicted + + # number of samples + N = len(error) + + # calculate loss + V = 1/N*(np.trace(np.dot(error.T,error))) + + # initialize + funcs = {} + + # objective + funcs['obj'] = V + #print(Aeig.real) + + # constraints + funcs['con'] = Aeig.real + + fail = False + + return funcs,fail + diff --git a/weis/glue_code/gc_LoadInputs.py b/weis/glue_code/gc_LoadInputs.py index 200c599df..178bee276 100644 --- a/weis/glue_code/gc_LoadInputs.py +++ b/weis/glue_code/gc_LoadInputs.py @@ -73,7 +73,7 @@ def set_weis_data(self): # Openfast - if self.modeling_options['Level2']['flag'] or self.modeling_options['Level3']['flag']: + if self.modeling_options['Level2']['flag'] or self.modeling_options['DFSM']['flag'] or self.modeling_options['Level3']['flag']: fast = InputReader_OpenFAST() self.modeling_options['General']['openfast_configuration']['fst_vt'] = {} self.modeling_options['General']['openfast_configuration']['fst_vt']['outlist'] = fast.fst_vt['outlist'] @@ -166,6 +166,7 @@ def set_weis_data(self): # ROSCO self.modeling_options['ROSCO']['flag'] = (self.modeling_options['Level1']['flag'] or self.modeling_options['Level2']['flag'] or + self.modeling_options['DFSM']['flag'] or self.modeling_options['Level3']['flag']) if self.modeling_options['ROSCO']['tuning_yaml'] != 'none': # default is empty @@ -191,6 +192,7 @@ def set_weis_data(self): 'ws_cut_out':cut_out, 'MHK': self.wt_init['assembly']['marine_hydro'], }) + # Generate cases from user inputs for i_DLC in range(len(DLCs)): DLCopt = DLCs[i_DLC] diff --git a/weis/glue_code/glue_code.py b/weis/glue_code/glue_code.py index 870aa6087..e38cbf2b1 100644 --- a/weis/glue_code/glue_code.py +++ b/weis/glue_code/glue_code.py @@ -355,7 +355,7 @@ def setup(self): self.connect('TMDs.stiffness', 'aeroelastic.TMD_stiffness') self.connect('TMDs.damping', 'aeroelastic.TMD_damping') - if modeling_options['Level3']['flag'] or modeling_options['Level2']['flag']: + if modeling_options['Level3']['flag'] or modeling_options['DFSM']['flag'] or modeling_options['Level2']['flag']: self.add_subsystem('aeroelastic', FASTLoadCases(modeling_options = modeling_options, opt_options = opt_options)) self.add_subsystem('stall_check_of', NoStallConstraint(modeling_options = modeling_options)) diff --git a/weis/inputs/modeling_schema.yaml b/weis/inputs/modeling_schema.yaml index eeb5aea46..0fc44fe53 100644 --- a/weis/inputs/modeling_schema.yaml +++ b/weis/inputs/modeling_schema.yaml @@ -60,10 +60,6 @@ properties: type: string default: none description: Path to FAST dynamic library to override default WEIS value (e.g. /home/user/OpenFAST/lib/libopenfast.so) - turbsim_exe: - type: string - default: none - description: Path to turbsim executable to override default WEIS value (e.g. /home/user/OpenFAST/bin/turbsim) path2dll: type: string default: none @@ -162,14 +158,6 @@ properties: type: boolean default: True description: Flag to run pyHAMS - analyze_cases: - type: boolean - default: True - description: Run cases in RAFT, outputs will be in stats_, along with a few aggregate statistics - use_props_in_openfast: - type: boolean - default: False - description: Run cases in RAFT, outputs will be in stats_, along with a few aggregate statistics Level3: &ofmodopt type: object default: {} @@ -2038,10 +2026,10 @@ properties: unit: s description: Analysis time for wave radiation kernel calculations (sec) [only used when PotMod=1; determines RdtnDOmega=Pi/RdtnTMax in the cosine transform; MAKE SURE THIS IS LONG ENOUGH FOR THE RADIATION IMPULSE RESPONSE FUNCTIONS TO DECAY TO NEAR-ZERO FOR THE GIVEN PLATFORM!] RdtnDT: - type: [number,string] + type: number minimum: 0.0 maximum: 1e3 - default: DEFAULT + default: 0.0125 unit: s description: Time step for wave radiation kernel calculations, use 0.0 for default (sec) [only used when PotMod=1; DT<=RdtnDT<=0.1 recommended; determines RdtnOmegaMax=Pi/RdtnDT in the cosine transform] MnDrift: @@ -2373,17 +2361,6 @@ properties: minimum: 0.0 maximum: 1.0 description: Threshold for IC convergence (-) - NumSegs: - type: [number, array] - unit: none - items: - type: number - minimum: 10 - maximum: 100 - default: 20 - minimum: 10 - maximum: 100 - description: Number of segments to use in mooring line modeling. Single number or array with the same length as the number of lines. ServoDyn: &ofservodyn type: object default: {} @@ -3043,6 +3020,320 @@ properties: #MoorDyn: *ofmoordyn #ServoDyn: *ofservodyn #outlist: *ofoutlist + DFSM: + type: object + default: {} + description: Scehma that describes the modeling options used for the DFSM model + properties: + flag: + type: boolean + default: False + description: Flag to enable DFSM model for simulation/optimal control + general_options: + type: object + default: {} + description: general options need for DFSM + properties: + modeling_data_availability: + type: string + default: offline + description: Option to use pre run data/model for constructing DFSM, or to run OpenFAST and construct DFSM. + enum: [online,offline] + testing_data_availability: + type: string + default: offline + description: Specifies the location/type of data for running the different usecase/testing the DFSM. + enum: [online,offline] + storage_type: + type: string + default: outb + description: Denotes how the data used to construct DFSM is stored. Pickle implies the DFSM model is stored in a pickle fine. outb denotes that the data is available in a pre-run simulation, and the DFSM is constructed from that + enum: [outb,pickle] + save_results: + type: boolean + default: False + description: Flag to save the results from DFSM + modeling_data_path: + type: string + description: Name of the folder that contains the .outb/pickle files used to construct the DFSM model. If testing data availability is online, then this corresponds to the openfast run dir + testing_data_path: + type: string + description: Path to usecase/testing files. If testing data availability is online, then this corresponds to the openfast run dir + usecase_options: + type: object + default: {} + description: Use case options for the DFSM model + properties: + usecase: + type: string + default: test + enum: ['test','simulation','open-loop-optimal-control'] + description: Use case for the DFSM model + test_options: + type: object + default: {} + description: List of options for testing DFSM model + properties: + test_ind: + type: array + default: [0] + description: The index of the test simulation + simulation_flag: + type: boolean + default: True + description: Flag to enable simulation + plot_flag: + type: boolean + default: False + description: Flag to plot DFSM simulation against OpenFAST + param: + type: object + default: {} + description: Parameters to be provided to the controller interface + properties: + VS_GenEff: + type: number + description: generator efficiency + WE_GearboxRatio: + type: number + description: gearbox ratio + VS_RtPwr: + type: number + description: rated power + DT: + type: number + description: step size used in simulations + num_blade: + type: number + description: number of blades in the turbine + DLL_FileName: + type: string + description: name of the dynamic library + solver_options: + url: https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html + type: object + default: {} + description: Options used for the ode solver used to simulate the DFSM + properties: + method: + type: string + description: The algorithm used in the ode solver + default: RK45 + enum: [RK45,RK23,DOP853,Radau,BDF,LSODA] + rtol: + type: number + description: The relative tolerence used for the solver + default: 1e-6 + atol: + type: number + description: The absolute tolerence used for the solver + default: 1e-6 + model_options: + type: object + default: {} + properties: + run_dir: + type: string + default: none + description: Path to place FAST output files (e.g. /home/user/myturbines/output) + reqd_states: + type: array + description: List of the states to be used in the DFSM model. The names of the quantities must be the same as OpenFAST names + default: ['GenSpeed'] + items: + type: string + uniqueItems: True + reqd_controls: + type: array + description: List of the controls to be used in the DFSM model. The names of the quantities must be the same as OpenFAST names + default: ['RtVAvgxh'] + items: + type: string + uniqueItems: True + reqd_outputs: + type: array + description: List of the controls to be used in the DFSM model. The names of the quantities must be the same as OpenFAST names + default: ['GenPwr'] + items: + type: string + uniqueItems: True + state_props: &sigprops + type: object + default: {} + properties: + units: + type: array + description: units for the state quantities (will be automated in the future) + default: ['rpm'] + items: + type: string + key_freq_name: + type: array + description: name of the key frequencis to be plotted in PSD + default: [['2P']] + items: + type: array + key_freq_val: + type: array + description: name of the key frequencis to be plotted in PSD + default: [[0.39]] + items: + type: array + output_props: *sigprops + tmin: + type: number + description: minimum time + default: 0 + tmax: + type: number + description: maximum time + default: 10000 + add_dx2: + type: boolean + default: True + description: Flag to include the second derivatives of the states + linear_model_file: + type: string + default: none + description: Name of the matfile that has the linear model + region: + type: string + default: none + scale_args: + type: object + default: {} + description: Arguments to scale the state, control and output quantities + properties: + state_scaling_factor: + type: array + default: [1] + # control_scaling_factor: + # type: array + # default: [1] + # output_scaling_factor: + # type: array + # default: [1] + filter_args: + type: object + default: {} + description: Arguments to filter the state, control and output quantities + properties: + state_filter_flag: + type: array + default: [False] + state_filter_type: + type: array + default: [filtfilt] + state_filter_tf: + type: array + default: [0.1] + construction_options: + type: object + default: {} + properties: + L_type: + type: string + description: Type of the linear model to be used in the multifidelity DFSM model + default: LTI + enum: [None,LTI,LPV] + LPV_options: + type: object + default: {} + description: Meta options to setup the LPV model + properties: + v_min: + type: number + description: The lower limit of the wind/current speed for the LPV range + default: 1.85 + v_max: + type: number + description: The upper limit of the wind/current speed for the LPV range + default: 2.15 + nv: + type: integer + description: Number of wind/current speeds between v_min and v_max for which the linear models must be constructed + default: 50 + n_samples: + type: number + default: 50 + description: number of samples used to construct the corrective function + sampling_method: + type: string + default: KM + description: sampling method used to extract samples + train_split: + type: number + default: 0.8 + description: fraction of the samples used for constructing surrogate models + N_type: + type: string + description: Type of nonlinear model to be used in the multifidelity DFSM model + default: GPR + enum: [None,GPR,NN] + GPR_options: + url: https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gpr_noisy_targets.html + type: object + default: {} + description: Options used to construct the GPR based nonlinear function + properties: + kernel: + type: string + description: The kernel used for the GPR model + default: RBF + enum: [RBF,matern,quad,exp-sine,dot] + length_scale: + type: number + default: 1 + description: Length scale for the kernel + lscale_bounds: + type: array + default: [1e-5,1e5] + description: bounds on the length scale + items: + type: number + n_restarts_optimizer: + type: integer + description: Number of times the hyperparameter-optimizer is started for GPR + default: 5 + maximum: 100 + minimum: 1 + random_state: + type: integer + description: Random state to be set for constructing the GPR model + default: 34534 + maximum: 1000000 + minimum: 0 + NN_options: + url: https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html + type: object + default: {} + description: Options used to construct the NN based nonlinear function + properties: + hidden_layer_size: + type: array + description: size/shape of the hidden layer used in the NN network + default: [50,10] + items: + type: integer + max_iter: + type: integer + description: maximum iterations of the solver used to fit the NN + default: 300 + activation: + type: string + description: The type of activation function used in the NN model + default: tanh + enum: [identity, logistic, tanh, relu] + solver: + type: string + description: The type of solver used in the finding th hyper parameters for the NN model + default: adam + enum: [lbfgs, sgd, adam] + tol: + type: number + description: Tolerence for the solver + default: 1e-5 + DLC_driver: type: object default: {} @@ -3138,10 +3429,6 @@ properties: description: Status of the turbine, it can be either operating, parked-idling, or parked-still. Each DLC come with its default turbine status specified by the standards. default: operating enum: ['operating','parked-idling','parked-still'] - constrained_wave: - type: boolean - description: Use ConstWaveMod in this DLC - default: false wave_period: type: array description: Period between waves. If this array is populated by the user, then the field metocean_conditions is neglected. If wave_period is not defined, metocean_conditions will be used, either in the values provided by the user or with its default values (the first option is highly recommended). @@ -3162,30 +3449,10 @@ properties: minItems: 1 minimum: 0.0 maximum: 100.0 - current_speed: - type: array - description: Water current. If this array is populated by the user, then the field metocean_conditions is neglected. If wave_height is not defined, metocean_conditions will be used, either in the values provided by the user or with its default values (the first option is highly recommended). - default: [] - items: - type: number - unit: m/s - minItems: 1 - minimum: 0.0 - maximum: 100.0 - current_std: - type: array - description: Standard deviation of water current speed. Versus current_speed for MHK. If this array is populated by the user, then the field metocean_conditions is neglected. If wave_height is not defined, metocean_conditions will be used, either in the values provided by the user or with its default values (the first option is highly recommended). - default: [] - items: - type: number - unit: m/s - minItems: 1 - minimum: 0.0 - maximum: 100.0 wave_heading: type: array description: Heading of the waves with respect to north. This array must currently have either length=1, i.e. one constant value, or the same length of the array wind_speed - default: [0] + default: [0.] items: type: number unit: deg @@ -3239,7 +3506,7 @@ properties: wind_file: type: string description: File path of custom wind file - turbsim_inputs: + turbulent_wind: type: object default: {} description: These are all inputs to TurbSim. These inputs usually do not need to be set unless you are trying to customize a DLC @@ -3532,27 +3799,6 @@ properties: minimum: 0.0 maximum: 50.0 uniqueItems: true - current_speed: - type: array - description: Array of current speeds to tabulate Hs and Tp for MHK turbines - default: [0.5 , 0.85, 1.2 , 1.55, 1.9 , 2.25, 2.6 , 2.95, 3.3 , 3.65, 4. ] - items: - type: number - unit: m/s - minItems: 1 - minimum: 0.0 - maximum: 50.0 - uniqueItems: true - current_std: - type: array - description: Default standard deviation of water current speed versus current_speed for MHK. - default: [] - items: - type: number - unit: m/s - minItems: 1 - minimum: 0.0 - maximum: 100.0 wave_height_NSS: type: array description: Array of Hs for NSS conditional to wind speed @@ -3575,39 +3821,6 @@ properties: minimum: 0.0 maximum: 1000.0 uniqueItems: false - current_NSS: - type: array - description: Array of currents for NSS conditional to wind speed - default: [0.10, 0.12, 0.14, 0.16, 0.18, 0.20, 0.22, 0.24, 0.26, 0.28, 0.30] - items: - type: number - unit: m/s - minItems: 1 - minimum: 0.0 - maximum: 100.0 - uniqueItems: false - current_fatigue: - type: array - description: Array of currents for fatigue conditional to wind speed - default: [0.10, 0.12, 0.14, 0.16, 0.18, 0.20, 0.22, 0.24, 0.26, 0.28, 0.30] - items: - type: number - unit: m/s - minItems: 1 - minimum: 0.0 - maximum: 100.0 - uniqueItems: false - current_SSS: - type: array - description: Array of currnents for SSS conditional to wind speed - default: [0.20, 0.24, 0.28, 0.32, 0.36, 0.40, 0.44, 0.48, 0.52, 0.56, 0.60] - items: - type: number - unit: m/s - minItems: 1 - minimum: 0.0 - maximum: 100.0 - uniqueItems: false wave_height_fatigue: type: array description: Array of Hs for fatigue computations conditional to wind speed @@ -3659,20 +3872,6 @@ properties: unit: m minimum: 0.0 maximum: 100.0 - current_1: - type: number - description: Current with 1-year occurrence, used in DLC 6.3 - default: 0.75 - unit: m/s - minimum: 0.0 - maximum: 100.0 - current_50: - type: number - description: Current with 50-year occurrence, used in DLC 6.1 - default: 1.3 - unit: m/s - minimum: 0.0 - maximum: 100.0 wave_period50: type: number description: Wave period with 50-year occurrence, used in DLC 6.1 @@ -3694,21 +3893,6 @@ properties: unit: s minimum: 0.0 maximum: 1000.0 - user_distribution: - type: object - description: User probability mass distribution - default: {} - properties: - speed: - type: array - description: Flow speeds (m/s) - items: - type: number - probability: - type: array - description: Probability mass distirbution - items: - type: number ROSCO: type: object