Offshore crane

API Spec 2C and EN 13852-1 are two well known standards that offer guidance in developing minimum offshore pedestal-mounted crane requirements. They represent Gulf of Mexico and the North Sea respectively.

API Specification considers Gulf of Mexico to be of “very mild sea and wind conditions” (§5.4.4 Legacy Dynamic Method). Environmental conditions in the Gulf of Mexico are indeed mild when hurricanes are excluded. Also, given the unpredictable variation in hurricane strengths and hence the impracticality of designing for such events, offshore facilities in the Gulf of Mexico are operated as manned-evacuated. In other words, operations (including crane operations) are suspended and the facility evacuated in the event of an impending hurricane in the facility’s path.

When a sizable number of assets are validated by their use, standards developed primarily for a specific domain find acceptance internationally. However, liberal use is never without a catch, as standards often carry certain domain specific assumptions and criteria that may need revisiting when considered for a domain outside the primary for which it is written and valid for.

Take for instance the primary purpose of offshore cranes mounted on pedestals on offshore platforms — fixed or floating. They lift cargo and supplies off a floating vessel, which in turn are influenced by incoming waves.

Offboard lift, as API Spec 2C explains, is “the hoisting velocity at the elevation where lift is initiated (i.e., supply boat deck level) shall be fast enough to avoid re-contact after the load is lifted.”

Offboard lift using API Spec 2C:

Minimum required steady hoisting velocity (in ft/s) for offboard lift as per §5.4.5.2, API Spec 2C:

For Hsig ≤ 6ft:

$$ V_{hmin} = 0.033 + 0.098 \cdot H_{sig} $$

For Hsig > 6ft:

$$ V_{hmin} = 0.067 \cdot (H_{sig} + 3.3) $$

Offboard lift using EN 13852-1:

Minimum hoisting and lowering velocity (in m/s) for lifting from/to a supply vessel in EN 13852-1 (§B.4) is given as follows:

$$ V_H = K_H \cdot \sqrt{V_D^2 + V_C^2} $$

where,

$$ V_D = \left(\frac{6.0 \cdot H_{sig}}{H_{sig} + 8.0} \right) $$

For crane on bottom-founded structures, there is no movement of the crane base, and therefore, VC = 0.

I wrote a little code to compare the two standards over the weekend (see below) to produce the following graph.

Crane (offboard) hoisting velocity
Figure 1: Comparing minimum hoisting velocities between API Spec 2C and EN 13852-1

A couple of observations:

  1. API prescription for Vhmin covers supply vessels, while EN offers two additional options, viz., barge, and sea surface. (Graphs for barge or sea surface are not shown in the above, but can be separately generated, if desired, using the code I’ve shared.)
  2. EN is explicit about reeving efficiency — note the reduced velocity requirements in the case of multi-fall reeving. Looking at the two graphs above, i.e., for API and for EN, the multi-part reeving option appears to be somewhat close to API prescription in terms of Vhmin. It could be that API considers multi-part reeving efficiency in its prescription, even though it does not mention in §5.4.5.2.

Now to the crux of the matter on whether or not a standard’s recipe enables safe-clearing of the package lifted before the next wave crest appears. The package travel can be calculated, for a given significant wave height (Hsig) and corresponding zero crossing period (Tz), as follows:

$$ h = V_{hmin} \cdot T_z $$

Testing API Spec 2C recipe for the Australian Northwest Shelf environment:

Hsig Tz Vhmin h
1.4m 4.9s 0.14m/s 0.69m < Hsig (Not Good)
2.7m 5.7s 0.25m/s 1.43m < Hsig (Not Good)
3.6m 6.4s 1.92m/s 1.92m < Hsig (Not Good)

From the table above, clearly it does not work. In other words, a lifted package experiences re-contact by the next wave crest before clearing safely.

Now let’s test this for EN 13852-1 again for the Australian Northwest Shelf environment:

