Tow
This post was eventually expanded into a paper in 2015.
When asked to compare the severity of seatransportation between the North Sea^{1} and the South China Sea, most engineers side with the former, which they deduce from comparing seastates. So, it’s rare to not get a blank stare from people when I say they may not be right.^{2} Here’s why. Let’s take a look at practised barge motion design criteria in each.
Table 1: Barge motion criteria for medium sized barges
North Sea  South China Sea  

Barge size (m)  >76 × >23  91.4 × 27.4 
Roll (α , Tr ) 
20°, 10s  12.5°, 5s 
Pitch (β , Tp ) 
12.5°, 10s  8°, 5.5s 
Heave, gh 
0.2g  0.2g 
where, α
and β
are roll and pitch single amplitude of angular accelerations respectively (in degrees), together with corresponding full cycle periods (in seconds); and h
is heave single amplitude of linear acceleration (either in terms of g
, or in meters).
At first look, with all motion parameters greater, this may still look like the North Sea is governing over the South China Sea. But is it really? To be sure, let’s convert these into accelerations and resulting inertial forces.
Maximum acceleration, in a simple harmonic motion without phase info., may be computed as follows:
$$ \theta_r = \omega^2 \cdot a $$
From the above, roll acceleration takes the form:
$$ \theta_r = \left(\frac{2\pi}{T_r}\right)^2 \cdot \alpha $$
Similarly, pitch acceleration takes the form:
$$ \theta_p = \left(\frac{2\pi}{T_p}\right)^2 \cdot \beta $$
where, Tr
, Tp
, and Th
are full cycle periods associated with roll, pitch and heave respectively (in seconds). They are given in Table 1.
Table 2: Accelerations
North Sea  South China Sea  Incr  

θr (rad/s^{2}) 
0.14  0.34  143% 
θp (rad/s^{2}) 
0.09  0.22  144% 
gh (m/s^{2}) 
1.96  1.96  – 
What? How? Well, it is due to the full cycle period associated with motions, the proverbial elephant in the room, because most people read or regard full cycle periods as some sort of meta information. In the case of the South China Sea, however, nonlinearly lower full cycle periods in the denominator drive accelerations up. In turn, inertial forces increase as a consequence of higher accelerations (Newton’s second law of motion).^{3}
Full cycle (motion) periods are given by:
$$ T_r = 2\pi \left( \frac{r_x^2 + m_{a_{roll}}}{\overline{GM_T} \cdot g} \right)^\frac{1}{2} $$
$$ T_p = 2\pi \left( \frac{r_y^2 + m_{a_{pitch}}}{\overline{GM_L} \cdot g} \right)^\frac{1}{2} $$
$$ T_h = 2\pi \left(\frac{m + m_{a_{heave}}}{A_w \cdot \rho \cdot g} \right)^\frac{1}{2} $$
These could sometimes be simplified to:
$$ T_r = 2\pi \frac{r_x}{\sqrt{\overline{GM_T} \cdot g}} $$
$$ T_p = 2\pi \frac{r_y}{\sqrt{\overline{GM_L} \cdot g}} $$
where,
 r_{x} and r_{y} are radii of gyration along head and beam directions respectively, and
 GM_{T} and GM_{L} are metacentric height in transverse and longitudinal directions respectively
