Thank you Jason, that makes sense.
Here is the python script which I used to compute the ballast Inertia’s about the platform CM (at -13.46 m):
import numpy as np
# values reported in https://www.nrel.gov/docs/fy14osti/60601.pdf
PtfmRIner_total = 6.827e9 # platform roll inertia about CM, including ballast
PtfmPIner_total = 6.827e9 # platform pitch inertia about CM, including ballast
PtfmYIner_total = 1.226e10 # platform yaw inertia about CM, including ballast
structure_mass = 3.8522e6 # total metal mass of structure
water_mass = 9.6208e6 # total water mass
# ballast cross-sectional properties
thickness = 0.06
ballast_radius = -thickness + np.array([6, 6, 6, 12, 12, 12])
# based on lower ballast boundaries of -19.94 m for BC and -14.00 m for UC
# a FillLoc of -14.89 for BC and -6.17 for UC, and the axis location of the columns,
# the lengths and midpoints or center of mass of the water ballast are given by
# ballast length
ballast_length = np.array([7.83, 7.83, 7.83, 5.05, 5.05, 5.05])
# ballast CM
ballast_COG_list = np.array(
[[-28.86751346, 0. , -10.085 ], # upper column
[ 14.43375673, -25. , -10.085 ], # -
[ 14.43375673, 25. , -10.085 ], # -
[-28.86751346, 0. , -17.415 ], # base column
[ 14.43375673, -25. , -17.415 ], # -
[ 14.43375673, 25. , -17.415 ]]) # -
# ballast masses from the reference HydroDyn summary file
ballast_masses = np.array(
[8.89628E+05, # upper column
8.89628E+05, # -
8.89628E+05, # -
2.31832E+06, # base column
2.31832E+06, # -
2.31832E+06]) # -
# platform center of mass
CM = np.array([0, 0, -13.46])
# initialize self-inertias and inertia's about platform CM
Ix, Iy, Iz = 0, 0, 0
PAterm_x, PAterm_y, PAterm_z = 0, 0, 0
for idx in range(len(ballast_masses)):
# x, y, z loc of ballast center of mass
xballast = ballast_COG_list[idx, 0]
yballast = ballast_COG_list[idx, 1]
zballast = ballast_COG_list[idx, 2]
# ballast length and mass
radius = ballast_radius[idx]
length = ballast_length[idx]
mass = ballast_masses[idx]
# distance to platform CM
xdist = abs(CM[0] - xballast)
ydist = abs(CM[1] - yballast)
zdist = abs(CM[2] - zballast)
# self inertia's
Ix += 0.25 * mass * radius ** 2 + (1/12) * mass * length ** 2
Iy += 0.25 * mass * radius ** 2 + (1/12) * mass * length ** 2
Iz += 0.5 * mass * radius ** 2
# parallel axis theorem
PAterm_x += mass * (ydist ** 2 + zdist ** 2)
PAterm_y += mass * (xdist ** 2 + zdist ** 2)
PAterm_z += mass * (xdist ** 2 + ydist ** 2)
# add self inertia's and parallal axis terms to get total ballast inertias about the platform CM
Ixx = Ix + PAterm_x
Iyy = Iy + PAterm_y
Izz = Iz + PAterm_z
print(f'total Ixx: {Ixx}')
print(f'total Iyy: {Iyy}')
print(f'total Izz: {Izz}')
With this, I get the following water ballast inertia values about the platform C.O.M:
Ixx = 4.448964175E+09
Iyy = 4.448964175E+09
Izz = 8.562715985E+09
Subtracting Izz from the total platform inertia of 1.226E+10 leads to a structural-only inertia of approx. 3.697E+09 [kg.m2]. Correcting the values for Ixx and Iyy requires a bit more thinking from my side, as in this case the z-loc of the CM shifts when the water mass is discarded. If my calculation methods are correct I would be puzzled as to why the difference in the PtfmYIner
value remains.
Best regards,