Skip to content

Instantly share code, notes, and snippets.

@ckunte ckunte/crane.py
Last active Apr 6, 2016

Embed
What would you like to do?
Comparing minimum hoisting velocity provisions in two leading standards API Spec. 2C (7th Ed), and EN13852-1:2013.
#!/usr/bin/env python
# encoding: utf-8
"""
crane.py: Offshore crane: min. hoisting velocity
2016 ckunte
Feb 10, 2016: Conditional API curve fixed
"""
import numpy as np
import matplotlib.pyplot as plt
# -- OFF-BOARD LIFTS --
# x corresponds to significant wave height (Hsig)
def api2c():
# -- API Spec. 2C 7th Ed --
# Min. (required) hoisting velocity, m/s (§5.4.5.2)
cf = 0.3048 # ft to m conversion factor
x1 = np.arange(0.0, 1.83, 0.001)
x2 = np.arange(1.83, 3.0, 0.001)
Vhmin_api1 = (0.033 * cf) + 0.098 * x1
Vhmin_api2 = 0.067 * (x2 + (3.3 * cf))
plt.plot(x1, Vhmin_api1, color='blue', linewidth=2)
plt.plot(x2, Vhmin_api2, color='blue', linewidth=2)
plt.xlabel('Hsig (m)')
plt.ylabel('Vhmin (m/s)')
plt.grid(True)
plt.title("API Spec 2C, 7th Edition")
plt.savefig("Vhmin_api.png")
plt.show()
def en13852():
x = np.arange(0.0, 3.0, 0.001)
# -- EN 13852-1:2013 --
# Radial displacement (m) of load on vessel deck relative
# to the boom tip shall be taken as follows (§ B.3.2.3):
# Offlead = 2.5 + 1.5 * x
# Radial displacement (m) of load on supply vessel deck relative
# to the boom tip shall be taken as follows (§ B.3.3.3):
# Sidelead = 0.5 * (2.5 + 1.5 * x)
# 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: Barge (No load, Single fall reeving)
VH_f_b_nl_sfr = K_H[0] * (Vd[2]**2 + Vc[0]**2)**0.5
## Lifting to/from: Barge (At rated capacity, Single fall reeving)
VH_f_b_rc_sfr = K_H[1] * (Vd[2]**2 + Vc[0]**2)**0.5
## Lifting to/from: Barge (No load, Multiple fall reeving)
VH_f_b_nl_mfr = K_H[2] * (Vd[2]**2 + Vc[0]**2)**0.5
## Lifting to/from: Barge (At rated capacity, Multiple fall reeving)
VH_f_b_rc_mfr = K_H[3] * (Vd[2]**2 + Vc[0]**2)**0.5
## Lifting to/from: Supply vessel (No load, Single fall reeving)
VH_f_sv_nl_sfr = K_H[0] * (Vd[3]**2 + Vc[0]**2)**0.5
## 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 (No load, Multiple fall reeving)
VH_f_sv_nl_mfr = K_H[2] * (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
## Lifting to/from: Sea surface (No load, Single fall reeving)
VH_f_ss_nl_sfr = K_H[0] * (Vd[4]**2 + Vc[0]**2)**0.5
## Lifting to/from: Sea surface (At rated capacity, Single fall reeving)
VH_f_ss_rc_sfr = K_H[1] * (Vd[4]**2 + Vc[0]**2)**0.5
## Lifting to/from: Sea surface (No load, Multiple fall reeving)
VH_f_ss_nl_mfr = K_H[2] * (Vd[4]**2 + Vc[0]**2)**0.5
## Lifting to/from: Sea surface (At rated capacity, Multiple fall reeving)
VH_f_ss_rc_mfr = K_H[3] * (Vd[4]**2 + Vc[0]**2)**0.5
# Crane on semi-submersible
## Lifting to/from: Barge (No load, Single fall reeving)
VH_semi_b_nl_sfr = K_H[0] * (Vd[2]**2 + Vc[1]**2)**0.5
## Lifting to/from: Barge (At rated capacity, Single fall reeving)
VH_semi_b_rc_sfr = K_H[1] * (Vd[2]**2 + Vc[1]**2)**0.5
## Lifting to/from: Barge (No load, Multiple fall reeving)
VH_semi_b_nl_mfr = K_H[2] * (Vd[2]**2 + Vc[1]**2)**0.5
## Lifting to/from: Barge (At rated capacity, Multiple fall reeving)
VH_semi_b_rc_mfr = K_H[3] * (Vd[2]**2 + Vc[1]**2)**0.5
## Lifting to/from: Supply vessel (No load, Single fall reeving)
VH_semi_sv_nl_sfr = K_H[0] * (Vd[3]**2 + Vc[1]**2)**0.5
## Lifting to/from: Supply vessel (At rated capacity, Single fall reeving)
VH_semi_sv_rc_sfr = K_H[1] * (Vd[3]**2 + Vc[1]**2)**0.5
## Lifting to/from: Supply vessel (No load, Multiple fall reeving)
VH_semi_sv_nl_mfr = K_H[2] * (Vd[3]**2 + Vc[1]**2)**0.5
## Lifting to/from: Supply vessel (At rated capacity, Multiple fall reeving)
VH_semi_sv_rc_mfr = K_H[3] * (Vd[3]**2 + Vc[1]**2)**0.5
## Lifting to/from: Sea surface (No load, Single fall reeving)
VH_semi_ss_nl_sfr = K_H[0] * (Vd[4]**2 + Vc[1]**2)**0.5
## Lifting to/from: Sea surface (At rated capacity, Single fall reeving)
VH_semi_ss_rc_sfr = K_H[1] * (Vd[4]**2 + Vc[1]**2)**0.5
## Lifting to/from: Sea surface (No load, Multiple fall reeving)
VH_semi_ss_nl_mfr = K_H[2] * (Vd[4]**2 + Vc[1]**2)**0.5
## Lifting to/from: Sea surface (At rated capacity, Multiple fall reeving)
VH_semi_ss_rc_mfr = K_H[3] * (Vd[4]**2 + Vc[1]**2)**0.5
# Crane on FPSO or Drill ship
## Lifting to/from: Barge (No load, Single fall reeving)
VH_ds_b_nl_sfr = K_H[0] * (Vd[2]**2 + Vc[2]**2)**0.5
## Lifting to/from: Barge (At rated capacity, Single fall reeving)
VH_ds_b_rc_sfr = K_H[1] * (Vd[2]**2 + Vc[2]**2)**0.5
## Lifting to/from: Barge (No load, Multiple fall reeving)
VH_ds_b_nl_mfr = K_H[2] * (Vd[2]**2 + Vc[2]**2)**0.5
## Lifting to/from: Barge (At rated capacity, Multiple fall reeving)
VH_ds_b_rc_mfr = K_H[3] * (Vd[2]**2 + Vc[2]**2)**0.5
## Lifting to/from: Supply vessel (No load, Single fall reeving)
VH_ds_sv_nl_sfr = K_H[0] * (Vd[3]**2 + Vc[2]**2)**0.5
## Lifting to/from: Supply vessel (At rated capacity, Single fall reeving)
VH_ds_sv_rc_sfr = K_H[1] * (Vd[3]**2 + Vc[2]**2)**0.5
## Lifting to/from: Supply vessel (No load, Multiple fall reeving)
VH_ds_sv_nl_mfr = K_H[2] * (Vd[3]**2 + Vc[2]**2)**0.5
## Lifting to/from: Supply vessel (At rated capacity, Multiple fall reeving)
VH_ds_sv_rc_mfr = K_H[3] * (Vd[3]**2 + Vc[2]**2)**0.5
## Lifting to/from: Sea surface (No load, Single fall reeving)
VH_ds_ss_nl_sfr = K_H[0] * (Vd[4]**2 + Vc[2]**2)**0.5
## Lifting to/from: Sea surface (At rated capacity, Single fall reeving)
VH_ds_ss_rc_sfr = K_H[1] * (Vd[4]**2 + Vc[2]**2)**0.5
## Lifting to/from: Sea surface (No load, Multiple fall reeving)
VH_ds_ss_nl_mfr = K_H[2] * (Vd[4]**2 + Vc[2]**2)**0.5
## Lifting to/from: Sea surface (At rated capacity, Multiple fall reeving)
VH_ds_ss_rc_mfr = K_H[3] * (Vd[4]**2 + Vc[2]**2)**0.5
fig, ax = plt.subplots()
# ---
# Crane on bottom supported structure
# Legend: NL: No load; [S,M]FR: [Single,Multiple] fall reeving
plt.title('Crane on bottom supported structure')
#ax.plot(x, VH_f_b_nl_sfr, label="From Barge (NL, SFR)", linewidth=2)
ax.plot(x, VH_f_b_rc_sfr, label="From Barge (RC, SFR)", linewidth=2)
#ax.plot(x, VH_f_b_nl_mfr, label="From Barge (NL, MFR)", linewidth=2)
ax.plot(x, VH_f_b_rc_mfr, label="From Barge (RC, MFR)", linewidth=2)
#
#ax.plot(x, VH_f_sv_nl_sfr, label="From Supply vessel (NL, SFR)", linewidth=2)
ax.plot(x, VH_f_sv_rc_sfr, label="From Supply vessel (RC, SFR)", linewidth=2)
#ax.plot(x, VH_f_sv_nl_mfr, label="From Supply vessel (NL, MFR)", linewidth=2)
ax.plot(x, VH_f_sv_rc_mfr, label="From Supply vessel (RC, MFR)", linewidth=2)
#
#ax.plot(x, VH_f_ss_nl_sfr, label="From Sea surface (NL, SFR)", linewidth=2)
ax.plot(x, VH_f_ss_rc_sfr, label="From Sea surface (RC, SFR)", linewidth=2)
#ax.plot(x, VH_f_ss_nl_mfr, label="From Sea surface (NL, MFR)", linewidth=2)
ax.plot(x, VH_f_ss_rc_mfr, label="From Sea surface (RC, MFR)", linewidth=2)
# ---
# Crane on semi-submersible
# plt.title('Crane on semi-submersible')
# ax.plot(x, VH_semi_b_nl_sfr, label="From Barge (NL, SFR)", linewidth=2)
# ax.plot(x, VH_semi_b_rc_sfr, label="From Barge (RC, SFR)", linewidth=2)
# ax.plot(x, VH_semi_b_nl_mfr, label="From Barge (NL, MFR)", linewidth=2)
# ax.plot(x, VH_semi_b_rc_mfr, label="From Barge (RC, MFR)", linewidth=2)
# #
# ax.plot(x, VH_semi_sv_nl_sfr, label="From Supply vessel (NL, SFR)", linewidth=2)
# ax.plot(x, VH_semi_sv_rc_sfr, label="From Supply vessel (RC, SFR)", linewidth=2)
# ax.plot(x, VH_semi_sv_nl_mfr, label="From Supply vessel (NL, MFR)", linewidth=2)
# ax.plot(x, VH_semi_sv_rc_mfr, label="From Supply vessel (RC, MFR)", linewidth=2)
# #
# ax.plot(x, VH_semi_ss_nl_sfr, label="From Sea surface (NL, SFR)", linewidth=2)
# ax.plot(x, VH_semi_ss_rc_sfr, label="From Sea surface (RC, SFR)", linewidth=2)
# ax.plot(x, VH_semi_ss_nl_mfr, label="From Sea surface (NL, MFR)", linewidth=2)
# ax.plot(x, VH_semi_ss_rc_mfr, label="From Sea surface (RC, MFR)", linewidth=2)
# ---
# Crane on FPSO / drill ship
# plt.title('Crane on FPSO / drill ship')
# ax.plot(x, VH_ds_b_nl_sfr, label="From Barge (NL, SFR)", linewidth=2)
# ax.plot(x, VH_ds_b_rc_sfr, label="From Barge (RC, SFR)", linewidth=2)
# ax.plot(x, VH_ds_b_nl_mfr, label="From Barge (NL, MFR)", linewidth=2)
# ax.plot(x, VH_ds_b_rc_mfr, label="From Barge (RC, MFR)", linewidth=2)
# #
# ax.plot(x, VH_ds_sv_nl_sfr, label="From Supply vessel (NL, SFR)", linewidth=2)
# ax.plot(x, VH_ds_sv_rc_sfr, label="From Supply vessel (RC, SFR)", linewidth=2)
# ax.plot(x, VH_ds_sv_nl_mfr, label="From Supply vessel (NL, MFR)", linewidth=2)
# ax.plot(x, VH_ds_sv_rc_mfr, label="From Supply vessel (RC, MFR)", linewidth=2)
# #
# ax.plot(x, VH_ds_ss_nl_sfr, label="From Sea surface (NL, SFR)", linewidth=2)
# ax.plot(x, VH_ds_ss_rc_sfr, label="From Sea surface (RC, SFR)", linewidth=2)
# ax.plot(x, VH_ds_ss_nl_mfr, label="From Sea surface (NL, MFR)", linewidth=2)
# ax.plot(x, VH_ds_ss_rc_mfr, label="From Sea surface (RC, MFR)", linewidth=2)
# ---
ax.legend(loc=0)
ax.set_xlabel('Hsig (m)')
ax.set_ylabel('Vhmin (m/s)')
plt.grid(True)
plt.title("EN13852-1:2013")
plt.savefig("Vhmin_en_ds_nl_rc_sfr_mfr.png")
plt.show()
if __name__ == '__main__':
print "Plot min.required hoisting velocity:"
print "Choose a Standard:"
print " 1 - API Spec 2C, 7th Ed."
print " 2 - EN13852-1:2013"
print " 0 - Exit"
standard = input("Standard to use: ")
if standard == 1:
api2c()
if standard == 2:
en13852()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.