###################################################################################################################################
# Registry for Morison in the FAST Modularization Framework
# This Registry file is used to create MODULE Morison  which contains all of the user-defined types needed in Morison.
# It also contains copy, destroy, pack,  and unpack routines associated with each defined data types.
# See NWTC Programmer's Handbook for further information on the format/contents of this file.
#
# Entries are of the form
# <keyword>         <ModuleName/ModName>          <TypeName>          <FieldType>         <FieldName>         <Dims>    <IO>      <DNAME>   <DESCRIP> <UNITS>
#
# Use ^ as a shortcut for the value in the same column from the previous line.
###################################################################################################################################

# ...... Include files (definitions from NWTC Library) ............................................................................
# make sure that the file name does not have any trailing white spaces!
include   Registry_NWTC_Library.txt
usefrom   SeaSt_WaveField.txt
#
param     Morison/Morison              -                             INTEGER          MSecGeom_Cyl             -          1        -         "MSecGeom = 1   [circular member cross section]" -
param     Morison/Morison              -                             INTEGER          MSecGeom_Rec             -          2        -         "MSecGeom = 2   [rectangular member cross section]" -
#
typedef   Morison/Morison              Morison_JointType             INTEGER          JointID                  -          -        -         "User-specified integer ID for the given joint"    -
typedef   ^                            ^                             ReKi             Position                {3}         -        -         "Undisplaced location of the joint in the platform coordinate system"    m
typedef   ^                            ^                             INTEGER          JointAxID                -          -        -         "Axial ID (found in the user-supplied Axial Coefficients Table) for this joint: used to determine axial coefs"    -
typedef   ^                            ^                             INTEGER          JointAxIDIndx            -          -        -         "The index into the Axial Coefs arrays corresponding to the above Axial ID"    -
typedef   ^                            ^                             INTEGER          JointOvrlp               -          -        -         "Joint overlap code [Unused"    -
typedef   ^                            ^                             INTEGER          NConnections             -          -        -         "Number of members connecting to this joint"    -
typedef   ^                            ^                             INTEGER          ConnectionList           {50}       -        -         "List of Members connected to this joint.  The member index is what is stored, not the Member ID"    -
typedef   ^                            Morison_MemberPropTypeCyl     INTEGER          PropSetID                -          -        -         "User-specified integer ID for this group of properties"    -
typedef   ^                            ^                             ReKi             PropD                    -          -        -         "Diameter"    m
typedef   ^                            ^                             ReKi             PropThck                 -          -        -         "Wall thickness"    m
typedef   ^                            Morison_MemberPropTypeRec     INTEGER          PropSetID                -          -        -         "User-specified integer ID for this group of properties"    -
typedef   ^                            ^                             ReKi             PropA                    -          -        -         "Length of side A"    m
typedef   ^                            ^                             ReKi             PropB                    -          -        -         "Length of side B"    m
typedef   ^                            ^                             ReKi             PropThck                 -          -        -         "Wall thickness"    m
typedef   ^                            Morison_FilledGroupType       INTEGER          FillNumM                 -          -        -         "Number of members in the Fill Group"    -
typedef   ^                            ^                             INTEGER          FillMList                {:}        -        -         "List of Member IDs for the members in this fill group"    -
typedef   ^                            ^                             ReKi             FillFSLoc                -          -        -         "The free-surface location (in Z) for this fill group"    m
typedef   ^                            ^                             CHARACTER(80)    FillDensChr              -          -        -         "String version of the Fill density [can be DEFAULT which sets the fill density to WtrDens]"   kg/m^3
typedef   ^                            ^                             ReKi             FillDens                 -          -        -         "Numerical fill density"    kg/m^3
typedef   ^                            ^                             LOGICAL          IsOpen                   -          -        -         "Whether the internal ballast is open to the outside through the open end of members buried in the seabed"  -
typedef   ^                            Morison_CoefDpthsCyl          ReKi             Dpth                     -          -        -         "Depth location for these depth-based hydrodynamic coefs"    m
typedef   ^                            ^                             ReKi             DpthCd                   -          -        -         "Depth-based drag coef"    -
typedef   ^                            ^                             ReKi             DpthCdMG                 -          -        -         "Depth-based drag coef for marine growth"    -
typedef   ^                            ^                             ReKi             DpthCa                   -          -        -         "Depth-based Ca"    -
typedef   ^                            ^                             ReKi             DpthCaMG                 -          -        -         "Depth-based Ca for marine growth"    -
typedef   ^                            ^                             ReKi             DpthCp                   -          -        -         "Depth-based Cp"    -
typedef   ^                            ^                             ReKi             DpthCpMG                 -          -        -         "Depth-based Cp for marine growth"    -
typedef   ^                            ^                             ReKi             DpthAxCd                 -          -        -         "Depth-based Axial Cd"    -
typedef   ^                            ^                             ReKi             DpthAxCdMG               -          -        -         "Depth-based Axial Cd for marine growth"    -
typedef   ^                            ^                             ReKi             DpthAxCa                 -          -        -         "Depth-based Axial Ca"    -
typedef   ^                            ^                             ReKi             DpthAxCaMG               -          -        -         "Depth-based Axial Ca for marine growth"    -
typedef   ^                            ^                             ReKi             DpthAxCp                 -          -        -         "Depth-based Axial Cp"    -
typedef   ^                            ^                             ReKi             DpthAxCpMG               -          -        -         "Depth-based Axial Cp for marine growth"    -
typedef   ^                            ^                             ReKi             DpthCb                   -          -        -         "Simple model hydrostatic/buoyancy load coefficient" - 
typedef   ^                            ^                             ReKi             DpthCbMg                 -          -        -         "Simple model hydrostatic/buoyancy load coefficient for marine growth" - 
typedef   ^                            ^                             LOGICAL          DpthMCF                  -          -        -         "Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model"  -
typedef   ^                            Morison_CoefDpthsRec          ReKi             Dpth                     -          -        -         "Depth location for these depth-based hydrodynamic coefs"    m
typedef   ^                            ^                             ReKi             DpthCdA                  -          -        -         "Depth-based drag coef"    -
typedef   ^                            ^                             ReKi             DpthCdAMG                -          -        -         "Depth-based drag coef for marine growth"    -
typedef   ^                            ^                             ReKi             DpthCdB                  -          -        -         "Depth-based drag coef"    -
typedef   ^                            ^                             ReKi             DpthCdBMG                -          -        -         "Depth-based drag coef for marine growth"    -
typedef   ^                            ^                             ReKi             DpthCaA                  -          -        -         "Depth-based Ca"    -
typedef   ^                            ^                             ReKi             DpthCaAMG                -          -        -         "Depth-based Ca for marine growth"    -
typedef   ^                            ^                             ReKi             DpthCaB                  -          -        -         "Depth-based Ca"    -
typedef   ^                            ^                             ReKi             DpthCaBMG                -          -        -         "Depth-based Ca for marine growth"    -
typedef   ^                            ^                             ReKi             DpthCp                   -          -        -         "Depth-based Cp"    -
typedef   ^                            ^                             ReKi             DpthCpMG                 -          -        -         "Depth-based Cp for marine growth"    -
typedef   ^                            ^                             ReKi             DpthAxCd                 -          -        -         "Depth-based Axial Cd"    -
typedef   ^                            ^                             ReKi             DpthAxCdMG               -          -        -         "Depth-based Axial Cd for marine growth"    -
typedef   ^                            ^                             ReKi             DpthAxCa                 -          -        -         "Depth-based Axial Ca"    -
typedef   ^                            ^                             ReKi             DpthAxCaMG               -          -        -         "Depth-based Axial Ca for marine growth"    -
typedef   ^                            ^                             ReKi             DpthAxCp                 -          -        -         "Depth-based Axial Cp"    -
typedef   ^                            ^                             ReKi             DpthAxCpMG               -          -        -         "Depth-based Axial Cp for marine growth"    -
typedef   ^                            ^                             ReKi             DpthCb                   -          -        -         "Simple model hydrostatic/buoyancy load coefficient" - 
typedef   ^                            ^                             ReKi             DpthCbMg                 -          -        -         "Simple model hydrostatic/buoyancy load coefficient for marine growth" - 
typedef   ^                            ^                             LOGICAL          DpthMCF                  -          -        -         "Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model"  -
typedef   ^                            Morison_AxialCoefType         INTEGER          AxCoefID                 -          -        -         "User-supplied integer ID for this set of Axial coefs"    -
typedef   ^                            ^                             ReKi             AxCd                     -          -        -         "Axial Cd"    -
typedef   ^                            ^                             ReKi             AxCa                     -          -        -         "Axial Ca"    -
typedef   ^                            ^                             ReKi             AxCp                     -          -        -         "Axial Cp"    -
typedef   ^                            ^                             ReKi             AxVnCOff                 -          -        -         "High-pass cut-off frequency for normal velocity when computing axial drag force" -
typedef   ^                            ^                             ReKi             AxFDLoFSc                -          -        -         "Scaling factor for low frequency axial drag force" -
typedef   ^                            ^                             IntKi            AxFDMod                  -          -        -         "Switch for the axial drag formulation {0: original formulation, 1: Away from member only}" -
#
typedef   ^                            Morison_MemberInputType       INTEGER          MemberID                 -          -        -         "User-supplied integer ID for this member"    -
typedef   ^                            ^                             INTEGER          NodeIndx                 {:}        -        -         "Index of each of the member's nodes in the master node list"    -
typedef   ^                            ^                             INTEGER          MJointID1                -          -        -         "Joint ID for start of member"    -
typedef   ^                            ^                             INTEGER          MJointID2                -          -        -         "Joint ID for end of member"    -
typedef   ^                            ^                             INTEGER          MJointID1Indx            -          -        -         "Index into the joint table for the start of this member"    -
typedef   ^                            ^                             INTEGER          MJointID2Indx            -          -        -         "Index into the joint table for the end of this member"    -
typedef   ^                            ^                             INTEGER          MPropSetID1              -          -        -         "Property set ID for the start of this member"    -
typedef   ^                            ^                             INTEGER          MPropSetID2              -          -        -         "Property set ID for the end of this member"    -
typedef   ^                            ^                             INTEGER          MPropSetID1Indx          -          -        -         "Index into the Property table for the start of this member"    -
typedef   ^                            ^                             INTEGER          MPropSetID2Indx          -          -        -         "Index into the Property table for the end of this member"    -
typedef   ^                            ^                             INTEGER          MSecGeom                 -          -        -         "Member cross section geometry. 1: Circular. 2: Rectangular" -
typedef   ^                            ^                             ReKi             MSpinOrient              -          -        -         "Member orientation in terms of rotation angle about the member axis" rad
typedef   ^                            ^                             ReKi             MDivSize                 -          -        -         "User-specified desired member discretization size for the final element"    m
typedef   ^                            ^                             INTEGER          MCoefMod                 -          -        -         "Which coef. model is being used for this member [1=simple, 2=depth-based, 3=member-based]"    -
typedef   ^                            ^                             INTEGER          MHstLMod                 -          -        -         "Which hydrostatic model is being used for this member [1=column-type, 2=ship-type]"    -
typedef   ^                            ^                             INTEGER          MmbrCoefIDIndx           -          -        -         "Index into the appropriate coefs table for this member's properties"    -
typedef   ^                            ^                             INTEGER          MmbrFilledIDIndx         -          -        -         "Index into the filled group table if this is a filled member"    -
typedef   ^                            ^                             LOGICAL          PropPot                  -          -        -         "Flag T/F for whether the member is modeled with potential flow theory"    -
typedef   ^                            ^                             LOGICAL          PropMCF                  -          -        -         "Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model"    -
typedef   ^                            ^                             INTEGER          NElements                -          -        -         "number of elements in this member"    -
typedef   ^                            ^                             ReKi             RefLength                -          -        -         "the reference total length for this member"    m
typedef   ^                            ^                             ReKi             dl                       -          -        -         "the reference element length for this member (may be less than MDivSize to achieve uniform element lengths)"    m
#
typedef   ^                            Morison_NodeType              INTEGER          JointIndx                -          -        -         "Joint index from the user joint table that this node corresponds to.  If the software created this node, index is set to -1"    -
typedef   ^                            ^                             ReKi             Position                 {3}        -        -         "Position of the node in global coordinates"    m
typedef   ^                            ^                             INTEGER          JointOvrlp               -          -        -         ""    -
typedef   ^                            ^                             INTEGER          JointAxIDIndx            -          -        -         ""    -
typedef   ^                            ^                             INTEGER          NConnections             -          -        -         "Number of elements connecting to this node"    -
typedef   ^                            ^                             INTEGER          ConnectionList           {50}       -        -         "Indices of all the members connected to this node (positive if end 1, negative if end 2)"    -
typedef   ^                            ^                             ReKi             JAxCd                    -          -        -         "Nodal lumped (joint) axial Cd"    -
typedef   ^                            ^                             ReKi             JAxCa                    -          -        -         "Nodal lumped (joint) axial Cp"    -
typedef   ^                            ^                             ReKi             JAxCp                    -          -        -         "Nodal lumped (joint) axial Ca"    -
typedef   ^                            ^                             ReKi             JAxVnCOff                -          -        -         "High-pass cut-off frequency for normal velocity when computing axial drag force" -
typedef   ^                            ^                             ReKi             JAxFDLoFSc               -          -        -         "Scaling factor for low frequency axial drag force" -
typedef   ^                            ^                             IntKi            JAxFDMod                 -          -        -         "Switch for the axial drag formulation {0: original formulation, 1: Away from member only}" -
typedef   ^                            ^                             ReKi             FillDensity              -          -        -         "Fill fluid density"   kg/m^3
typedef   ^                            ^                             ReKi             tMG                      -          -        -         "Nodal thickness with marine growth "    m
typedef   ^                            ^                             ReKi             MGdensity                -          -        -         "Nodal density of marine growth"    kg/m^3
#
typedef   ^                            Morison_MemberType            INTEGER        NodeIndx                 {:}        -        -         "Index of each of the member's nodes in the master node list"    -
typedef   ^                            ^                             INTEGER        MemberID                 -          -        -         "User-supplied integer ID for this member"    -
typedef   ^                            ^                             INTEGER        NElements                -          -        -         "number of elements in this member"    -
typedef   ^                            ^                             ReKi           RefLength                -          -        -         "the reference total length for this member"    m
typedef   ^                            ^                             ReKi           cosPhi_ref               -          -        -         "the reference cosine of the inclination angle of the member" -
typedef   ^                            ^                             ReKi           dl                       -          -        -         "the reference element length for this member (may be less than MDivSize to achieve uniform element lengths)"    m
typedef   ^                            ^                             ReKi           k                        {3}        -        -         "unit vector of the member's orientation (may be changed to per-element once additional flexibility is accounted for in HydroDyn)"    m
typedef   ^                            ^                             ReKi           kkt                      {3}{3}     -        -         "matrix of matmul(k_hat, transpose(k_hat)" -
typedef   ^                            ^                             ReKi           Ak                       {3}{3}     -        -         "matrix of I - kkt"   -
typedef   ^                            ^                             ReKi           x_hat                    {3}        -        -         "unit vector of rectangular member local x-axis aligned with Side A" -
typedef   ^                            ^                             ReKi           y_hat                    {3}        -        -         "unit vector of rectangular member local y-axis aligned with Side B" -
typedef   ^                            ^                             ReKi           R                        {:}        -        -         "outer member radius at each node"    m
typedef   ^                            ^                             ReKi           RMG                      {:}        -        -         "radius at each node including marine growth"   m
typedef   ^                            ^                             ReKi           RMGB                     {:}        -        -         "radius at each node including marine growth scaled by sqrt(Cb)"   m
typedef   ^                            ^                             ReKi           Rin                      {:}        -        -         "inner member radius at node, equivalent to radius of water ballast at this node if filled"    m
typedef   ^                            ^                             ReKi           Sa                       {:}        -        -         "outer member side A length at each node"    m
typedef   ^                            ^                             ReKi           SaMG                     {:}        -        -         "side A length with marine growth at each node"    m
typedef   ^                            ^                             ReKi           SaMGB                    {:}        -        -         "side A length with marine growth scaled by sqrt(Cb)"    m
typedef   ^                            ^                             ReKi           Sain                     {:}        -        -         "inner member side A length at node, equivalent to width of water ballast at this node if filled"    m
typedef   ^                            ^                             ReKi           Sb                       {:}        -        -         "outer member side B length at each node"    m
typedef   ^                            ^                             ReKi           SbMG                     {:}        -        -         "side B length with marine growth at each node"    m
typedef   ^                            ^                             ReKi           SbMGB                    {:}        -        -         "side B length with marine growth scaled by sqrt(Cb)"    m
typedef   ^                            ^                             ReKi           Sbin                     {:}        -        -         "inner member side B length at node, equivalent to width of water ballast at this node if filled"    m
typedef   ^                            ^                             ReKi           tMG                      {:}        -        -         "Nodal thickness with marine growth (of member at node location)"    m
typedef   ^                            ^                             ReKi           MGdensity                {:}        -        -         "Nodal density of marine growth"    kg/m^3
typedef   ^                            ^                             ReKi           dRdl_mg                  {:}        -        -         "taper dr/dl of outer surface including marine growth of each element"    -
typedef   ^                            ^                             ReKi           dRdl_mg_b                {:}        -        -         "taper dr/dl of outer surface including marine growth of each element with scaling of sqrt(Cb)"    -
typedef   ^                            ^                             ReKi           dRdl_in                  {:}        -        -         "taper dr/dl of interior surface of each element"    -
typedef   ^                            ^                             ReKi           dSadl_mg                 {:}        -        -         "taper dSa/dl of outer surface including marine growth of each element"    -
typedef   ^                            ^                             ReKi           dSadl_mg_b               {:}        -        -         "taper dSa/dl of outer surface including marine growth of each element with scaling of sqrt(Cb)"    -
typedef   ^                            ^                             ReKi           dSadl_in                 {:}        -        -         "taper dSa/dl of interior surface of each element"    -
typedef   ^                            ^                             ReKi           dSbdl_mg                 {:}        -        -         "taper dSb/dl of outer surface including marine growth of each element"    -
typedef   ^                            ^                             ReKi           dSbdl_mg_b               {:}        -        -         "taper dSb/dl of outer surface including marine growth of each element with scaling of sqrt(Cb)"    -
typedef   ^                            ^                             ReKi           dSbdl_in                 {:}        -        -         "taper dSb/dl of interior surface of each element"    -
typedef   ^                            ^                             ReKi           Vinner                   -          -        -         "Member volume without marine growth"   m^3
typedef   ^                            ^                             ReKi           Vouter                   -          -        -         "Member volume including marine growth"   m^3
typedef   ^                            ^                             ReKi           Vballast                 -          -        -         "Member ballast volume"   m^3
typedef   ^                            ^                             ReKi           Vsubmerged               -          -        -         "Submerged volume corresponding to portion of Member in the water"   m^3
typedef   ^                            ^                             IntKi          elem_fill                -          -        -         "Last (partially) filled element of the member" -
typedef   ^                            ^                             ReKi           l_fill                   -          -        -         "fill length along member axis from start node 1"   m
typedef   ^                            ^                             ReKi           h_fill                   -          -        -         "fill length of partially flooded element"   m
typedef   ^                            ^                             ReKi           z_overfill               -          -        -         "if member is fully filled, the head height of the fill pressure at the end node N+1. Zero if member is partially filled."   m
typedef   ^                            ^                             ReKi           h_floor                  -          -        -         "the distance from the node to the seabed along the member axis (negative value)"   m
typedef   ^                            ^                             INTEGER        i_floor                  -          -        -         "the number of the element that pierces the seabed (zero if the member doesn't pierce it)"   -
typedef   ^                            ^                             LOGICAL        doEndBuoyancy            -          -        -         "compute the end plate effect for the hightest node of this member" -
typedef   ^                            ^                             INTEGER        memfloodstatus           -          -        -         "Member-level flooded status for each elemen: 0 unflooded or fully below seabed, 2 partially flooded, 1 fully flooded "    -
typedef   ^                            ^                             INTEGER        floodstatus              {:}        -        -         "flooded status for each element: 0 unflooded or fully below seabed, 1 fully flooded, 2 partially flooded"    -
typedef   ^                            ^                             ReKi           alpha                    {:}        -        -         "relative volume centroid of each element including marine growth, from node i to node i+1"    -
typedef   ^                            ^                             ReKi           alpha_fb                 {:}        -        -         "relative volume centroid of each element's flooded ballast, from node i to node i+1"    -
typedef   ^                            ^                             ReKi           alpha_fb_star            {:}        -        -         "load distribution factor for each element after adjusting alpha_fb for node reference depths"    -
typedef   ^                            ^                             ReKi           Cd                       {:}        -        -         "Member Cd at each node"    -
typedef   ^                            ^                             ReKi           Ca                       {:}        -        -         "Member Ca at each node"    -
typedef   ^                            ^                             ReKi           CdA                      {:}        -        -         "Member Cd normal to side A at each node"    -
typedef   ^                            ^                             ReKi           CaA                      {:}        -        -         "Member Ca normal to side A at each node"    -
typedef   ^                            ^                             ReKi           CdB                      {:}        -        -         "Member Cd normal to side B at each node"    -
typedef   ^                            ^                             ReKi           CaB                      {:}        -        -         "Member Ca normal to side B at each node"    -
typedef   ^                            ^                             ReKi           Cp                       {:}        -        -         "Member Cp at each node"    -
typedef   ^                            ^                             ReKi           AxCd                     {:}        -        -         "Member axial Cd at each node"    -
typedef   ^                            ^                             ReKi           AxCa                     {:}        -        -         "Member axial Ca at each node"    -
typedef   ^                            ^                             ReKi           AxCp                     {:}        -        -         "Member axial Cp at each node"    -
typedef   ^                            ^                             ReKi           Cb                       {:}        -        -         "Member Cb at each node"    -
typedef   ^                            ^                             ReKi           m_fb_l                   {:}        -        -         "mass of flooded ballast in lower portion of each element"    kg
typedef   ^                            ^                             ReKi           m_fb_u                   {:}        -        -         "mass of flooded ballast in upper portion of each element"    kg
typedef   ^                            ^                             ReKi           h_cfb_l                  {:}        -        -         "distance to flooded ballast centroid from node point in lower portion of each element"    m
typedef   ^                            ^                             ReKi           h_cfb_u                  {:}        -        -         "distance to flooded ballast centroid from node point in upper portion of each element"    m
typedef   ^                            ^                             ReKi           I_lfb_l                  {:}        -        -         "axial moment of inertia of flooded ballast in lower portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_lfb_u                  {:}        -        -         "axial moment of inertia of flooded ballast in upper portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_rfb_l                  {:}        -        -         "radial moment of inertia of flooded ballast in lower portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_rfb_u                  {:}        -        -         "radial moment of inertia of flooded ballast in upper portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_xfb_l                  {:}        -        -         "element local x-moment of inertia of flooded ballast in lower portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_xfb_u                  {:}        -        -         "element local x-moment of inertia of flooded ballast in upper portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_yfb_l                  {:}        -        -         "element local y-moment of inertia of flooded ballast in lower portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_yfb_u                  {:}        -        -         "element local y-moment of inertia of flooded ballast in upper portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           m_mg_l                   {:}        -        -         "mass of marine growth in lower portion of each element"    kg
typedef   ^                            ^                             ReKi           m_mg_u                   {:}        -        -         "mass of marine growth in upper portion of each element"    kg
typedef   ^                            ^                             ReKi           h_cmg_l                  {:}        -        -         "distance to marine growth centroid from node point in lower portion of each element"    m
typedef   ^                            ^                             ReKi           h_cmg_u                  {:}        -        -         "distance to marine growth centroid from node point in upper portion of each element"    m
typedef   ^                            ^                             ReKi           I_lmg_l                  {:}        -        -         "axial moment of inertia of marine growth in lower portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_lmg_u                  {:}        -        -         "axial moment of inertia of marine growth in upper portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_rmg_l                  {:}        -        -         "radial moment of inertia of marine growth in lower portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_rmg_u                  {:}        -        -         "radial moment of inertia of flooded ballast in upper portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_xmg_l                  {:}        -        -         "element local x-moment of inertia of marine growth in lower portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_xmg_u                  {:}        -        -         "element local x-moment of inertia of marine growth in upper portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_ymg_l                  {:}        -        -         "element local y-moment of inertia of marine growth in lower portion of each element"    kg-m^2
typedef   ^                            ^                             ReKi           I_ymg_u                  {:}        -        -         "element local y-moment of inertia of marine growth in upper portion of each element"    kg-m^2
#typedef   ^                            ^                             ReKi           Cfl_fb                   {:}        -        -         "axial force constant due to flooded ballast, for each element"    N
#typedef   ^                            ^                             ReKi           Cfr_fb                   {:}        -        -         "radial force constant due to flooded ballast, for each element"    N
#typedef   ^                            ^                             ReKi           Cfx_fb                   {:}        -        -         "element local x-force constant due to flooded ballast, for each element"    N
#typedef   ^                            ^                             ReKi           Cfy_fb                   {:}        -        -         "element local y-force constant due to flooded ballast, for each element"    N
#typedef   ^                            ^                             ReKi           CM0_fb                   {:}        -        -         "moment constant due to flooded ballast, for each element about lower node"    Nm
#typedef   ^                            ^                             ReKi           NodeWBallast             {:}        -        -         "Internal ballast weight associated with each node" N
#typedef   ^                            ^                             ReKi           NodeWhcBallast           {:}        -        -         "Internal ballast weight associated with each node times distance from node to ballast CG" Nm
typedef   ^                            ^                             ReKi           MGvolume                 -          -        -         "Volume of marine growth material for this member/element"    m^3
typedef   ^                            ^                             INTEGER        MSecGeom                 -          -        -         "Member cross section geometry. 1: Circular. 2: Rectangular" -
typedef   ^                            ^                             ReKi           MSpinOrient              -          -        -         "Member orientation in terms of rotation angle about the member axis" rad
typedef   ^                            ^                             ReKi           MDivSize                 -          -        -         "User-requested final element length (actual length may vary from this request)"   m
typedef   ^                            ^                             INTEGER        MCoefMod                 -          -        -         "Coefs model for member: 1 = simple, 2 =depth, 3 = member-based "    -
typedef   ^                            ^                             INTEGER        MmbrCoefIDIndx           -          -        -         "If MCoefMod=3, then this is the index for the member's coefs in the master Member Coefs Table"    -
typedef   ^                            ^                             INTEGER        MmbrFilledIDIndx         -          -        -         "If this member is part of a fill group, this is the index into the master fill group table, if not = -1"    -
typedef   ^                            ^                             INTEGER        MHstLMod                 -          -        -         "Hydrostatic model for member [1=column-type, 2=ship-type]"    -
typedef   ^                            ^                             ReKi           FillFSLoc                -          -        -         "Z-location of the filled free-surface"    m
typedef   ^                            ^                             ReKi           FillDens                 -          -        -         "Filled fluid density"    kg/m^3
typedef   ^                            ^                             LOGICAL        PropPot                  -          -        -         "Is this element/member modeled with potential flow theory T/F"    -
typedef   ^                            ^                             LOGICAL        PropMCF                  -          -        -         "Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model"    -
typedef   ^                            ^                             LOGICAL        Flipped                  -          -        -         "Was the member flipped in a reordering event?  Need to know this to get the correct normal vector to the ends" -
#
typedef   ^                            Morison_MemberLoads           ReKi                     F_D                           {:}{:}         -         -         "Member-based (side-effects) Nodal viscous drag loads at time t"   -
typedef   ^                            ^                             ReKi                     F_I                           {:}{:}         -         -         "Member-based (side-effects) Nodal inertial loads at time t"   -
typedef   ^                            ^                             ReKi                     F_A                           {:}{:}         -         -         "Member-based (side-effects) Nodal added mass loads at time t"   -
typedef   ^                            ^                             ReKi                     F_B                           {:}{:}         -         -         "Member-based (side-effects) Nodal buoyancy loads"   -
typedef   ^                            ^                             ReKi                     F_BF                          {:}{:}         -         -         "Member-based (side-effects) Nodal flooded ballast weight/buoyancy loads"   -
typedef   ^                            ^                             ReKi                     F_If                          {:}{:}         -         -         "Member-based (side-effects) Nodal flooded ballast inertia loads"   -
typedef   ^                            ^                             ReKi                     F_WMG                         {:}{:}         -         -         "Member-based (side-effects) Nodal marine growth weight loads"   -
typedef   ^                            ^                             ReKi                     F_IMG                         {:}{:}         -         -         "Member-based (side-effects) Nodal marine growth inertia loads"   -
typedef   ^                            ^                             ReKi                     FV                            {:}{:}         -         -         "Fluid velocity at line element node at time t, which may not correspond to the WaveTime array of times"   -
typedef   ^                            ^                             ReKi                     FA                            {:}{:}         -         -         "Fluid acceleration at line element node at time t, which may not correspond to the WaveTime array of times"   -
typedef   ^                            ^                             ReKi                     F_DP                          {:}{:}         -         -         "Lumped dynamic pressure loads at time t, which may not correspond to the WaveTime array of times"   -
#
typedef   ^                            Morison_CoefMembersCyl        INTEGER          MemberID                 -          -        -         "User-specified integer id for the Member-based coefs"    -
typedef   ^                            ^                             ReKi             MemberCd1                -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCd2                -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCdMG1              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCdMG2              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCa1                -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCa2                -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCaMG1              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCaMG2              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCp1                -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCp2                -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCpMG1              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCpMG2              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCd1              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCd2              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCdMG1            -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCdMG2            -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCa1              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCa2              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCaMG1            -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCaMG2            -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCp1              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCp2              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCpMG1            -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCpMG2            -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCb1                -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCb2                -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCbMG1              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCbMG2              -          -        -         "Cylindrical member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             LOGICAL          MemberMCF                -          -        -         "Flag T/F for whether the cylindrical member is modeled with the MacCamy-Fuchs diffraction model"  -
typedef   ^                            Morison_CoefMembersRec        INTEGER          MemberID                 -          -        -         "User-specified integer id for the Member-based coefs"    -
typedef   ^                            ^                             ReKi             MemberCdA1               -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCdA2               -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCdAMG1             -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCdAMG2             -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCdB1               -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCdB2               -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCdBMG1             -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCdBMG2             -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCaA1               -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCaA2               -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCaAMG1             -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCaAMG2             -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCaB1               -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCaB2               -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCaBMG1             -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCaBMG2             -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCp1                -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCp2                -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCpMG1              -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCpMG2              -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCd1              -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCd2              -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCdMG1            -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCdMG2            -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCa1              -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCa2              -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCaMG1            -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCaMG2            -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCp1              -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCp2              -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCpMG1            -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberAxCpMG2            -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCb1                -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCb2                -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCbMG1              -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             ReKi             MemberCbMG2              -          -        -         "Rectangular member-based coefs, see above descriptions for meanings (1 = start, 2=end)"    -
typedef   ^                            ^                             LOGICAL          MemberMCF                -          -        -         "Flag T/F for whether the rectangular member is modeled with the MacCamy-Fuchs diffraction model"  -
typedef   ^                            Morison_MGDepthsType          ReKi             MGDpth                   -          -        -         "Marine growth depth location for these properties" m
typedef   ^                            ^                             ReKi             MGThck                   -          -        -         "Marine growth thickness"    m
typedef   ^                            ^                             ReKi             MGDens                   -          -        -         "Marine growth density"    kg/m^3
typedef   ^                            Morison_MOutput               INTEGER          MemberID                 -          -        -         "Member ID for requested output"    -
typedef   ^                            Morison_MOutput               INTEGER          NOutLoc                  -          -        -         "The number of requested output locations"    -
typedef   ^                            Morison_MOutput               ReKi             NodeLocs                 {:}        -        -         "Normalized locations along user-specified member for the outputs"    -
typedef   ^                            Morison_MOutput               INTEGER          MemberIDIndx             -          -        -         "Index for member in the master list"    -
typedef   ^                            Morison_MOutput               INTEGER          MeshIndx1                {:}        -        -         "Index of node in Mesh for the start of the member element"    -
typedef   ^                            Morison_MOutput               INTEGER          MeshIndx2                {:}        -        -         "Index of node in Mesh for the end of the member element"    -
typedef   ^                            Morison_MOutput               INTEGER          MemberIndx1              {:}        -        -         "Index of Member nodes for the start of the member element"    -
typedef   ^                            Morison_MOutput               INTEGER          MemberIndx2              {:}        -        -         "Index of Member nodes for the end of the member element"    -
typedef   ^                            Morison_MOutput               ReKi             s                        {:}        -        -         "Linear interpolation factor between node1 and node2 for the output location"    -
typedef   ^                            Morison_JOutput               INTEGER          JointID                  -          -        -         "Joint ID for the requested output"    -
typedef   ^                            ^                             INTEGER          JointIDIndx              -          -        -         "Joint index in the master list"    -
# ..... Initialization data .......................................................................................................
# Define inputs that the initialization routine may need here:
#   e.g.,  the name of the input file,  the file root name,etc.
#
typedef   ^                            InitInputType                 ReKi                     Gravity                          -          -        -         "Gravity (scalar, positive-valued)"    m/s^2
typedef   ^                            ^                             INTEGER                  WaveDisp                         -          -        -         "Method of computing Wave Kinematics. (0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) " -
typedef   ^                            ^                             INTEGER                  AMMod                            -          -        -         "Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 1: Up to the instantaneous free surface) [overwrite to 0 when WaveMod = 0 or 6 or when WaveStMod = 0 in SeaState]" -
typedef   ^                            ^                             INTEGER                  NJoints                          -          -        -         "Number of user-specified joints"    -
typedef   ^                            ^                             INTEGER                  NNodes                           -          -        -         "Total number of nodes in the final software model"    -
typedef   ^                            ^                             Morison_JointType        InpJoints                        {:}        -        -         "Array of user-specified joints"    -
typedef   ^                            ^                             Morison_NodeType         Nodes                            {:}        -        -         "Array of simulation node (some correspond to user-specified joints, others are created by software)"    -
typedef   ^                            ^                             INTEGER                  NAxCoefs                         -          -        -         "Number of axial Coefs entries in input file table"    -
typedef   ^                            ^                             Morison_AxialCoefType    AxialCoefs                       {:}        -        -         "List of axial coefs"    -
typedef   ^                            ^                             INTEGER                  NPropSetsCyl                     -          -        -         "Number of cylindrical member property sets"    -
typedef   ^                            ^                          Morison_MemberPropTypeCyl   MPropSetsCyl                     {:}        -        -         "List of cylindrical member property sets"    -
typedef   ^                            ^                             INTEGER                  NPropSetsRec                     -          -        -         "Number of rectangular member property sets"    -
typedef   ^                            ^                          Morison_MemberPropTypeRec   MPropSetsRec                     {:}        -        -         "List of rectangular member property sets"    -
typedef   ^                            ^                             ReKi                     SimplCd                          -          -        -         "Simple model drag coef for cylindrical members"    -
typedef   ^                            ^                             ReKi                     SimplCdMG                        -          -        -         "Simple model drag coef for cylindrical members with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplCa                          -          -        -         "Simple model Ca for cylindrical members"    -
typedef   ^                            ^                             ReKi                     SimplCaMG                        -          -        -         "Simple model Ca for cylindrical members with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplCp                          -          -        -         "Simple model Cp for cylindrical members"    -
typedef   ^                            ^                             ReKi                     SimplCpMG                        -          -        -         "Simple model Cp for cylindrical members with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplAxCd                        -          -        -         "Simple model Axial Cd for cylindrical members"    -
typedef   ^                            ^                             ReKi                     SimplAxCdMG                      -          -        -         "Simple model Axial Cd for cylindrical members with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplAxCa                        -          -        -         "Simple model Axial Ca for cylindrical members"    -
typedef   ^                            ^                             ReKi                     SimplAxCaMG                      -          -        -         "Simple model Axial Ca for cylindrical members with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplAxCp                        -          -        -         "Simple model Axial Cp for cylindrical members"    -
typedef   ^                            ^                             ReKi                     SimplAxCpMG                      -          -        -         "Simple model Axial Cp for cylindrical members with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplCb                          -          -        -         "Simple model hydrostatic/buoyancy load coefficient for cylindrical members" - 
typedef   ^                            ^                             ReKi                     SimplCbMg                        -          -        -         "Simple model hydrostatic/buoyancy load coefficient for cylindrical members with marine growth" - 
typedef   ^                            ^                             LOGICAL                  SimplMCF                         -          -        -         "Flag T/F for whether the cylindrical member is modeled with the MacCamy-Fuchs diffraction model"  -
typedef   ^                            ^                             ReKi                     SimplRecCdA                      -          -        -         "Simple model drag coef for rectangular members normal to side A"    -
typedef   ^                            ^                             ReKi                     SimplRecCdAMG                    -          -        -         "Simple model drag coef for rectangular members normal to side A with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplRecCdB                      -          -        -         "Simple model drag coef for rectangular members normal to side B"    -
typedef   ^                            ^                             ReKi                     SimplRecCdBMG                    -          -        -         "Simple model drag coef for rectangular members normal to side B with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplRecCaA                      -          -        -         "Simple model Ca for rectangular members normal to side A"    -
typedef   ^                            ^                             ReKi                     SimplRecCaAMG                    -          -        -         "Simple model Ca for rectangular members normal to side A with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplRecCaB                      -          -        -         "Simple model Ca for rectangular members normal to side B"    -
typedef   ^                            ^                             ReKi                     SimplRecCaBMG                    -          -        -         "Simple model Ca for rectangular members normal to side B with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplRecCp                       -          -        -         "Simple model Cp for rectangular members"    -
typedef   ^                            ^                             ReKi                     SimplRecCpMG                     -          -        -         "Simple model Cp for rectangular members with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplRecAxCd                     -          -        -         "Simple model Axial Cd for rectangular members"    -
typedef   ^                            ^                             ReKi                     SimplRecAxCdMG                   -          -        -         "Simple model Axial Cd for rectangular members with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplRecAxCa                     -          -        -         "Simple model Axial Ca for rectangular members"    -
typedef   ^                            ^                             ReKi                     SimplRecAxCaMG                   -          -        -         "Simple model Axial Ca for rectangular members with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplRecAxCp                     -          -        -         "Simple model Axial Cp for rectangular members"    -
typedef   ^                            ^                             ReKi                     SimplRecAxCpMG                   -          -        -         "Simple model Axial Cp for rectangular members with marine growth"    -
typedef   ^                            ^                             ReKi                     SimplRecCb                       -          -        -         "Simple model hydrostatic/buoyancy load coefficient for rectangular members" - 
typedef   ^                            ^                             ReKi                     SimplRecCbMg                     -          -        -         "Simple model hydrostatic/buoyancy load coefficient for rectangular members with marine growth" - 
typedef   ^                            ^                             LOGICAL                  SimplRecMCF                      -          -        -         "Flag T/F for whether the rectangular member is modeled with the MacCamy-Fuchs diffraction model"  -
typedef   ^                            ^                             INTEGER                  NCoefDpthCyl                     -          -        -         ""    -
typedef   ^                            ^                             Morison_CoefDpthsCyl     CoefDpthsCyl                     {:}        -        -         ""    -
typedef   ^                            ^                             INTEGER                  NCoefDpthRec                     -          -        -         ""    -
typedef   ^                            ^                             Morison_CoefDpthsRec     CoefDpthsRec                     {:}        -        -         ""    -
typedef   ^                            ^                             INTEGER                  NCoefMembersCyl                  -          -        -         ""    -
typedef   ^                            ^                             Morison_CoefMembersCyl   CoefMembersCyl                   {:}        -        -         ""    -
typedef   ^                            ^                             INTEGER                  NCoefMembersRec                  -          -        -         ""    -
typedef   ^                            ^                             Morison_CoefMembersRec   CoefMembersRec                   {:}        -        -         ""    -
typedef   ^                            ^                             INTEGER                  NMembers                         -          -        -         "Number of user-specified members in the input file"    -
typedef   ^                            ^                             Morison_MemberInputType  InpMembers                       {:}        -        -         "Array of user-specified members"    -
typedef   ^                            ^                             INTEGER                  NFillGroups                      -          -        -         ""    -
typedef   ^                            ^                             Morison_FilledGroupType  FilledGroups                     {:}        -        -         ""    -
typedef   ^                            ^                             INTEGER                  NMGDepths                        -          -        -         ""    -
typedef   ^                            ^                             Morison_MGDepthsType     MGDepths                         {:}        -        -         ""    -
typedef   ^                            ^                             ReKi                     MGTop                            -          -        -         ""    -
typedef   ^                            ^                             ReKi                     MGBottom                         -          -        -         ""    -
typedef   ^                            ^                             INTEGER                  NMOutputs                        -          -        -         ""    -
typedef   ^                            ^                             Morison_MOutput          MOutLst                          {:}        -        -         ""    -
typedef   ^                            ^                             INTEGER                  NJOutputs                        -          -        -         ""    -
typedef   ^                            ^                             Morison_JOutput          JOutLst                          {:}        -        -         ""    -
typedef   ^                            ^                             CHARACTER(ChanLen)       OutList                          {:}        -        -         "This list size needs to be the maximum # of possible outputs because of the use of ReadAry(). Use MaxMrsnOutputs"    -
typedef   ^                            ^                             INTEGER                  NumOuts                          -          -        -         ""    -
typedef   ^                            ^                             INTEGER                  UnSum                            -          -        -         ""    -
typedef   ^                            ^                             SeaSt_WaveFieldType     *WaveField                        -          -        -         "Pointer to SeaState wave field" -
typedef   ^                            ^                             logical                  VisMeshes                        -       .false.     -         "Output visualization meshes" -
typedef   ^                            ^                             INTEGER                  PtfmYMod                         -          -        -         "Large yaw model" -
#
#
# Define outputs from the initialization routine here:
#
typedef   ^                            InitOutputType                SiKi                      MorisonVisRad                    {:}        -        -         "radius of node (for FAST visualization)" (m)
typedef   ^                            InitOutputType                CHARACTER(ChanLen)        WriteOutputHdr                   {:}        -        -         "User-requested Output channel names"    -
typedef   ^                            ^                             CHARACTER(ChanLen)        WriteOutputUnt                   {:}        -        -         ""    -
#
#
# ..... States ....................................................................................................................
# Define continuous (differentiable) states here:
#
typedef   ^                            ContinuousStateType           SiKi                     DummyContState           -          -        -        "Remove this variable if you have continuous states"        -
#
#
# Define discrete (nondifferentiable) states here:
#
typedef   ^                            DiscreteStateType             ReKi                     V_rel_n_FiltStat               {:}      -         -         "State of the high-pass filter for the joint relative normal velocity" m/s
#
#
# Define constraint states here:
#
typedef   ^                            ConstraintStateType           SiKi                     DummyConstrState         -         -         -         "Remove this variable if you have constraint states"        -
#
#
# Define any other states, including integer or logical states here:
typedef   ^                            OtherStateType                IntKi                     DummyOtherState - - - "Remove this variable if you have other states" -