There is a reason full (motion) periods are engineered for manned vessels, which is to make motions humanely tolerable as the graph below shows.^{4}
Boundary of depression and intolerable ranges can occur for very low accelerations, if periods are too low. Whereas a combination of acceleration and its corresponding average frequency of oscillation determines the level of comfort aboard.
However, marine cargo transports often involve unmanned dummy barges, for which human response is not seen as a governing requirement, and are therefore OK to operate at lower periods of motion. High dynamic acceleration is often a result of small period of motion, as seen in the case of South China Sea pertaining to unmanned cargo barges.
One way to manage this is by optimising (static) metacentric height, GM, by keeping it sufficiently high from greater initial stability considerations — but not excessively high, to warrant low periods of motion. This would not only reduce dynamic accelerations, but also help improve human response, where essential.
Effect of cargo position on inertia forces (Oct 22, 17)
While working on a project recently, I took the opportunity to develop the effect of cargo position on seatransport forces in unrestricted openseas (in terms of W, which is the dry weight of cargo), and extend it to profile all vessel types described in 0030/ND.
Large vessels
Medium vessels and large cargo barges
Small barges
Small vessels
where, Lx, Ly, and Lz are are distances between barge center of rotation and cargo center of gravity in x (along barge length), y (along barge width), and z (vertical) respectively.
Plot code
Here’s the plot code for all standard vessel types described in 0030/ND.
#!/usr/bin/env python
# encoding: utf8
"""Influence of cargo eccentricity on seatransport forces.
Vessel types are based on Noble Denton Rules and Guidelines 0030/ND.
2017 ckunte
Usage: ves.py ( l  m  s  v) [tr=T1] [tp=T2]
ves.py h, help
ves.py version
Options:
h, help Show this help screen.
tr=T1 Single amplitude roll period in seconds [default: 10.]
tp=T2 Single amplitude pitch period in seconds [default: 10.]
l Plot for large vessels >140m, >30m
m Plot for medium vessels & large cargo barges >=76m, >=23m
s Plot for small cargo barges <76m, <23m
v Plot for small vessels <76m, <23m
version Show version.
"""
import numpy as np
import matplotlib.pyplot as plt
from docopt import docopt
# Acceleration due to gravity
g = 9.81
# Heave amplitude in terms of acceleration due to gravity, g
h = 0.2
args = docopt(__doc__, version='Influence of cargo eccentricity on seatransport forces, version: 0.1')
Tr = float(args['tr'])
Tp = float(args['tp'])
r = [20.0, 25.0, 30.0] # In degrees
p = [10.0, 12.5, 15.0] # In degrees
def misc():
plt.legend(loc=0)
plt.grid(True)
plt.xlabel('L (m)')
plt.ylabel('Inertia force in terms of W')
plt.show()
pass
def pgr():
# Angular accelerations
thta_r = r * (2 * np.pi / Tr)**2
thta_p = p * (2 * np.pi / Tp)**2
# Lx, Ly, or Lz
x = np.linspace(0, 30) # Lx range from 0  30m
y = np.linspace(0, 15) # Ly range from 0  15m
z = np.linspace(0, 30) # Lz range from 0  30m
# Vertical force per unit mass
Fvr = np.cos(r) + (y / g) * thta_r + h * np.cos(r)
Fvp = np.cos(p) + (x / g) * thta_p + h * np.cos(p)
# Horizontal force per unit mass
Fhr = np.sin(r) + (z / g) * thta_r + h * np.sin(r)
Fhp = np.sin(p) + (z / g) * thta_p + h * np.sin(p)
# Labels
lbl = [
"Fv (roll) incl. gravity (L => Ly)",
"Fv (pitch) incl. gravity (L => Lx)",
"Fh (roll) (L => Lz)",
"Fh (pitch) (L => Lz)"
]
# Plot
plt.plot(y,Fvr,label=lbl[0],linewidth=2)
plt.plot(x,Fvp,label=lbl[1],linewidth=2)
plt.plot(z,Fhr,label=lbl[2],linewidth=2)
plt.plot(z,Fhp,label=lbl[3],linewidth=2)
pass
def main():
if args['l']:
r = r[0] * np.pi / 180.0 # in rad => 20 deg
p = p[0] * np.pi / 180.0 # in rad => 10 deg
plt.title('Large vessels (LOA > 140m, B > 30m)')
pgr()
misc()
elif args['m']:
r = r[0] * np.pi / 180.0 # in rad => 20 deg
p = p[1] * np.pi / 180.0 # in rad => 12.5 deg
plt.title('Medium vessels & large cargo barges ($\geq$76m, $\geq$23m)')
pgr()
misc()
elif args['s']:
r = r[1] * np.pi / 180.0 # in rad => 25 deg
p = p[2] * np.pi / 180.0 # in rad => 15 deg
plt.title('Small cargo barges (<76m, <23m)')
pgr()
misc()
elif args['v']:
r = r[2] * np.pi / 180.0 # in rad => 30 deg
p = p[2] * np.pi / 180.0 # in rad => 15 deg
plt.title('Small vessels (<76m, <23m)')
pgr()
misc()
else:
print "No option was selected. For help, try: python ves.py h"
pass
if __name__ == '__main__':
main()
For nonstandard motion responses, particularly in benign environments that exhibit lower single amplitude motion and lower full cycle period, the following code could be used. It requires all values to be input.
#!/usr/bin/env python
# encoding: utf8
"""Influence of cargo eccentricity on seatransport forces.
Custom vessel based on barge motion responses.
2017 ckunte
Usage: ves.py r=R p=P tr=T1 tp=T2
ves.py h, help
ves.py version
Options:
h, help Show this help screen.
r=R Single amplitude roll angle in deg [default: 20.0]
p=P Single amplitude pitch angle in deg [default: 12.5]
tr=T1 Single amplitude roll period in seconds [default: 10.]
tp=T2 Single amplitude pitch period in seconds [default: 10.]
version Show version.
"""
import numpy as np
import matplotlib.pyplot as plt
try:
from docopt import docopt
except ImportError:
raise ImportError('Requires docopt: run pip install docopt')
# Acceleration due to gravity
g = 9.81
# Heave amplitude in terms of acceleration due to gravity, g
h = 0.2
args = docopt(__doc__, version='Custom vessel: Infl. of cargo ecc. on inertia forces, version: 0.1')
r = float(args['r'])
p = float(args['p'])
Tr = float(args['tr'])
Tp = float(args['tp'])
def misc():
plt.legend(loc=0)
plt.grid(True)
plt.xlabel('L (m)')
plt.ylabel('Inertia force in terms of W')
plt.show()
pass
def pgr():
# Angular accelerations
thta_r = r * (2 * np.pi / Tr)**2
thta_p = p * (2 * np.pi / Tp)**2
# Lx, Ly, or Lz
x = np.linspace(0, 30) # Lx range from 0  30m
y = np.linspace(0, 15) # Ly range from 0  15m
z = np.linspace(0, 30) # Lz range from 0  30m
# Vertical force per unit mass
Fvr = np.cos(r) + (y / g) * thta_r + h * np.cos(r)
Fvp = np.cos(p) + (x / g) * thta_p + h * np.cos(p)
# Horizontal force per unit mass
Fhr = np.sin(r) + (z / g) * thta_r + h * np.sin(r)
Fhp = np.sin(p) + (z / g) * thta_p + h * np.sin(p)
# Labels
lbl = [
"Fv (roll) incl. gravity (L => Ly)",
"Fv (pitch) incl. gravity (L => Lx)",
"Fh (roll) (L => Lz)",
"Fh (pitch) (L => Lz)"
]
# Plot
plt.plot(y,Fvr,label=lbl[0],linewidth=2)
plt.plot(x,Fvp,label=lbl[1],linewidth=2)
plt.plot(z,Fhr,label=lbl[2],linewidth=2)
plt.plot(z,Fhp,label=lbl[3],linewidth=2)
pass
def main():
r = r * np.pi / 180.0 # in rad
p = p * np.pi / 180.0 # in rad
plt.title('Custom vessel')
pgr()
misc()
pass
if __name__ == '__main__':
main()

GL Noble Denton, Technical Policy Board — Table 72 (Unrestricted, Case 2), Default Motion Criteria, Guidelines for Marine Transportations, Document No. 0030/ND. ↩

I’ve found not Mechanical, Metocean, or Structural engineers, but only Naval architects are usually quick to recover from their stagger as they are able to quickly bring in other factors into perspective. ↩

See also libraries for processing motion response datasets. ↩

Journée and Pinkster, Introduction to Ship Hydromechanics. ↩