Short-wave dispersion relationship: $\omega = \sqrt{gk}$
In [ ]:
import numpy as np
L = 15 # Lambda [m]
H = 20. # Water column depth [m].
N0 = 0.5 # Wave amplitude [m].
K = 2 * np.pi / L # Wave number [m^{-1}].
g = 9.8 # Gravity [m s^{-2}].
w = np.sqrt(g * K) # Short-wave dispersion [rad s^{-1}].
T = 2 * np.pi / w # Period [s].
t = np.arange(0, 2 * T, 0.1) # Two waves.
x = 0
z00, z02, z04, z06, z08, z10 = 0, -2, -4, -6, -8, -10 # Depths to plot.
In [ ]:
HoL = H/L
if HoL > 1./2:
print("H/L = %s. Short-wave! " % HoL)
else:
print("H/L = %s. This is not a shortwave :( " % HoL)
The code below solve the following equations:
Free surface displacement: $\eta = N_o\cos({kx - \omega t})$
x displacement: $\chi = -\eta_o\sin({kx - \omega t})[\cosh(kz) + \sinh(kz)]$
z displacement: $\zeta = \eta_o\cos({kx - \omega t})[\cosh(kz) + \sinh(kz)]$
In [ ]:
N = N0 * np.cos((K * x) - (w * t))
X00 = N0 * np.sin(K * x - w * t) * (np.cosh(K * z00) + np.sinh(K * z00))
X02 = N0 * np.sin(K * x - w * t) * (np.cosh(K * z02) + np.sinh(K * z02))
X04 = N0 * np.sin(K * x - w * t) * (np.cosh(K * z04) + np.sinh(K * z04))
X06 = N0 * np.sin(K * x - w * t) * (np.cosh(K * z06) + np.sinh(K * z06))
X08 = N0 * np.sin(K * x - w * t) * (np.cosh(K * z08) + np.sinh(K * z08))
X10 = N0 * np.sin(K * x - w * t) * (np.cosh(K * z10) + np.sinh(K * z10))
Z00 = N0 * np.cos(K * x - w * t) * (np.sinh(K * z00) + np.cosh(K * z00))
Z02 = N0 * np.cos(K * x - w * t) * (np.sinh(K * z02) + np.cosh(K * z02)) + z02
Z04 = N0 * np.cos(K * x - w * t) * (np.sinh(K * z04) + np.cosh(K * z04)) + z04
Z06 = N0 * np.cos(K * x - w * t) * (np.sinh(K * z06) + np.cosh(K * z06)) + z06
Z08 = N0 * np.cos(K * x - w * t) * (np.sinh(K * z08) + np.cosh(K * z08)) + z08
Z10 = N0 * np.cos(K * x - w * t) * (np.sinh(K * z10) + np.cosh(K * z10)) + z10
In [ ]:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(4, 4))
ax.plot(X00, Z00, 'k',
X02, Z02, 'k',
X04, Z04, 'k',
X06, Z06, 'k',
X08, Z08, 'k',
X10, Z10, 'k')
ax.set_title(u'Ondas de águas profundas (ou ondas curtas)')
ax.set_xlabel(u'Distância [m]')
ax.set_ylabel('Profundidade [m]')
x = np.linspace(-X00.max()*10, X00.max()*10, N.size)
ax.plot(x, N, 'k:')
ax.grid(True)
ax.annotate(r'$\eta$', xy=(x[-4], N[-4]), xycoords='data',
xytext=(20, 20), textcoords='offset points',
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0.2"))
_ = ax.axis('equal')