# ..... Misc/Optimization variables.................................................................................................
# Define any data that are used only for efficiency purposes (these variables are not associated with time):
#   e.g. indices for searching in an array, large arrays that are local variables in any routine called multiple times, etc.
typedef   ^                            MiscVarType                   ReKi                     DispNodePosHdn                {:}{:}         -         -         "Instantaneous displaced position of the line element nodes at time t for hydrodynamic load calculation"   (m)
typedef   ^                            ^                             ReKi                     DispNodePosHst                {:}{:}         -         -         "Instantaneous displaced position of the line element nodes at time t for hydrostatic and other load calcuation"   (m)
typedef   ^                            ^                             ReKi                     FV                            {:}{:}         -         -         "Fluid velocity at line element node at time t, which may not correspond to the WaveTime array of times"   -
typedef   ^                            ^                             ReKi                     FA                            {:}{:}         -         -         "Fluid acceleration at line element node at time t, which may not correspond to the WaveTime array of times"   -
typedef   ^                            ^                             ReKi                     FAMCF                         {:}{:}         -         -         "Fluid acceleration at line element node at time t, which may not correspond to the WaveTime array of times"   -
typedef   ^                            ^                             ReKi                     FDynP                         {:}            -         -         "Fluid dynamic pressure at line element node at time t, which may not correspond to the WaveTime array of times"   -
typedef   ^                            ^                             SiKi                     WaveElev                      {:}            -         -         "Total wave elevation"   m
typedef   ^                            ^                             SiKi                     WaveElev1                     {:}            -         -         "First order wave elevation"        m
typedef   ^                            ^                             SiKi                     WaveElev2                     {:}            -         -         "Second order wave elevation"        m
typedef   ^                            ^                             ReKi                     vrel                          {:}{:}         -         -         "velocity of structural node relative to the water" m/s^2
typedef   ^                            ^                             INTEGER                  nodeInWater                   {:}            -         -          "Logical flag indicating if the node at the given time step is in the water, and hence needs to have hydrodynamic forces calculated" -
typedef   ^                            ^                             Morison_MemberLoads      memberLoads                   {:}            -         -          "Array (NMembers long) of member-based side-effects load contributions" -
typedef   ^                            ^                             ReKi                     F_B_End                       {:}{:}	   -         -         ""        -
typedef   ^                            ^                             ReKi                     F_D_End                       {:}{:}         -         -         "Lumped viscous drag loads at time t, which may not correspond to the WaveTime array of times"   -
typedef   ^                            ^                             ReKi                     F_I_End                       {:}{:}         -         -         "Lumped intertia loads at time t, which may not correspond to the WaveTime array of times"   -
typedef   ^                            ^                             ReKi                     F_IMG_End                     {:}{:}         -         -         "Joint marine growth intertia loads at time t, which may not correspond to the WaveTime array of times"   -
typedef   ^                            ^                             ReKi                     F_A_End                       {:}{:}         -         -         "Lumped added mass loads at time t, which may not correspond to the WaveTime array of times"   -
typedef   ^                            ^                             ReKi                     F_BF_End                      {:}{:}         -         -         ""        -
typedef   ^                            ^                             ReKi                     V_rel_n                       {:}            -         -         "Normal relative flow velocity at joints"        m/s
typedef   ^                            ^                             ReKi                     V_rel_n_HiPass                {:}            -         -         "High-pass filtered normal relative flow velocity at joints"   m/s
typedef   ^                            ^                             ReKi                     zFillGroup                    {:}            -         -         "Instantaneous highest point of each filled group"  m
typedef   ^                            ^                             MeshMapType              VisMeshMap                      -            -         -         "Mesh mapping for visualization mesh" -
typedef   ^                            ^                          SeaSt_WaveField_MiscVarType WaveField_m                     -            -         -         "misc var information from the SeaState Interpolation module"   -

