Source code for deltares_coastal_structures_toolbox.functions.hydraulic.wave_transmission.goda1967_caisson

# SPDX-License-Identifier: GPL-3.0-or-later
import numpy as np
import numpy.typing as npt


[docs] def check_validity(): "No range provided" pass
[docs] def calculate_wave_transmission_Kt( Hsi: float | npt.NDArray[np.float64], Rc: float | npt.NDArray[np.float64], alpha_1: float | npt.NDArray[np.float64] = 2.2, beta_1: float | npt.NDArray[np.float64] = 0.4, ) -> float | npt.NDArray[np.float64]: """Calculate wave transmission coefficient Kt using Goda et al (1967) for caisson structures For caisson structures Y., Takeda, H. and Moriya, Y. (1967). Laboratory investigation of wave transmission over breakwaters. Rep. port and Harbour Res. Inst., 13 (from Seelig 1979). Parameters ---------- Hsi : float | npt.NDArray[np.float64] Incident significant wave height (m) Rc : float | npt.NDArray[np.float64] Crest freeboard, vertical distance from SWL to crest of structure alpha_1 : float | npt.NDArray[np.float64], optional coefficient depending on structure type, by default 2.2 vertical (caisson) breakwater: 2.2 vertical wall (no crest width): 1.8 beta_1 : float | npt.NDArray[np.float64], optional coefficient depending on structure type, by default 0.4 vertical (caisson) breakwater: 0.4 vertical wall (no crest width): 0.1 Returns ------- Kt : float | npt.NDArray[np.float64] Wave Transmission Coefficient (-) """ check_is_array = [ isinstance(Rc, np.ndarray), isinstance(Hsi, np.ndarray), ] if not any(check_is_array): # no arrays, only single values Rc_over_Hsi = Rc / Hsi if Rc_over_Hsi <= -1 * alpha_1 - beta_1: Kt = 1 elif Rc_over_Hsi <= alpha_1 - beta_1: Kt = 0.5 * (1 - np.sin((np.pi / 2) * ((Rc_over_Hsi + beta_1) / (alpha_1)))) else: Kt = 0.03 else: # arrays, so vectorize this function vfunc = np.vectorize(calculate_wave_transmission_Kt) Kt = vfunc(Hsi, Rc, alpha_1, beta_1) return Kt