diff --git a/designs/FOCTT_example.yaml b/designs/FOCTT_example.yaml index 778950b..07e6762 100644 --- a/designs/FOCTT_example.yaml +++ b/designs/FOCTT_example.yaml @@ -41,7 +41,7 @@ turbine: Rhub : 1.25 # hub radius [m] precone : 4.0 # [deg] shaft_tilt : 6.0 # [deg] - overhang : 2 # [m] + overhang : -2 # [m] aeroServoMod : 2 # 0 aerodynamics off; 1 aerodynamics on (no control); 2 aerodynamics and control on diff --git a/designs/OC3spar.yaml b/designs/OC3spar.yaml index 23a6134..a33dab3 100644 --- a/designs/OC3spar.yaml +++ b/designs/OC3spar.yaml @@ -39,7 +39,7 @@ turbine: Rhub : 1.5 # hub radius [m] precone : 2.5 # [rad] shaft_tilt : 5.0 # [rad] - overhang : 5.0 # [m] + overhang : -5.0 # [m] aeroServoMod : 1 # 0 aerodynamics off; 1 aerodynamics on (no control); 2 aerodynamics and control on env: diff --git a/designs/OC4semi.yaml b/designs/OC4semi.yaml index d0c9880..c306860 100644 --- a/designs/OC4semi.yaml +++ b/designs/OC4semi.yaml @@ -37,7 +37,7 @@ turbine: Rhub : 1.5 # hub radius [m] precone : 2.5 # [rad] shaft_tilt : 5.0 # [rad] - overhang : 5.0 # [m] + overhang : -5.0 # [m] aeroServoMod : 1 # 0 aerodynamics off; 1 aerodynamics on (no control); 2 aerodynamics and control on env: diff --git a/designs/RM1_Floating.yaml b/designs/RM1_Floating.yaml index 584f0aa..980216f 100644 --- a/designs/RM1_Floating.yaml +++ b/designs/RM1_Floating.yaml @@ -22,31 +22,32 @@ cases: keys : [wind_speed, wind_heading, turbulence, turbine_status, turbine_heading, wave_spectrum, wave_period, wave_height, wave_heading, current_speed, current_heading, current_turbulence ] data : # m/s deg % or e.g. IIB_NTM string deg string (s) (m) (deg) (m/s) (deg) % or e.g. IIB_NTM - - [ 0.0, 0, 0, parked, 0, JONSWAP, 8.0, 2.0, 0, 1.9, 0, 0 ] - + #- [ 0.0, 0, 0, parked, 0, none, 8.0, 2.0, 0, 0.0, 0, 0 ] + - [ 0.0, 0, 0, operating, 0, none, 8.0, 2.0, 0, 1.9, 0, 0 ] + turbine: nrotors : 1 # [-] number of turbines in the FOWT rotorCoords : [[0, 0]] # [m, m] x-y coordinates of rotor in space - speed_gain : 1.1 # [-] multiplier on inflow velocity due to flow confinement + speed_gain : 1.0 # [-] multiplier on inflow velocity due to flow confinement - mRNA : 52755.716 # [kg] RNA mass - IxRNA : 232552.25 # [kg-m2] RNA moment of inertia about local x axis (assumed to be identical to rotor axis for now, as approx) [kg-m^2] + mRNA : 90664.718 # [kg] RNA mass + IxRNA : 1222590.25 # [kg-m2] RNA moment of inertia about local x axis (assumed to be identical to rotor axis for now, as approx) [kg-m^2] IrRNA : 244643.0 # [kg-m2] RNA moment of inertia about local y or z axes [kg-m^2] - xCG_RNA : 0.412 # [m] x location of RNA center of mass [m from centerline, positive downwind] + xCG_RNA : -2.5478 # [m] x location of RNA center of mass [m from centerline, positive downwind] hHub : -25.2 # [m] hub height above water line [m], Maybe try to put it underwater??? Fthrust : 0.0 # [N] temporary thrust force to use - I_drivetrain: 0.0 # full rotor + drivetrain inertia as felt on the high-speed shaft + I_drivetrain: 0.0 # full rotor + drivetrain inertia as felt on the high-speed shaft | only used for aeroServoMod==2 and B_gyro nBlades : 2 # [-] number of blades Zhub : -25.2 # [m] hub height [m] Rhub : 1.0 # [m] hub radius [m] precone : 0.0 # [deg] shaft_tilt : 0.0 # [deg] - overhang : 4.91 # [m] - aeroMod : 0 # [-] 0 aerodynamics off; 1 aerodynamics on + overhang : -4.91 # [m] + aeroServoMod : 1 # [-] 0 aerodynamics off; 1 aerodynamics on blade: @@ -679,24 +680,42 @@ turbine: VS_KP: -38609162.66552 VS_KI: -4588245.18720 + + + nacelle: + dlsMax : 2.0 # maximum node splitting section amount; can't be 0 + name : nacelle # [-] an identifier (no longer has to be number) + type : 1 # [-] type (used for platform members vs. other members) + rA : [4.5478, 0, -25.2] # [m] end A coordinates + rB : [-3.6878, 0, -25.2] # [m] end B coordinates + shape : rect # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + stations : [ 0, 1 ] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : [1.9529036540547544, 2.4] # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.06791876744511316 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 0.0 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 0.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 8500 # [kg/m^3] material density + tower: - dlsMax : 2.0 # maximum node splitting section amount; can't be 0 - - name : tower # [-] an identifier (no longer has to be number) - type : 1 # [-] - rA : [ 0, 0, -24.0] # [m] end A coordinates - rB : [ 0, 0, -9.0] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - stations : [ 0, 1 ] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 0.3253 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.16265 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 0.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 0.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] material density + dlsMax : 2.0 # maximum node splitting section amount; can't be 0 + name : tower # [-] an identifier (no longer has to be number) + type : 1 # [-] type (used for platform members vs. other members) + rA : [ 0, 0, -24.0] # [m] end A coordinates + rB : [ 0, 0, -9.0] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + stations : [ 0, 1 ] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 0.3253 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.16265 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 0.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 0.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 8500 # [kg/m^3] material density platform: @@ -704,401 +723,416 @@ platform: potModMaster : 1 # [int] master switch for potMod variables; 0=keeps all member potMod vars the same, 1=turns all potMod vars to False (no HAMS), 2=turns all potMod vars to True (no strip) dlsMax : 2.0 # maximum node splitting section amount for platform members; can't be 0 potFirstOrder: 0 - hydroPath : 'designs/MHK_RM1_Floating_updated' + hydroPath : 'designs/MHK_RM1_Floating' members: # list all members here - - name : column-E # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 28.0, 0.0, -10.0] # [m] end A coordinates - rB : [ 28.0, 0.0, 6.0] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 8.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] - l_fill : 0.4473325 - rho_fill : 1025 + - name : column-E # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 28.0, 0.0, -10.0] # [m] end A coordinates + rB : [ 28.0, 0.0, 6.0] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 8.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell + l_fill : 0.4473325 # [- or m] the height of ballast material in the member (scaled relative to station values) + rho_fill : 1025 # [kg/m^3] the material density of ballast + cap_stations: [1] # [- or m] the location of the cap relative to station values + cap_t : [0.02] # [m] the thickness of the cap at the cap station + cap_d_in : [0] # [m] the diameter of the "cut-out" circle (0 means it's continuous) - - name : column-W # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ -28.0, 0.0, -10.0] # [m] end A coordinates - rB : [ -28.0, 0.0, 6.0] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 8.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] - l_fill : 0.4473325 - rho_fill : 1025 - - - name : column-S # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 0.0, -12.0, -10.0] # [m] end A coordinates - rB : [ 0.0, -12.0, 6.0] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 8.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] - l_fill : 0.4473325 - rho_fill : 1025 + - name : column-W # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ -28.0, 0.0, -10.0] # [m] end A coordinates + rB : [ -28.0, 0.0, 6.0] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 8.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell + l_fill : 0.4473325 # [- or m] the height of ballast material in the member (scaled relative to station values) + rho_fill : 1025 # [kg/m^3] the material density of ballast + cap_stations: [1] # [- or m] the location of the cap relative to station values + cap_t : [0.02] # [m] the thickness of the cap at the cap station + cap_d_in : [0] # [m] the diameter of the "cut-out" circle (0 means it's continuous) - - name : column-N # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 0.0, 12.0, -10.0] # [m] end A coordinates - rB : [ 0.0, 12.0, 6.0] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 8.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] - l_fill : 0.4473325 - rho_fill : 1025 + - name : column-S # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 0.0, -12.0, -10.0] # [m] end A coordinates + rB : [ 0.0, -12.0, 6.0] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 8.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell + l_fill : 0.4473325 # [- or m] the height of ballast material in the member (scaled relative to station values) + rho_fill : 1025 # [kg/m^3] the material density of ballast + cap_stations: [1] # [- or m] the location of the cap relative to station values + cap_t : [0.02] # [m] the thickness of the cap at the cap station + cap_d_in : [0] # [m] the diameter of the "cut-out" circle (0 means it's continuous) + + - name : column-N # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 0.0, 12.0, -10.0] # [m] end A coordinates + rB : [ 0.0, 12.0, 6.0] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 8.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell + l_fill : 0.4473325 # [- or m] the height of ballast material in the member (scaled relative to station values) + rho_fill : 1025 # [kg/m^3] the material density of ballast + cap_stations: [1] # [- or m] the location of the cap relative to station values + cap_t : [0.02] # [m] the thickness of the cap at the cap station + cap_d_in : [0] # [m] the diameter of the "cut-out" circle (0 means it's continuous) + + + - - name : upper_brace-NE # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 3.67658, 10.4243, 4.5] # [m] end A coordinates - rB : [ 24.3234, 1.57568, 4.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : upper_brace-NE # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 3.67658, 10.4243, 4.5] # [m] end A coordinates + rB : [ 24.3234, 1.57568, 4.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell - - name : upper_brace-SE # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 3.67658, -10.4243, 4.5] # [m] end A coordinates - rB : [ 24.3234, -1.57568, 4.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : upper_brace-SE # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 3.67658, -10.4243, 4.5] # [m] end A coordinates + rB : [ 24.3234, -1.57568, 4.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell - - name : upper_brace-SW # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ -3.67658, -10.4243, 4.5] # [m] end A coordinates - rB : [ -24.3234, -1.57568, 4.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : upper_brace-SW # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [-3.67658, -10.4243, 4.5] # [m] end A coordinates + rB : [-24.3234, -1.57568, 4.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell - - name : upper_brace-NW # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ -3.67658, 10.4243, 4.5] # [m] end A coordinates - rB : [ -24.3234, 1.57568, 4.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : upper_brace-NW # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [-3.67658, 10.4243, 4.5] # [m] end A coordinates + rB : [-24.3234, 1.57568, 4.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell + + + - - name : lower_brace-NE # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 3.67658, 10.4243, -8.5] # [m] end A coordinates - rB : [ 24.3234, 1.57568, -8.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.081 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : lower_brace-NE # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 3.67658, 10.4243, -8.5] # [m] end A coordinates + rB : [ 24.3234, 1.57568, -8.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.081 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell - - name : lower_brace-SE # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 3.67658, -10.4243, -8.5] # [m] end A coordinates - rB : [ 24.3234, -1.57568, -8.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.081 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : lower_brace-SE # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 3.67658,-10.4243, -8.5] # [m] end A coordinates + rB : [ 24.3234,-1.57568, -8.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.081 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell - - name : lower_brace-SW # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ -3.67658, -10.4243, -8.5] # [m] end A coordinates - rB : [ -24.3234, -1.57568, -8.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.081 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : lower_brace-SW # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [-3.67658,-10.4243, -8.5] # [m] end A coordinates + rB : [-24.3234,-1.57568, -8.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.081 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell - - name : lower_brace-NW # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ -3.67658, 10.4243, -8.5] # [m] end A coordinates - rB : [ -24.3234, 1.57568, -8.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.081 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : lower_brace-NW # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [-3.67658, 10.4243, -8.5] # [m] end A coordinates + rB : [-24.3234, 1.57568, -8.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.081 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell - - name : upper_tower_brace # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 0.0, -8.0, 4.5] # [m] end A coordinates - rB : [ 0.0, 8.0, 4.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] - - - name : lower_tower_brace # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 0.0, -8.0, -8.5] # [m] end A coordinates - rB : [ 0.0, 8.0, -8.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : upper_tower_brace # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 0.0, -8.0, 4.5] # [m] end A coordinates + rB : [ 0.0, 8.0, 4.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell + + - name : lower_tower_brace # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 0.0, -8.0, -8.5] # [m] end A coordinates + rB : [ 0.0, 8.0, -8.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell - - name : diag_tower_brace-S # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 0.0, -8.0, -8.5] # [m] end A coordinates - rB : [ 0.0, 0.0, 4.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : diag_tower_brace-S # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 0.0, -8.0, 4.5] # [m] end A coordinates + rB : [ 0.0, 0.0, -8.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell - - name : diag_tower_brace-N # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 0.0, 8.0, -8.5] # [m] end A coordinates - rB : [ 0.0, 0.0, 4.5] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : diag_tower_brace-N # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 0.0, 8.0, 4.5] # [m] end A coordinates + rB : [ 0.0, 0.0, -8.5] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [- or m] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 2.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.02 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 0.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell - - name : heave_plate-E # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 28.0, 0.0, -10.5] # [m] end A coordinates - rB : [ 28.0, 0.0, -10.0] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 12.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.3925 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 1.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 1.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + + - - name : heave_plate-W # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ -28.0, 0.0, -10.5] # [m] end A coordinates - rB : [ -28.0, 0.0, -10.0] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 12.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.3925 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 1.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 1.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : heave_plate-E # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 28.0, 0.0, -10.5] # [m] end A coordinates + rB : [ 28.0, 0.0, -10.0] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 12.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.3925 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 1.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.4 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell + cap_stations: [0] # [- or m] the location of the cap relative to station values + cap_t : [0.02] # [m] the thickness of the cap at the cap station + cap_d_in : [0] # [m] the diameter of the "cut-out" circle (0 means it's continuous) + + - name : heave_plate-W # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ -28.0, 0.0, -10.5] # [m] end A coordinates + rB : [ -28.0, 0.0, -10.0] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 12.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.3925 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 1.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.4 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell + cap_stations: [0] # [- or m] the location of the cap relative to station values + cap_t : [0.02] # [m] the thickness of the cap at the cap station + cap_d_in : [0] # [m] the diameter of the "cut-out" circle (0 means it's continuous) - - name : heave_plate-S # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 0.0, -12.0, -10.5] # [m] end A coordinates - rB : [ 0.0, -12.0, -10.0] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 12.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.3925 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 1.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 1.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : heave_plate-S # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 0.0, -12.0, -10.5] # [m] end A coordinates + rB : [ 0.0, -12.0, -10.0] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 12.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.3925 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 1.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.4 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell + cap_stations: [0] # [- or m] the location of the cap relative to station values + cap_t : [0.02] # [m] the thickness of the cap at the cap station + cap_d_in : [0] # [m] the diameter of the "cut-out" circle (0 means it's continuous) - - name : heave_plate-N # [-] an identifier (no longer has to be number) - type : 2 # [-] - rA : [ 0.0, 12.0, -10.5] # [m] end A coordinates - rB : [ 0.0, 12.0, -10.0] # [m] and B coordinates - shape : circ # [-] circular or rectangular - gamma : 0.0 # [deg] twist angle about the member's z-axis - potMod : True # [bool] Whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory - stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB - d : 12.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) - t : 0.3925 # [m] wall thicknesses (scalar or list of same length as stations) - Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) - Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) - CdEnd : 1.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) - CaEnd : 1.0 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) - rho_shell : 7850 # [kg/m3] + - name : heave_plate-N # [-] an identifier (no longer has to be number) + type : 2 # [-] type (used for platform members vs. other members) + rA : [ 0.0, 12.0, -10.5] # [m] end A coordinates + rB : [ 0.0, 12.0, -10.0] # [m] end B coordinates + shape : circ # [-] circular or rectangular + gamma : 0.0 # [deg] twist angle about the member's z-axis + potMod : True # [bool] whether to model the member with potential flow (BEM model) plus viscous drag or purely strip theory + stations : [0, 1] # [-] location of stations along axis. Will be normalized such that start value maps to rA and end value to rB + d : 12.0 # [m] diameters if circular or side lengths if rectangular (can be pairs) + t : 0.3925 # [m] wall thicknesses (scalar or list of same length as stations) + Cd : 1.2 # [-] transverse drag coefficient (optional, scalar or list of same length as stations) + Ca : 1.0 # [-] transverse added mass coefficient (optional, scalar or list of same length as stations) + CdEnd : 1.0 # [-] end axial drag coefficient (optional, scalar or list of same length as stations) + CaEnd : 0.4 # [-] end axial added mass coefficient (optional, scalar or list of same length as stations) + rho_shell : 7850 # [kg/m^3] the material density of the shell + cap_stations: [0] # [- or m] the location of the cap relative to station values + cap_t : [0.02] # [m] the thickness of the cap at the cap station + cap_d_in : [0] # [m] the diameter of the "cut-out" circle (0 means it's continuous) mooring: water_depth: 50 # [m] uniform water depth - + points: - name: sw_anchor type: fixed - location: [-152.0, -50.0, -50.0] - anchor_type: drag_embedment - - - name: w_anchor - type: fixed - location: [-152.0, 0.0, -50.0] + location: [-342.0, -112.44, -50.0] anchor_type: drag_embedment - name: nw_anchor type: fixed - location: [-152.0, 50.0, -50.0] + location: [-342.0, 112.44, -50.0] anchor_type: drag_embedment - name: se_anchor type: fixed - location: [152.0, -50.0, -50.0] - anchor_type: drag_embedment - - - name: e_anchor - type: fixed - location: [152.0, 0.0, -50.0] + location: [ 342.0, -112.44, -50.0] anchor_type: drag_embedment - name: ne_anchor type: fixed - location: [152.0, 50.0, -50.0] + location: [ 342.0, 112.44, -50.0] anchor_type: drag_embedment - name: sw_fairlead type: vessel location: [-34.0, 0.0, -10.0] - - name: w_fairlead - type: vessel - location: [-34.0, 0.0, -10.0] - - name: nw_fairlead type: vessel location: [-34.0, 0.0, -10.0] - name: se_fairlead type: vessel - location: [34.0, 0.0, -10.0] - - - name: e_fairlead - type: vessel - location: [34.0, 0.0, -10.0] + location: [ 34.0, 0.0, -10.0] - name: ne_fairlead type: vessel - location: [34.0, 0.0, -10.0] + location: [ 34.0, 0.0, -10.0] lines: @@ -1106,52 +1140,40 @@ mooring: endA: sw_anchor endB: sw_fairlead type: main - length: 160 - - - name: w_line - endA: w_anchor - endB: w_fairlead - type: main - length: 152 + length: 335.1 - name: nw_line endA: nw_anchor endB: nw_fairlead type: main - length: 160 + length: 335.1 - name: se_line endA: se_anchor endB: se_fairlead type: main - length: 160 - - - name: e_line - endA: e_anchor - endB: e_fairlead - type: main - length: 152 + length: 335.1 - name: ne_line endA: ne_anchor endB: ne_fairlead type: main - length: 160 + length: 335.1 line_types: - - name: main - diameter: 0.324 - mass_density: 644.8 - stiffness: 85.4e8 - breaking_load: 1e8 - cost: 100.0 - transverse_added_mass: 0.5 - tangential_added_mass: 1.0 - transverse_drag: 1.15 - tangential_drag: 2.4 + - name : main + diameter : 0.1502 + mass_density : 139.18 + stiffness : 5.957e8 + breaking_load : 7.152e6 + cost : 100.0 + transverse_added_mass : 0.5 + tangential_added_mass : 1.0 + transverse_drag : 1.15 + tangential_drag : 2.4 anchor_types: - name: drag_embedment @@ -1159,4 +1181,5 @@ mooring: cost: 1e4 max_vertical_load: 0.0 max_lateral_load: 1e5 + \ No newline at end of file diff --git a/designs/VolturnUS-S.yaml b/designs/VolturnUS-S.yaml index a31a8f8..33c96b6 100644 --- a/designs/VolturnUS-S.yaml +++ b/designs/VolturnUS-S.yaml @@ -37,7 +37,7 @@ turbine: Rhub : 3.97 # hub radius [m] precone : 4.0 # [deg] shaft_tilt : 6.0 # [deg] - overhang : 12.0313 # [m] + overhang : -12.0313 # [m] aeroServoMod : 2 # 0 aerodynamics off; 1 aerodynamics on (no control); 2 aerodynamics and control on blade: diff --git a/designs/VolturnUS-S_farm.yaml b/designs/VolturnUS-S_farm.yaml index 99aab3f..603f939 100644 --- a/designs/VolturnUS-S_farm.yaml +++ b/designs/VolturnUS-S_farm.yaml @@ -62,7 +62,7 @@ turbine: Rhub : 3.97 # hub radius [m] precone : 4.0 # [deg] shaft_tilt : 6.0 # [deg] - overhang : 12.0313 # [m] + overhang : -12.0313 # [m] aeroServoMod : 2 # 0 aerodynamics off; 1 aerodynamics on (no control); 2 aerodynamics and control on blade: diff --git a/raft/raft_fowt.py b/raft/raft_fowt.py index b62c9b4..8db58fe 100644 --- a/raft/raft_fowt.py +++ b/raft/raft_fowt.py @@ -50,6 +50,7 @@ def __init__(self, design, w, mpb, depth=600, x_ref=0, y_ref=0, heading_adjust=0 self.nw = len(w) # number of frequencies self.Xi0 = np.zeros( self.nDOF) # mean offsets of platform from its reference point [m, rad] self.Xi = np.zeros([self.nDOF, self.nw], dtype=complex) # complex response amplitudes as a function of frequency [m, rad] + self.heading_adjust = heading_adjust # rotation to the heading of the platform and mooring system to be applied [deg] # position in the array self.x_ref = x_ref # reference x position of the FOWT in the array [m] @@ -148,10 +149,14 @@ def __init__(self, design, w, mpb, depth=600, x_ref=0, y_ref=0, heading_adjust=0 self.memberList.append(Member(mi, self.nw, heading=heading+heading_adjust)) - # add tower(s) to member list if applicable + # add tower(s) and nacelle(s) to member list if applicable if 'turbine' in design: - for mem in design['turbine']['tower']: - self.memberList.append(Member(mem, self.nw)) + if 'tower' in design['turbine']: + for mem in design['turbine']['tower']: + self.memberList.append(Member(mem, self.nw)) + if 'nacelle' in design['turbine']: + for mem in design['turbine']['nacelle']: + self.memberList.append(Member(mem, self.nw)) #TODO: consider putting the tower somewhere else rather than in end of memberList <<< # array-level mooring system connection @@ -328,8 +333,9 @@ def calcStatics(self): self.mtower = np.zeros(self.ntowers) # assume that the whole tower will always be one member self.rCG_tow = [] + memberList = [mem for mem in self.memberList if mem.name != 'nacelle'] # loop through each member - for i,mem in enumerate(self.memberList): + for i,mem in enumerate(memberList): # calculate member's orientation information (stored in the member and used in later steps) mem.setPosition(r6=self.r6) # <<< is this redundant, assume fowt.setPosition has been called? @@ -375,8 +381,7 @@ def calcStatics(self): Sum_V_rCB += r_CB*V_UW Sum_AWP_rWP += np.array([xWP, yWP])*AWP - - # ------------- include buoyancy effects of underwater rotors ------------- + # ------------- include buoyancy effects of underwater rotors (blades first, then nacelles) ------------- # loop through each blade member to calculate rotor buoyancy forces (for underwater turbines) for i, rotor in enumerate(self.rotorList): @@ -437,9 +442,28 @@ def calcStatics(self): afmem.setPosition() # Note: it might be possible to streamline the above using new capabilities in setPosition (but not sure). + + + nacelleMemberList = [mem for mem in self.memberList if mem.name == 'nacelle'] + # include only hydrostatic properties of nacelles (inertia properties are stored in mRNA/IxRNA/IrRNA and used below) + for mem in nacelleMemberList: - - + # call getHydroStatics for nacelles + Fvec, Cmat, V_UW, r_CB, AWP, IWP, xWP, yWP = mem.getHydrostatics(rho=self.rho_water, g=self.g, rPRP=self.r6[:3]) + + # add to fowt's mean force vector and stiffness matrix + self.W_hydro += Fvec # translateForce3to6DOF( np.array([0,0, Fz]), mem.rA ) # buoyancy vector + self.C_hydro += Cmat # translateMatrix6to6DOF(Cmat, mem.rA) # hydrostatic stiffness matrix + + # convert other metrics to also be about the PRP (platform reference point) + VTOT += V_UW # add to total underwater volume of all members combined + AWP_TOT += AWP + IWPx_TOT += IWP + AWP*yWP**2 + IWPy_TOT += IWP + AWP*xWP**2 + Sum_V_rCB += r_CB*V_UW + Sum_AWP_rWP += np.array([xWP, yWP])*AWP + + # ------------------------- include RNA properties ----------------------------- for i, rotor in enumerate(self.rotorList): @@ -634,56 +658,63 @@ def calcBEM(self, dw=0, wMax=0, wInf=10.0, dz=0, da=0, headings=[0], meshDir=os. return - if True: - import pyhams.pyhams as ph - # read the HAMS WAMIT-style output files - addedMass, damping, w1 = ph.read_wamit1(hydroPath+'.1', TFlag=True) # first two entries in frequency dimension are expected to be zero-frequency then infinite frequency - M, P, R, I, w3, heads = ph.read_wamit3(hydroPath+'.3', TFlag=True) - # The Tflag means that the first column is in units of periods, not frequencies, and therefore the first set (-1) becomes zero-frequency and the second set is infinite - - # process headings and sort frequencies - self.BEM_headings = np.array(heads)%(360) # save headings in range of 0-360 [deg] # interpole to the frequencies RAFT is using - - # interpolate to RAFT model frequencies - # zero frequency values are being stacked on to give smooth results if the requested frequency is below what's available from HAMS - addedMassInterp = interp1d(np.hstack([w1[2:], 0.0]), np.dstack([addedMass[:,:,2:], addedMass[:,:,0]]), assume_sorted=False, axis=2)(self.w) - dampingInterp = interp1d(np.hstack([w1[2:], 0.0]), np.dstack([ damping[:,:,2:], np.zeros([6,6]) ]), assume_sorted=False, axis=2)(self.w) - fExRealInterp = interp1d(np.hstack([w3, 0.0]), np.dstack([ R, np.zeros([len(heads),6]) ]), assume_sorted=False, axis=2)(self.w) - fExImagInterp = interp1d(np.hstack([w3, 0.0]), np.dstack([ I, np.zeros([len(heads),6]) ]), assume_sorted=False, axis=2)(self.w) - # note: fEx tensors are sized according to [nHeadings, 6 DOFs, frequencies] - - # copy results over to the FOWT's coefficient arrays - self.A_BEM = self.rho_water * addedMassInterp - self.B_BEM = self.rho_water * dampingInterp - X_BEM_temp = self.rho_water * self.g * (fExRealInterp + 1j*fExImagInterp) - + import pyhams.pyhams as ph + # read the HAMS WAMIT-style output files + addedMass, damping, w1 = ph.read_wamit1(hydroPath+'.1', TFlag=True) # first two entries in frequency dimension are expected to be zero-frequency then infinite frequency + M, P, R, I, w3, heads = ph.read_wamit3(hydroPath+'.3', TFlag=True) + # The Tflag means that the first column is in units of periods, not frequencies, and therefore the first set (-1) becomes zero-frequency and the second set is infinite + + # process and sort headings and sort frequencies + R_unsorted = R.copy() + I_unsorted = I.copy() + self.BEM_headings = np.array(heads)%(360) # save headings in range of 0-360 [deg] # interpole to the frequencies RAFT is using + sorted_indices = np.argsort(self.BEM_headings) + self.BEM_headings = self.BEM_headings[sorted_indices] + M = M[sorted_indices,:,:] + P = P[sorted_indices,:,:] + R = R[sorted_indices,:,:] + I = I[sorted_indices,:,:] + + # interpolate to RAFT model frequencies + # zero frequency values are being stacked on to give smooth results if the requested frequency is below what's available from HAMS + addedMassInterp = interp1d(np.hstack([w1[2:], 0.0]), np.dstack([addedMass[:,:,2:], addedMass[:,:,0]]), assume_sorted=False, axis=2)(self.w) + dampingInterp = interp1d(np.hstack([w1[2:], 0.0]), np.dstack([ damping[:,:,2:], np.zeros([6,6]) ]), assume_sorted=False, axis=2)(self.w) + fExRealInterp = interp1d(np.hstack([w3, 0.0]), np.dstack([ R, np.zeros([len(heads),6]) ]), assume_sorted=False, axis=2)(self.w) + fExImagInterp = interp1d(np.hstack([w3, 0.0]), np.dstack([ I, np.zeros([len(heads),6]) ]), assume_sorted=False, axis=2)(self.w) + # note: fEx tensors are sized according to [nHeadings, 6 DOFs, frequencies] + + # copy results over to the FOWT's coefficient arrays + self.A_BEM = self.rho_water * addedMassInterp + self.B_BEM = self.rho_water * dampingInterp + X_BEM_temp = self.rho_water * self.g * (fExRealInterp + 1j*fExImagInterp) + + + # Transform excitation coefficients so that DOFs are always + # relative to incident wave heading rather than global frame, + # for accurate magnitudes when interpolating between directions. + self.X_BEM = np.zeros_like(X_BEM_temp) + + for ih in range(len(self.BEM_headings)): + sin_heading = np.sin(np.radians(self.BEM_headings[ih])) + cos_heading = np.cos(np.radians(self.BEM_headings[ih])) - # Transform excitation coefficients so that DOFs are always - # relative to incident wave heading rather than global frame, - # for accurate magnitudes when interpolating between directions. - self.X_BEM = np.zeros_like(X_BEM_temp) + self.X_BEM[ih,0,:] = cos_heading * X_BEM_temp[ih,0,:] + sin_heading * X_BEM_temp[ih,1,:] + self.X_BEM[ih,1,:] = -sin_heading * X_BEM_temp[ih,0,:] + cos_heading * X_BEM_temp[ih,1,:] + self.X_BEM[ih,2,:] = X_BEM_temp[ih,2,:] + self.X_BEM[ih,3,:] = cos_heading * X_BEM_temp[ih,3,:] + sin_heading * X_BEM_temp[ih,4,:] + self.X_BEM[ih,4,:] = -sin_heading * X_BEM_temp[ih,3,:] + cos_heading * X_BEM_temp[ih,4,:] + self.X_BEM[ih,5,:] = X_BEM_temp[ih,5,:] - for ih in range(len(heads)): - sin_heading = np.sin(np.radians(heads[ih])) - cos_heading = np.cos(np.radians(heads[ih])) - - self.X_BEM[ih,0,:] = cos_heading * X_BEM_temp[ih,0,:] + sin_heading * X_BEM_temp[ih,1,:] - self.X_BEM[ih,1,:] = -sin_heading * X_BEM_temp[ih,0,:] + cos_heading * X_BEM_temp[ih,1,:] - self.X_BEM[ih,2,:] = X_BEM_temp[ih,2,:] - self.X_BEM[ih,3,:] = cos_heading * X_BEM_temp[ih,3,:] + sin_heading * X_BEM_temp[ih,4,:] - self.X_BEM[ih,4,:] = -sin_heading * X_BEM_temp[ih,3,:] + cos_heading * X_BEM_temp[ih,4,:] - self.X_BEM[ih,5,:] = X_BEM_temp[ih,5,:] - - # HAMS results error checks >>> any more we should have? <<< - if np.isnan(self.A_BEM).any(): - raise Exception("NaN values detected in HAMS calculations for added mass. Check the geometry.") - if np.isnan(self.B_BEM).any(): - raise Exception("NaN values detected in HAMS calculations for damping. Check the geometry.") - if np.isnan(self.X_BEM).any(): - raise Exception("NaN values detected in HAMS calculations for excitation. Check the geometry.") + # HAMS results error checks >>> any more we should have? <<< + if np.isnan(self.A_BEM).any(): + raise Exception("NaN values detected in HAMS calculations for added mass. Check the geometry.") + if np.isnan(self.B_BEM).any(): + raise Exception("NaN values detected in HAMS calculations for damping. Check the geometry.") + if np.isnan(self.X_BEM).any(): + raise Exception("NaN values detected in HAMS calculations for excitation. Check the geometry.") - # TODO: add support for multiple wave headings <<< - # note: RAFT will only be using finite-frequency potential flow coefficients + # TODO: add support for multiple wave headings <<< + # note: RAFT will only be using finite-frequency potential flow coefficients def readHydro(self): '''Read preexisting WAMIT-style .1 and .3 files and use as the FOWT's @@ -760,6 +791,7 @@ def calcTurbineConstants(self, case, ptfm_pitch=0): #todo: reorder above so that w is last index <<< self.B_gyro = np.zeros([6,6,self.nrotors]) # rotor gyroscopic damping matrix + self.cav = [0] if turbine_status == 'operating': @@ -791,8 +823,8 @@ def calcTurbineConstants(self, case, ptfm_pitch=0): self.f_aero[:,iw,ir] = transformForce(f_aero[:,iw], offset=rot.r_hub_rel) # excitation # calculate cavitation of the rotor (platform motions should already be accounted for in the CCBlade object after running calcAero) - # if rotor is submerged... - # cav = rot.calcCavitation(case) # TO-DO: wire this to be a result/output, then uncomment <<< + if rot.r3[2] < 0: # if submerged + self.cav = rot.calcCavitation(case) # TO-DO: wire this to be a result/output, then uncomment <<< # ----- calculate rotor gyroscopic effects ----- # rotor speed [rpm] @@ -1009,10 +1041,10 @@ def calcHydroExcitation(self, case, memberList=[], dgamma=0): for ih in range(self.nWaves): # phase offset due to FOWT position in array - phase_offset = np.exp(-1j*self.k* ( self.x_ref*np.cos(case['wave_heading'][ih]) - + self.y_ref*np.sin(case['wave_heading'][ih]) ) ) + phase_offset = np.exp(-1j*self.k* ( self.x_ref*np.cos(np.deg2rad(case['wave_heading'][ih])) + + self.y_ref*np.sin(np.deg2rad(case['wave_heading'][ih])) ) ) - beta = np.degrees(self.beta[ih])%360 # heading in range of 0-360 [deg] + beta = (np.degrees(self.beta[ih]) - self.heading_adjust)%360 # heading in range of 0-360 [deg] headings = self.BEM_headings # the headings of the available BEM data [deg] nhs = len(headings) @@ -1091,7 +1123,7 @@ def calcHydroExcitation(self, case, memberList=[], dgamma=0): # add the excitation complex amplitude for this heading and frequency to the global excitation vector self.F_hydro_iner[ih,:,i] += translateForce3to6DOF(F_exc_iner_temp, mem.r[il,:] - self.r6[:3]) # (about PRP) - + # ----- inertial excitation on rotor(s) ----- for i, rot in enumerate(self.rotorList): @@ -1293,7 +1325,8 @@ def calcCurrentLoads(self, case): if mem.r[il,2] < 0: # calculate current velocity as a function of node depth [x,y,z] (assumes no vertical current velocity) - v = speed * (((self.depth + Zref) - abs(mem.r[il,2]))/(self.depth + Zref))**self.shearExp_water + v = speed * (((self.depth) - abs(mem.r[il,2]))/(self.depth + Zref))**self.shearExp_water + #v = speed vcur = np.array([v*np.cos(np.deg2rad(heading)), v*np.sin(np.deg2rad(heading)), 0]) # interpolate coefficients for the current strip @@ -1861,7 +1894,7 @@ def saveTurbineOutputs(self, results, case): TRMS = getRMS(T_moor_amps[:,iT,:]) # estimated mooring line RMS tension [N] results['Tmoor_std'][iT] = TRMS results['Tmoor_max'][iT] = T_moor[iT] + 3*TRMS - results['Tmoor_max'][iT] = T_moor[iT] - 3*TRMS + results['Tmoor_min'][iT] = T_moor[iT] - 3*TRMS results['Tmoor_PSD'][iT, :] = (getPSD(T_moor_amps[:,iT,:], self.w[0])) # PSD in N^2/(rad/s) # hub fore-aft displacement amplitude and acceleration (used as an approximation in a number of outputs) @@ -2011,6 +2044,9 @@ def saveTurbineOutputs(self, results, case): # wind PSD for reference results['wind_PSD'] = getPSD(rot.V_w, self.dw) # <<< need to confirm + if rot.r3[2] < 0: + if len(self.cav) > 0: + results['cavitation'] = self.cav ''' Outputs from OpenFAST to consider covering: @@ -2076,7 +2112,7 @@ def plot(self, ax, color=None, nodes=0, plot_rotor=True, station_plot=[], airfoils=False, zorder=2, plot_fowt=True, plot_ms=True, shadow=True, mp_args={}): '''plots the FOWT...''' - + R = rotationMatrix(self.r6[3], self.r6[4], self.r6[5]) # note: eventually Rotor could handle orientation internally <<< if plot_ms: @@ -2094,14 +2130,14 @@ def plot(self, ax, color=None, nodes=0, plot_rotor=True, station_plot=[], if plot_fowt: if plot_rotor: for rotor in self.rotorList: - rotor.plot(ax, r_ptfm=self.r6[:3]+np.array([self.x_ref, self.y_ref, 0]), color=color, airfoils=airfoils, zorder=zorder) + rotor.plot(ax, color=color, airfoils=airfoils, zorder=zorder) # loop through each member and plot it for mem in self.memberList: mem.setPosition() # offsets/rotations could be done in this function rather than in mem.plot <<< - mem.plot(ax, r_ptfm=self.r6[:3]+np.array([self.x_ref, self.y_ref, 0]), R_ptfm=R, color=color, + mem.plot(ax, r_ptfm=self.r6[:3], R_ptfm=R, color=color, nodes=nodes, station_plot=station_plot, zorder=zorder) # in future should consider ability to animate mode shapes and also to animate response at each frequency diff --git a/raft/raft_member.py b/raft/raft_member.py index c6e312d..0ee875d 100644 --- a/raft/raft_member.py +++ b/raft/raft_member.py @@ -39,7 +39,9 @@ def __init__(self, mi, nw, BEM=[], heading=0): if (self.rA0[2] == 0 or self.rB0[2] == 0) and self.type != 3: raise ValueError("RAFT Members cannot start or end on the waterplane") if self.rB0[2] < self.rA0[2]: - raise ValueError(f"The z position of rA is {self.rA0[2]}, and the z position of rB is {self.rB0[2]}. RAFT Members must have their rA position below the rB position. Try changing your input design yaml rA/rB values.") + print(f"The z position of rA is {self.rA0[2]}, and the z position of rB is {self.rB0[2]}. RAFT Members can have trouble when their rA position is below the rB position. Switching rA and rB now.") + self.rA0 = np.array(mi['rB'], dtype=np.double) + self.rB0 = np.array(mi['rA'], dtype=np.double) shape = str(mi['shape']) # the shape of the cross section of the member as a string (the first letter should be c or r) diff --git a/raft/raft_model.py b/raft/raft_model.py index e766d3a..491ea72 100644 --- a/raft/raft_model.py +++ b/raft/raft_model.py @@ -159,10 +159,12 @@ def __init__(self, design, nTurbines=1): self.design = design # save design dictionary for possible later use/reference - + # Set mooring current modeling mode (0: no current; 1: uniform current included in MoorPy) + self.mooring_currentMod = getFromDict(design['mooring'], 'currentMod', default=0, dtype=int) + + # Initialize array-level mooring system if it exists if self.ms: self.ms.initialize() - #>>> initialize all the mooring systems? self.results = {} # dictionary to hold all results from the model @@ -553,10 +555,12 @@ def solveStatics(self, case, display=0): if display > 1: print(" F_env_constant"+" ".join(["{:+8.2e}"]*6).format(*F_env_constant[6*i:6*i+6])) - # preliminary approach to provide uniform currents on the mooring system(s) - currentMod = 0 - currentU = np.zeros(3) - if case: + + # ----- Pass case water current information to MoorPy ----- + + currentMod = 0 # current modeling mode for MoorPy + currentU = np.zeros(3) # uniform current velocity for MoorPy [m/s] + if case and self.mooring_currentMod > 0: cur_speed = getFromDict(case, 'current_speed', shape=0, default=0.0) cur_heading = getFromDict(case, 'current_heading', shape=0, default=0) if cur_speed > 0: @@ -564,6 +568,16 @@ def solveStatics(self, case, display=0): currentU = np.array([cur_speed*np.cos(np.radians(cur_heading)), cur_speed*np.sin(np.radians(cur_heading)), 0]) + # Apply current to MoorPy + if self.ms: + self.ms.currentMod = currentMod + self.ms.current = np.array(currentU) + for fowt in self.fowtList: + if fowt.ms: + fowt.ms.currentMod = currentMod + fowt.ms.current = np.array(currentU) + + # ----- calculate platform offsets and mooring system equilibrium state ----- # figure out some settings to the equilibrium solve diff --git a/raft/raft_rotor.py b/raft/raft_rotor.py index e905858..2785ec2 100644 --- a/raft/raft_rotor.py +++ b/raft/raft_rotor.py @@ -690,6 +690,8 @@ def calcCavitation(self, case, azimuth=0, clearance_margin=1.0, Patm=101325, Pva cav_check[a,n] = sigma_crit + cpmin_node # if this value is negative, then cavitation occurs (sigma_crit - sigma_l < 0 -> cav occurs; sigma_l = -cpmin_node) + if np.any(cav_check < 0.0): + print("WARNING: Cavitation check was run and found a blade node that has cavitation occuring") return cav_check @@ -992,16 +994,18 @@ def calcAero(self, case, current=False, display=0): self.b[:3,:3, iw] = rotateMatrix3(np.diag([b2[iw],0,0]), self.R_q) self.f[:3, iw] = np.matmul(self.R_q, np.array([f2[iw],0,0])) # Above is only forces for now. Moments can be added in future. - + + """ # Caltured in FOWT.calcHydroExcitation() # Add hydrodynamic inertial excitation for underwater rotors if current: self.f[0,:] += self.I_hydro[0,0] * 1j*self.w*self.V_w # <<< this should have a rotation applied breakpoint() + """ return self.f0, self.f, self.a, self.b # B_aero, C_aero, F_aero0, F_aero - def plot(self, ax, r_ptfm=[0,0,0], azimuth=0, color='k', + def plot(self, ax, r_ptfm=np.array([0,0,0]), azimuth=0, color='k', airfoils=False, draw_circle=False, plot2d=False, Xuvec=[1,0,0], Yuvec=[0,0,1], zorder=2): '''Draws the rotor on the passed axes, considering optional platform @@ -1059,8 +1063,9 @@ def plot(self, ax, r_ptfm=[0,0,0], azimuth=0, color='k', P2 = np.matmul(R_precone, P) P2 = np.matmul(R_azimuth[ib], P2) # rotate around shaft P2 = np.matmul(self.R_q, P2) # rotate to actual rotor orientation - P2 = P2 + self.r3[:,None] + r_ptfm[:,None] # translate from PRP to absolute hub location - + P2 = P2 + self.r3[:,None] # translate from PRP to absolute hub location + + if plot2d: # new 2d plotting option # apply any 3D to 2D transformation here to provide desired viewing angle