Hsig Tz Vhmin h
1.4m 4.9s 0.44m/s 2.16m > Hsig (OK)
2.7m 5.7s 0.75m/s 4.28m > Hsig (OK)
3.6m 6.4s 0.92m/s 5.89m > Hsig (OK)

From above, it can be seen that the recipe offered by EN 13852-1 clears the package comfortably before the next wave crest arrives. So EN’s recipe works for NWS where API’s does not.

Code for generating Figure 1:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
vhmin.py: Offshore crane: min. offboard hoisting velocity
2016 ckunte
"""
import numpy as np
import matplotlib.pyplot as plt

plt.style.use('classic')

# x, x1, x2: significant wave height ranges
# -- API Spec 2C 7ed
x1 = np.arange(0.0, 1.83, 0.001)
x2 = np.arange(1.83, 3.0, 0.001)
# -- EN 13852-1:2013 --
x = np.arange(0.0, 3.0, 0.001)

# Plot labels
lbl = [
    "EN: From supply vessel (RC, SFR)",
    "EN: From supply vessel (RC, MFR)",
    "API: From supply vessel",
    "API v. EN for offboard lift off supply vessel"
]

def api():
    # -- API Spec. 2C 7th Ed, §5.4.5.2  --
    cf = 0.3048 # ft to m conversion factor
    Vhmin_api1 = (0.033 * cf) + 0.098 * x1
    Vhmin_api2 = 0.067 * (x2 + (3.3 * cf))    
    # -- API --
    plt.plot(x1, Vhmin_api1, color='black', label=lbl[2], \
        linewidth=2)
    plt.plot(x2, Vhmin_api2, color='black', linewidth=2)
    # ---
    pass

def en():
    # Table B.2: Load supporting deck velocity, Vd (m/s)
    Vd = [0, (3.2 * x / (x + 13.5)), (4.0 * x / (x + 7.0)), \
    (6.0 * x / (x + 8.0)), (5.3 * x / (x + 5.5))]
    # Table B.3: Crane boom tip velocity, Vc (m/s)
    Vc = [0, (0.25 * x), (0.5 * x)]
    # Table B.4: Velocity factor K_H
    # K_H structure: [NL & SFR, RC & SFR, NL & MFR, RC & MFR]
    K_H = [0.65, 0.50, 0.40, 0.28]
    # Hook velocity 
    # Crane on bottom supported structure
    ## Lifting to/from: Supply vessel 
    ## (At rated capacity, Single fall reeving)
    VH_f_sv_rc_sfr = K_H[1] * (Vd[3]**2 + Vc[0]**2)**0.5
    ## Lifting to/from: Supply vessel 
    ## (At rated capacity, Multiple fall reeving)
    VH_f_sv_rc_mfr = K_H[3] * (Vd[3]**2 + Vc[0]**2)**0.5
    # -- EN13852-1 --
    # Crane on bottom supported structure
    # Legend: NL: No load; [S,M]FR: [Single, Multiple] fall 
    # reeving
    plt.plot(x, VH_f_sv_rc_sfr, label=lbl[0], linewidth=2)
    plt.plot(x, VH_f_sv_rc_mfr, label=lbl[1], linewidth=2)
    pass

def minhvelo():
    # API plot(s)
    api()
    # EN plot(s)
    en()
    # misc plot details
    plt.grid(True)
    plt.legend(loc=0)
    plt.title(lbl[3])    
    plt.xlabel('Hsig (m)')
    plt.ylabel('Vhmin (m/s)')
    plt.savefig("vhmin.png")

if __name__ == '__main__':
    minhvelo()   

Update (Dec 2018): IOGP specification S-6181 issued in Dec 2018 now fixes the low velocity in API’s off-board lift recipe, which stuck out like an anomaly2 (see plot above), and is now in step with that of EN 13852-1, which can be seen in the updated plot below.

Crane (offboard) hoisting velocity updated with IOGP S-618 recommendations
Figure 2: Crane (offboard) hoisting velocity updated with IOGP S-618 recommendations

Code for generating Figure 2:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
vhmin_s618.py: Offshore crane: min. hoisting velocity
2016 ckunte
Feb 10, 2016: Conditional API curve fixed
Feb 16, 2016: Minimum code retained for graphs
Dec 10, 2018: IOGP fixes the issue with API's low Vhmin 
              prescription
"""
import numpy as np
import matplotlib.pyplot as plt

