Source code for breakwater.utils.wave

import numpy as np
from scipy.optimize import fsolve

[docs]def shoaling_coefficient(h, T, H0, linear=False): """ Closed form equation for the non-linear shoaling coefficient Computes the non-linear shoaling coefficient using a closed form equation. The equation uses the coefficient derived in Kweon and Goda (1996). Parameters ---------- h : float water depth [m] T : float wave period, Goda (2000) advises to use :math:`T_{1/3}` [s] H0 : float equivalent deep water significant wave height [m] linear : bool, optional, default: False if true the linear shoaling coefficient is returned, if false the non-linear shoaling coefficient is returned Returns ------- Ks : float the non-linear shoaling coefficient """ # set gravitational acceleration g = 9.81 # compute wave length with the dispersion relation L = dispersion(T=T, h=h) L0 = g*T**2/(2*np.pi) # compute wave number k = 2*np.pi/L # compute ratio c_g (group velocity) to c (wave celerity) n = 0.5*(1 + 2*k*h/np.sinh(2*k*h)) # compute the linear shoaling coefficient Ksi = np.sqrt(1/np.tanh(k*h) * 1/(2*n)) if linear: return Ksi else: # compute the non-linear shoaling coefficient K = Ksi + 0.0015 * (h/L0)**-2.87 * (H0/L0)**1.27 return K
def dispersion(T, h): """ Dispersion relationship uses fsolve to find the wave length Parameters ---------- T : float wave period [s] h : float water depth [m] Returns L : float the wave length [m] """ g = 9.81 # deep water wave length L0 = g*T**2/(2*np.pi) # define dispersion relation with a lambda function to solve L dispersion = lambda L : L0 * np.tanh(2*np.pi*h/L) - L # solve for L L = fsolve(dispersion, L0)[0] return L