Comparing minimum hoisting velocity provisions in two leading standards API Spec. 2C (7th Ed), and EN13852-1:2013.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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