Hydrodynamic implementation

Dear Jason,
To be completely sure that I have done everything right, I will rewrite for the last time, in as much detail as possible, the terms that make up the equation of hydrodynamics:
M * a = Fhydro + Fmoor - Fnonlinear -Frestoring
where is it:

  • M: variable mass matrix with the movement of the platform. It is defined starting from the mass matrix in the center of mass Mcg, whose value has already been confirmed by you in the topic OC3-Hywind RAOs - #25 by Lorenzo.Cottura.
    Then M = M_swl = TransMat^T^-1M_cgTransMat^-1 where
    TransMat =
    [ [ 1 0 0 0 -z_cg y_cg ];
    [ 0 1 0 z_cg 0 -x_cg ];
    [ 0 0 1 -y_cg x_cg 0 ];
    [ 0 0 0 1 0 0 ];
    [ 0 0 0 0 1 0 ];
    [ 0 0 0 0 0 1 ] ]
    and
    TransMat^T =
    [ [ 1 0 0 0 0 0 ];
    [ 0 1 0 0 0 0 ];
    [ 0 0 1 0 0 0 ];
    [ 0 z_cg -y_cg 1 0 0 ];
    [ -z_cg 0 x_cg 0 1 0 ];
    [ y_cg -x_cg 0 0 0 0 1 ] ]
    In these formulas, the coordinates of the center of mass r_g = [x_cg, y_cg, z_cg] are not fixed but vary with the movements of the platform, through the formula:
    r_g = [AngleMat^T ]{ x_cg; y_cg; z_cg }
    where { x_cg; y_cg; z_cg } is the initial position of the center of mass and AngleMat^T is the transpose (inverse) of the Eulerian matrix (or of the orientation matrix documented in Eq. (2) in your 2009 Wind Energy paper: onlinelibrary.wiley.com/doi/abs/10.1002/we.347).
    In this way a mass matrix M = M_swl 6x6 is obtained, variable and arranged as in the figure.
    Schermata 2020-10-30 alle 10.35.51.png
    It is also recalled that x_g, y_g, z_g in the figure, as well as the moments of inertia, vary from instant to instant depending on the arrangement of the platform. From now on, references to M will be references to the variable mass (example M (1,5) = m
    z_g)

  • a: acceleration outputs of FAST (‘PtfmTAxi’, ‘PtfmTAyi’, ‘PtfmTAzi’, ‘PtfmRAxi’, ‘PtfmRAyi’, ‘PtfmRAzi’)

  • Fhydro: outputs FAST (‘HydroFxi’, ‘HydroFyi’ ‘HydroFzi’, ‘HydroMxi’, ‘HydroMyi’, ‘HydroMzi’)

  • Fmoor: starting from the forces in the 3 directions for each line obtained by MAP ++ ( example Fx_moor = Fx[1] + Fx[2] + Fx[3] + Fx[4] + Fx[5] + Fx[6]), the moments were obtained.
    For each line the forces in the 3 directions are obtained (eg Fx [1], Fy [1], Fz [1]).
    Defined C = (x_c, y_c, z_c) the vector connecting the point (0,0,0) with the anchor fairlead, we obtain the C_rot arm to be multiplied by the forces to obtain the moments:
    C_rot = [AngleMat ^ T] * {x_c; y_c; z_c}
    in fact, the arm used to obtain the moments from the forces varies with the variation of the position of the platform.
    Finally [Mx, My, Mz] = C_rot x [Fx, Fy, Fz] (example [Mx [1], My [1], Mz [1]] = C_rot [1] x [Fx [1], Fy [1], Fz [1]])

  • Frestoring: where Fx, Fy, Mz are 0,
    Fz=mg
    Mx = M(2,6)
    g * ‘PtfmYaw’ - M(1,5) * g * ‘PtfmRoll’
    My = M(3,4)* g * ‘PtfmYaw’ - M(1,5) * g * ‘PtfmPitch’

  • Fnonlinear: defined the inertia matrix I =
    [[M (4,4), M (4,5), M (4,6)];
    [M (5,4), M (5,5), M (5,6)];
    [M (6,4), M (6,5), M (6,6)]]
    (which therefore depends on the movements of the platform), and defined omega = [‘PtfmRVxi’, ‘PtfmRVyi’, ‘PtfmRVzi’],
    as regards the moments I used the formula omega x I dot omega,
    as regards the forces I used the formula omega x (omega x r_cm * mass) where r_cm * mass = [M (6,2), M (4,3), M (5,1)]

I hope this will fully clarify the formulas I use.
Best regards,
Lorenzo.