# ..... Parameters ................................................................................................................
# Define parameters here:
# Time step for integration of continuous states (if a fixed-step integrator is used) and update of discrete states:
#
typedef   ^                            ParameterType                 DbKi                     DT                            -          -        -         "Time step for continuous state integration & discrete state update"  (sec)
typedef   ^                            ^                             ReKi                     Gravity                       -          -        -         "Gravity (scalar, positive-valued)"    m/s^2
typedef   ^                            ^                             INTEGER                  WaveDisp                      -          -        -         "Method of computing Wave Kinematics. (0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) " -
typedef   ^                            ^                             INTEGER                  AMMod                         -          -        -         "Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 1: Up to the instantaneous free surface) [overwrite to 0 when WaveMod = 0 or 6 or when WaveStMod = 0 in SeaState]" -
typedef   ^                            ^                             INTEGER                  NMembers                      -          -        -         "number of members"        -
typedef   ^                            ^                             Morison_MemberType       Members                       {:}        -        -         "Array of Morison members used during simulation"    -
typedef   ^                            ^                             INTEGER                  NNodes                        -          -        -         ""        -
typedef   ^                            ^                             INTEGER                  NJoints                       -          -        -         "Number of user-specified joints"    -
typedef   ^                            ^                             ReKi                     I_MG_End                      {:}{:}{:}  -        -         "Inertial matrix associated with marine growth mass at joint"        -
typedef   ^                            ^                             ReKi                     An_End                        {:}{:}     -        -         "directional area vector of each joint"        m^2
typedef   ^                            ^                             ReKi                     DragConst_End                 {:}        -        -         ""        -
typedef   ^                            ^                             ReKi                     VRelNFiltConst                {:}        -        -         ""        -
typedef   ^                            ^                             IntKi                    DragMod_End                   {:}        -        -         ""        -
typedef   ^                            ^                             ReKi                     DragLoFSc_End                 {:}        -        -         ""        -
typedef   ^                            ^                             ReKi                     F_WMG_End                     {:}{:}     -        -         "Joint marine growth weight loads, constant for all t"   N
typedef   ^                            ^                             ReKi                     DP_Const_End                  {:}{:}     -        -         "Constant part of Joint dynamic pressure term"   N
typedef   ^                            ^                             ReKi                     Mass_MG_End                   {:}        -        -         "Joint marine growth mass"   kg
typedef   ^                            ^                             ReKi                     AM_End                        {:}{:}{:}  -        -         "3x3 Joint added mass matrix, constant for all t"   N
typedef   ^                            ^                             INTEGER                  NMOutputs                     -          -        -         ""        -
typedef   ^                            ^                             Morison_MOutput          MOutLst                       {:}        -        -         ""        -
typedef   ^                            ^                             INTEGER                  NJOutputs                     -          -        -         ""        -
typedef   ^                            ^                             Morison_JOutput          JOutLst                       {:}        -        -         ""        -
typedef   ^                            ^                             OutParmType              OutParam                      {:}        -        -         ""        -
typedef   ^                            ^                             INTEGER                  NumOuts                       -          -        -         ""        -
typedef   ^                            ^                             SeaSt_WaveFieldType     *WaveField                     -          -        -         "SeaState wave field" -
typedef   ^                            ^                             logical                  VisMeshes                     -       .false.     -         "Output visualization meshes" -
typedef   ^                            ^                             INTEGER                  PtfmYMod                      -          -        -         "Large yaw model" -
typedef   ^                            ^                             INTEGER                  NFillGroups                   -          -        -         ""        -
typedef   ^                            ^                             Morison_FilledGroupType  FilledGroups                  {:}        -        -         ""        -
#
#
# ..... Inputs ....................................................................................................................
# Define inputs that are contained on the mesh here:
#
typedef   ^                            InputType                     MeshType                 Mesh                          -          -        -         "Kinematics of each node input mesh" -
typedef   ^                            ^                             ReKi                     PtfmRefY                      -          -        -         "Reference platform yaw offset" (rad)
#
#
# ..... Outputs ...................................................................................................................
# Define outputs that are contained on the mesh here:
typedef   ^                            OutputType                   MeshType                 Mesh                           -          -        -         "Loads on each node output mesh" -
typedef   ^                            ^                            MeshType                 VisMesh                        -          -        -         "Line mesh for visualization" -
typedef   ^                            ^                            ReKi                     WriteOutput                    {:}        -        -         ""  -
