From 2f475912017a43dbfabb9cb463cecfe265aa2b09 Mon Sep 17 00:00:00 2001 From: Lucas-Carmo Date: Tue, 17 Sep 2024 08:59:10 -0600 Subject: [PATCH 1/7] Bugfix: We were overwriting Tmoor_max with Tmoor_min --- raft/raft_fowt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raft/raft_fowt.py b/raft/raft_fowt.py index b62c9b4..8d3af3c 100644 --- a/raft/raft_fowt.py +++ b/raft/raft_fowt.py @@ -1861,7 +1861,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) From 6046b13cc198d3133bf54d62e2fd96587ec9893b Mon Sep 17 00:00:00 2001 From: Matt Hall <5151457+mattEhall@users.noreply.github.com> Date: Tue, 17 Sep 2024 10:49:25 -0600 Subject: [PATCH 2/7] Case current information is now passed to MoorPy if mooring_currentMod > 0 - Added optional "currentMod" switch in the moorings section of the YAML. (0: no current; 1: uniform current included in MoorPy). --- raft/raft_model.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) 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 From d7268c38bc57d4f03a63dcb15eed43f52db5e852 Mon Sep 17 00:00:00 2001 From: Lucas-Carmo Date: Tue, 17 Sep 2024 16:59:08 -0600 Subject: [PATCH 3/7] Bugfix in the phase_offset for BEM-based wave excitation wave_heading was assumed to be in radians but it is in degrees --- raft/raft_fowt.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/raft/raft_fowt.py b/raft/raft_fowt.py index 8d3af3c..294dcec 100644 --- a/raft/raft_fowt.py +++ b/raft/raft_fowt.py @@ -1009,8 +1009,8 @@ 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] From 81697c76dc3b0cfec1382b991e2e6dfce6865c86 Mon Sep 17 00:00:00 2001 From: Lucas-Carmo Date: Wed, 18 Sep 2024 15:45:42 -0600 Subject: [PATCH 4/7] Bugfix in BEM hydro forces: sort headings + account for fowt heading - The interpolation performed in calcHydroExcitation() assumes that the wave incidences in self.BEM_headings() are sorted. This wasn't the case when the input was read from WAMIT with incidences from -180deg to 180deg due to converting the heading to a range between 0 and 360deg. Now we sort the hydro forces read from a .3 file according to the headings in the 0 to 360 deg range - There was a "If True:" that should've been removed in the past but we forgot - The BEM hydro forces weren't accounting for body orientation, but now they do --- raft/raft_fowt.py | 102 ++++++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 48 deletions(-) diff --git a/raft/raft_fowt.py b/raft/raft_fowt.py index 294dcec..0323569 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] @@ -634,56 +635,61 @@ 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 + 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(heads)): + sin_heading = np.sin(np.radians(heads[ih])) + cos_heading = np.cos(np.radians(heads[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 @@ -1012,7 +1018,7 @@ def calcHydroExcitation(self, case, memberList=[], dgamma=0): 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) From 68a615a04fa5d7a1a2d46ab9ccc108e25b1ba83d Mon Sep 17 00:00:00 2001 From: Lucas-Carmo Date: Wed, 18 Sep 2024 18:02:33 -0600 Subject: [PATCH 5/7] Bugfix in plot functions We were double counting for fowt position in the array (x_ref, y_ref). This was causing the platform and rotor visualization to be quite far from where they actually are for units not at (0,0) --- raft/raft_fowt.py | 4 ++-- raft/raft_rotor.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/raft/raft_fowt.py b/raft/raft_fowt.py index 0323569..944c571 100644 --- a/raft/raft_fowt.py +++ b/raft/raft_fowt.py @@ -2100,14 +2100,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_rotor.py b/raft/raft_rotor.py index e905858..6ab7775 100644 --- a/raft/raft_rotor.py +++ b/raft/raft_rotor.py @@ -1001,7 +1001,7 @@ def calcAero(self, case, current=False, display=0): 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 From 469caa08d8297d354f6d242e93ef498ee7c4cc77 Mon Sep 17 00:00:00 2001 From: Stein Date: Mon, 23 Sep 2024 14:11:44 -0600 Subject: [PATCH 6/7] MHK modeling improvements - All work was done/tested in with the RM1_Floating RAFT model - Added the option to include a nacelle member in the turbine dictionary - - Only models buoyancy and hydrodynamics (but added mass and drag coefficients are set to 0) - Added better outputting for cavitation in raft_fowt and rotor - Fixed some plotting issues I created in a previous commit (need to setPosition of all FOWTs in a Model) - Deleted/commented out the section for excess inertial loads on the rotor when operating - Clean up a lot of the RM1 YAML - - Reformatted a lot of the comments - - Added 20mm end caps to increase the platform mass and be more realistic - - Added a print warning for members with a rA below rB - - Adjusted/tuned the axial added mass coefficients for the heave plates (1.0 -> 0.4) - - Increased shell density of the tower for extra components - - Added a nacelle (only counts towards buoyancy and hydrodynamics) - - - Drag set to zero, added mass to zero, also 8500 density for additional components - - Updated the other mRNA/IxRNA/IrRNA based on new OpenFAST information - - Overhang now has new convention in opposite way - - Idrivetrain controls gyroscopic damping, speed_gain controls blockage - - Cleaned up the mooring section too with the updated 4-Line mooring system - Adjusted the overhang to be the right convention in all the other designs --- designs/FOCTT_example.yaml | 2 +- designs/OC3spar.yaml | 2 +- designs/OC4semi.yaml | 2 +- designs/RM1_Floating.yaml | 797 +++++++++++++++++----------------- designs/VolturnUS-S.yaml | 2 +- designs/VolturnUS-S_farm.yaml | 2 +- raft/raft_fowt.py | 54 ++- raft/raft_member.py | 4 +- raft/raft_rotor.py | 11 +- 9 files changed, 467 insertions(+), 409 deletions(-) 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 944c571..9338324 100644 --- a/raft/raft_fowt.py +++ b/raft/raft_fowt.py @@ -149,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 @@ -329,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? @@ -376,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): @@ -438,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): @@ -766,6 +789,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': @@ -797,8 +821,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] @@ -1097,7 +1121,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): @@ -1299,7 +1323,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 @@ -2017,6 +2042,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: @@ -2082,7 +2110,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: 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_rotor.py b/raft/raft_rotor.py index 6ab7775..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,11 +994,13 @@ 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 @@ -1059,8 +1063,9 @@ def plot(self, ax, r_ptfm=np.array([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 From 633788056b161fd6420620da189c0e90651d99e4 Mon Sep 17 00:00:00 2001 From: Lucas-Carmo Date: Wed, 25 Sep 2024 11:00:48 -0600 Subject: [PATCH 7/7] Bugfix in BEM hydro forces: using the right incidences now When transforming excitation coefficients to be relative to the incident wave heading rather than to the global frame, we were using the unsorted headings vector (heads) instead of the sorted headings vector (self.BEM_headings) --- raft/raft_fowt.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/raft/raft_fowt.py b/raft/raft_fowt.py index 9338324..8db58fe 100644 --- a/raft/raft_fowt.py +++ b/raft/raft_fowt.py @@ -665,13 +665,15 @@ def calcBEM(self, dw=0, wMax=0, wInf=10.0, dz=0, da=0, headings=[0], meshDir=os. # 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,:,:] + 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 @@ -692,9 +694,9 @@ def calcBEM(self, dw=0, wMax=0, wInf=10.0, dz=0, da=0, headings=[0], meshDir=os. # for accurate magnitudes when interpolating between directions. self.X_BEM = np.zeros_like(X_BEM_temp) - for ih in range(len(heads)): - sin_heading = np.sin(np.radians(heads[ih])) - cos_heading = np.cos(np.radians(heads[ih])) + 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])) 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,:]