plt.style.use('classic')

def minhvelo():
    # -- API Spec. 2C 7th Ed --
    # Min. (required) hoisting velocity, m/s (§5.4.5.2)
    cf = 3.2808 # m to ft conversion factor
    # -- IOGP S-618 Offshore cranes suppl. req. to 
    # API Spec 2C V1.0
    x = np.arange(0.0, 3.0, 0.001)
    Vhmin_api_main = (-0.0032 * (x * cf)**2 + 0.179 * \
        (x * cf) + 0.0499) / cf
    Vhmin_api_auxi = 1.79 * Vhmin_api_main
    # -- / IOGP S-618 --
    # -- EN 13852-1:2013 --
    # Table B.2: Load supporting deck velocity, Vd (m/s)
    Vd = [0, (3.2 * x / (x + 13.5)), (4.0 * x / (x + 7.0)), \
    (6.0 * x / (x + 8.0)), (5.3 * x / (x + 5.5))]
    # Table B.3: Crane boom tip velocity, Vc (m/s)
    Vc = [0, (0.25 * x), (0.5 * x)]
    # Table B.4: Velocity factor K_H
    # K_H structure: [NL & SFR, RC & SFR, NL & MFR, RC & MFR]
    K_H = [0.65, 0.50, 0.40, 0.28]
    # Hook velocity 
    # Crane on bottom supported structure
    ## Lifting to/from: Supply vessel 
    ## (At rated capacity, Single fall reeving)
    VH_f_sv_rc_sfr = K_H[1] * (Vd[3]**2 + Vc[0]**2)**0.5
    ## Lifting to/from: Supply vessel 
    ## (At rated capacity, Multiple fall reeving)
    VH_f_sv_rc_mfr = K_H[3] * (Vd[3]**2 + Vc[0]**2)**0.5
    # -- EN13852-1 --
    # Crane on bottom supported structure
    # Legend: NL: No load; [S,M]FR: [Single,Multiple] 
    # fall reeving
    lbl = [
        "EN13852-1:2013 (RC, SFR)",
        "EN13852-1:2013 (RC, MFR)",
        "API Spec 2C 7Ed + IOGP S-618 (Auxi)",
        "API Spec 2C 7Ed + IOGP S-618 (Main)",
        "API v. EN for offboard lift off supply vessel"
    ]
    plt.plot(x, VH_f_sv_rc_sfr, linewidth=2, label=lbl[0])
    plt.plot(x, VH_f_sv_rc_mfr, linewidth=2, label=lbl[1])
    # -- API --
    plt.plot(x, Vhmin_api_auxi, linewidth=2, label=lbl[2])
    plt.plot(x, Vhmin_api_main, linewidth=2, label=lbl[3])
    # ---
    plt.legend(loc=0)
    plt.grid(True)
    plt.xlabel('Hsig (m)')
    plt.ylabel('Vhmin (m/s)')
    plt.title(lbl[4])
    plt.savefig("vhmin_s618.png")

if __name__ == '__main__':
    minhvelo()

  1. IOGP S-618 Supplementary Specification to API Specification 2C Offshore Pedestal-mounted Cranes. 

  2. To be sure, my interest in API Spec 2C is now academic, and I am not judging it for its merits or demerits, since API’s application domain is primarily the US. However, due to the fact that API standards are generally good to very good that the engineering community tends to adopt them across domains (outside USA) — sometimes without pausing to consider whether or not cross-domain application is appropriate.