import numpy as np
import numpy.typing as npt
import deltares_coastal_structures_toolbox.functions.core_utility as core_utility
import deltares_coastal_structures_toolbox.functions.hydraulic.wave_runup.vangent2001 as vangent2001
[docs]
def check_validity(
Rc: float | npt.NDArray[np.float64] = np.nan,
Ac: float | npt.NDArray[np.float64] = np.nan,
Hm0: float | npt.NDArray[np.float64] = np.nan,
Fb: float | npt.NDArray[np.float64] = np.nan,
beta: float | npt.NDArray[np.float64] = np.nan,
) -> None:
"""Check the parameter values vs the validity range as defined in Van Gent & Van der Werf (2019).
For all parameters supplied, their values are checked versus the range of test conditions specified in Table 2
(Van Gent & Van der Werf, 2019). When parameters are nan (by default), they are not checked.
For more details, see Van Gent & Van der Werf (2019), available here:
https://doi.org/10.1016/j.coastaleng.2019.04.001
Parameters
----------
Rc : float | npt.NDArray[np.float64], optional
Crest freeboard of the structure (m), by default np.nan
Ac : float | npt.NDArray[np.float64], optional
Armour crest freeboard of the structure (m), by default np.nan
Hm0 : float | npt.NDArray[np.float64], optional
Spectral significant wave height (m), by default np.nan
Fb : float | npt.NDArray[np.float64], optional
Level of the base plate of the crest wall w.r.t. still water level (m), by default np.nan
beta : float | npt.NDArray[np.float64], optional
Angle of wave incidence (degrees), by default np.nan
"""
if (
not np.any(np.isnan(Hm0))
and not np.any(np.isnan(Rc))
and not np.any(np.isnan(Ac))
):
core_utility.check_variable_validity_range(
"(Rc-Ac)/Hm0",
"Van Gent and Van der Werf 2019",
((Rc - Ac) / Hm0),
0.26,
0.77,
)
if not np.any(np.isnan(Rc)) and not np.any(np.isnan(Ac)):
core_utility.check_variable_validity_range(
"Rc/Ac", "Van Gent and Van der Werf 2019", (Rc / Ac), 1.27, 1.55
)
if not np.any(np.isnan(Hm0)) and not np.any(np.isnan(Rc)):
core_utility.check_variable_validity_range(
"Rc/Hm0", "Van Gent and Van der Werf 2019", (Rc / Hm0), 0.79, 2.18
)
if not np.any(np.isnan(Hm0)) and not np.any(np.isnan(Fb)):
core_utility.check_variable_validity_range(
"Fb/Hm0", "Van Gent and Van der Werf 2019", (Fb / Hm0), 0.0, 0.62
)
if not np.any(np.isnan(beta)):
core_utility.check_variable_validity_range(
"beta", "Van Gent and Van der Werf 2019", beta, 0.0, 75.0
)
return
[docs]
def calculate_influence_oblique_waves_force_gamma_F_beta(
z2p: float | npt.NDArray[np.float64],
Ac: float | npt.NDArray[np.float64],
beta: float | npt.NDArray[np.float64],
gamma_A: float | npt.NDArray[np.float64],
) -> float | npt.NDArray[np.float64]:
"""Calculate the influence factor on wave forces for oblique wave attack on a crest wall
The influence factor on wave forces for oblique wave attack on a crest wall of a rubble mound breakwater
is calculated using the Van Gent & Van der Werf (2019) method. Here, eq. 20 from Van Gent & Van der Werf (2019)
is implemented.
For more details, see Van Gent & Van der Werf (2019), available here:
https://doi.org/10.1016/j.coastaleng.2019.04.001
Parameters
----------
z2p : float | npt.NDArray[np.float64]
The 2% exceedance wave runup height (m)
Ac : float | npt.NDArray[np.float64]
Armour crest freeboard of the structure (m)
beta : float | npt.NDArray[np.float64]
Angle of wave incidence (degrees)
gamma_A : float | npt.NDArray[np.float64]
Coefficient for either horizontal or vertical force (-)
Returns
-------
float | npt.NDArray[np.float64]
Influence factor on wave forces on a crest wall for oblique wave attack gamma_F_beta (-)
"""
gamma_F_beta = (
(0.5 * np.power(np.cos(np.deg2rad(beta)), 2.0) + 0.5) * z2p - gamma_A * Ac
) / (z2p - gamma_A * Ac)
return gamma_F_beta
[docs]
def calculate_influence_oblique_waves_horizontal_force_gamma_FH_beta(
z2p: float | npt.NDArray[np.float64],
Ac: float | npt.NDArray[np.float64],
beta: float | npt.NDArray[np.float64],
gamma_A: float | npt.NDArray[np.float64] = 1.0,
) -> float | npt.NDArray[np.float64]:
"""Calculate the influence factor on horizontal wave forces for oblique wave attack on a crest wall
The influence factor on horizontal wave forces for oblique wave attack on a crest wall of a rubble mound
breakwater is calculated using the Van Gent & Van der Werf (2019) method. Here, eq. 14 from
Van Gent & Van der Werf (2019) is implemented.
For more details, see Van Gent & Van der Werf (2019), available here:
https://doi.org/10.1016/j.coastaleng.2019.04.001
Parameters
----------
z2p : float | npt.NDArray[np.float64]
The 2% exceedance wave runup height (m)
Ac : float | npt.NDArray[np.float64]
Armour crest freeboard of the structure (m)
beta : float | npt.NDArray[np.float64]
Angle of wave incidence (degrees)
gamma_A : float | npt.NDArray[np.float64], optional
Coefficient for horizontal force (-), by default 1.0
Returns
-------
float | npt.NDArray[np.float64]
Influence factor on horizontal wave forces on a crest wall for oblique wave attack gamma_FH_beta (-)
"""
gamma_FH_beta = calculate_influence_oblique_waves_force_gamma_F_beta(
z2p=z2p, Ac=Ac, beta=beta, gamma_A=gamma_A
)
return gamma_FH_beta
[docs]
def calculate_influence_oblique_waves_vertical_force_gamma_FV_beta(
z2p: float | npt.NDArray[np.float64],
Ac: float | npt.NDArray[np.float64],
beta: float | npt.NDArray[np.float64],
gamma_A: float | npt.NDArray[np.float64] = 0.75,
) -> float | npt.NDArray[np.float64]:
"""Calculate the influence factor on vertical wave forces for oblique wave attack on a crest wall
The influence factor on vertical wave forces for oblique wave attack on a crest wall of a rubble mound
breakwater is calculated using the Van Gent & Van der Werf (2019) method. Here, eq. 17 from
Van Gent & Van der Werf (2019) is implemented.
For more details, see Van Gent & Van der Werf (2019), available here:
https://doi.org/10.1016/j.coastaleng.2019.04.001
Parameters
----------
z2p : float | npt.NDArray[np.float64]
The 2% exceedance wave runup height (m)
Ac : float | npt.NDArray[np.float64]
Armour crest freeboard of the structure (m)
beta : float | npt.NDArray[np.float64]
Angle of wave incidence (degrees)
gamma_A : float | npt.NDArray[np.float64], optional
Coefficient for vertical force (-), by default 0.75
Returns
-------
float | npt.NDArray[np.float64]
Influence factor on horizontal wave forces on a crest wall for oblique wave attack gamma_FV_beta (-)
"""
gamma_FV_beta = calculate_influence_oblique_waves_force_gamma_F_beta(
z2p=z2p, Ac=Ac, beta=beta, gamma_A=gamma_A
)
return gamma_FV_beta
[docs]
def calculate_influence_oblique_waves_gamma_beta(
beta: float | npt.NDArray[np.float64],
c_beta: float | npt.NDArray[np.float64] = 0.5,
) -> float | npt.NDArray[np.float64]:
"""Calculates influence factor for oblique incident waves on wave runup level
Parameters
----------
beta : float | npt.NDArray[np.float64]
Angle of wave incidence (degrees)
c_beta : float | npt.NDArray[np.float64]
Coefficient, 0.5 default
Returns
-------
float | npt.NDArray[np.float64]
influence factor for wave runup gamma_beta
"""
gamma_beta = (1 - c_beta) * np.cos(np.deg2rad(beta)) ** 2 + c_beta
return gamma_beta
[docs]
def calculate_FH2p_perpendicular(
Hm0: float | npt.NDArray[np.float64],
Tmm10: float | npt.NDArray[np.float64],
cot_alpha: float | npt.NDArray[np.float64],
Ac: float | npt.NDArray[np.float64],
Rc: float | npt.NDArray[np.float64],
Hwall: float | npt.NDArray[np.float64],
gamma_beta: float | npt.NDArray[np.float64] = 1.0,
gamma_f: float | npt.NDArray[np.float64] = 0.45,
c0: float | npt.NDArray[np.float64] = 1.45,
c1: float | npt.NDArray[np.float64] = 5.0,
rho_water: float | npt.NDArray[np.float64] = 1025.0,
g: float | npt.NDArray[np.float64] = 9.81,
cFH: float | npt.NDArray[np.float64] = 1.0,
) -> float | npt.NDArray[np.float64]:
"""Calculate the 2% exceedance horizontal force on the crest wall with the Van Gent & van der Werf (2019) method.
The 2% exceedence horizontal force on a crest wall of a rubble mound breakwater for perpendicular wave attack
is calculated using the Van Gent & Van der Werf (2019) method. Here, eq. 13 from Van Gent & Van der Werf (2019)
is implemented and the 2% exceedance wave runup height is calculated using Van Gent (2001), see
hydraulic.wave_runup.vangent2001.py.
For more details, see Van Gent & Van der Werf (2019), available here:
https://doi.org/10.1016/j.coastaleng.2019.04.001
Parameters
----------
Hm0 : float | npt.NDArray[np.float64]
Spectral significant wave height (m)
Tmm10 : float | npt.NDArray[np.float64]
Spectral wave period Tm-1,0 (s)
cot_alpha : float | npt.NDArray[np.float64]
Cotangent of the front-side slope of the structure (-)
Ac : float | npt.NDArray[np.float64]
Armour crest freeboard of the structure (m)
Rc : float | npt.NDArray[np.float64]
Crest freeboard of the structure (m)
Hwall : float | npt.NDArray[np.float64]
Height of the crest wall (m)
gamma_beta : float | npt.NDArray[np.float64], optional
Influence factor for oblique wave incidence (-), by default 1.0
gamma_f : float | npt.NDArray[np.float64], optional
Influence factor for surface roughness (-), by default 0.45
c0 : float | npt.NDArray[np.float64], optional
Coefficient in wave runup formula (-), by default 1.45
c1 : float | npt.NDArray[np.float64], optional
Coefficient in wave runup formula (-), by default 5.0
rho_water : float | npt.NDArray[np.float64], optional
Water density (kg/m^3), by default 1025.0
g : float | npt.NDArray[np.float64], optional
Gravitational constant (m/s^2), by default 9.81
cFH : float | npt.NDArray[np.float64], optional
Coefficient in horizontal force formula (-), by default 1.0
Returns
-------
float | npt.NDArray[np.float64]
The 2% exceedance horizontal force on the crest wall FH2% (N/m)
"""
gamma = gamma_f * gamma_beta
z2p = vangent2001.calculate_wave_runup_height_zXp(
H=Hm0, Tmm10=Tmm10, cot_alpha=cot_alpha, gamma=gamma, c0=c0, c1=c1
)
FH2p = calculate_FH2p_perpendicular_from_z2p(
Hm0=Hm0, z2p=z2p, rho_water=rho_water, Ac=Ac, Rc=Rc, Hwall=Hwall, g=g, cFH=cFH
)
check_validity(Hm0=Hm0, Ac=Ac, Rc=Rc)
return FH2p
[docs]
def calculate_FH2p_perpendicular_from_z2p(
Hm0: float | npt.NDArray[np.float64],
z2p: float | npt.NDArray[np.float64],
Ac: float | npt.NDArray[np.float64],
Rc: float | npt.NDArray[np.float64],
Hwall: float | npt.NDArray[np.float64],
rho_water: float | npt.NDArray[np.float64] = 1025.0,
g: float | npt.NDArray[np.float64] = 9.81,
cFH: float | npt.NDArray[np.float64] = 1.0,
) -> float | npt.NDArray[np.float64]:
"""Calculate the 2% exceedance horizontal force on the crest wall with the Van Gent & van der Werf (2019) method.
The 2% exceedence horizontal force on a crest wall of a rubble mound breakwater for perpendicular wave attack
is calculated using the Van Gent & Van der Werf (2019) method. Here, eq. 13 from Van Gent & Van der Werf (2019)
is implemented.
For more details, see Van Gent & Van der Werf (2019), available here:
https://doi.org/10.1016/j.coastaleng.2019.04.001
Parameters
----------
Hm0 : float | npt.NDArray[np.float64]
Spectral significant wave height (m)
z2p : float | npt.NDArray[np.float64]
The 2% exceedance wave runup height (m)
Ac : float | npt.NDArray[np.float64]
Armour crest freeboard of the structure (m)
Rc : float | npt.NDArray[np.float64]
Crest freeboard of the structure (m)
Hwall : float | npt.NDArray[np.float64]
Height of the crest wall (m)
rho_water : float | npt.NDArray[np.float64], optional
Water density (kg/m^3), by default 1025.0
g : float | npt.NDArray[np.float64], optional
Gravitational constant (m/s^2), by default 9.81
cFH : float | npt.NDArray[np.float64], optional
Coefficient in horizontal force formula (-), by default 1.0
Returns
-------
float | npt.NDArray[np.float64]
The 2% exceedance horizontal force on the crest wall FH2% (N/m)
"""
check_validity(Hm0=Hm0, Ac=Ac, Rc=Rc)
FH2p = cFH * rho_water * g * Hwall * (z2p - Ac)
FH2p = np.max([FH2p, np.zeros_like(FH2p) * 0], axis=0)
check_validity(Hm0=Hm0, Ac=Ac, Rc=Rc)
return FH2p
[docs]
def calculate_FH2p_oblique(
Hm0: float | npt.NDArray[np.float64],
Tmm10: float | npt.NDArray[np.float64],
beta: float | npt.NDArray[np.float64],
cot_alpha: float | npt.NDArray[np.float64],
Ac: float | npt.NDArray[np.float64],
Rc: float | npt.NDArray[np.float64],
Hwall: float | npt.NDArray[np.float64],
gamma_beta: float | npt.NDArray[np.float64] = 1.0,
gamma_f: float | npt.NDArray[np.float64] = 0.45,
c0: float | npt.NDArray[np.float64] = 1.45,
c1: float | npt.NDArray[np.float64] = 5.0,
cFH: float | npt.NDArray[np.float64] = 1.0,
rho_water: float | npt.NDArray[np.float64] = 1025.0,
g: float | npt.NDArray[np.float64] = 9.81,
) -> float | npt.NDArray[np.float64]:
"""Calculate the 2% exceedance horizontal force on the crest wall with the Van Gent & van der Werf (2019) method.
The 2% exceedence horizontal force on a crest wall of a rubble mound breakwater for oblique wave attack
is calculated using the Van Gent & Van der Werf (2019) method. Here, eq. 13, 14 and 15 from
Van Gent & Van der Werf (2019) are implemented and the 2% exceedance wave runup height is calculated
using Van Gent (2001), see hydraulic.wave_runup.vangent2001.py.
For more details, see Van Gent & Van der Werf (2019), available here:
https://doi.org/10.1016/j.coastaleng.2019.04.001
Parameters
----------
Hm0 : float | npt.NDArray[np.float64]
Spectral significant wave height (m)
Tmm10 : float | npt.NDArray[np.float64]
Spectral wave period Tm-1,0 (s)
beta : float | npt.NDArray[np.float64]
Angle of wave incidence (degrees)
cot_alpha : float | npt.NDArray[np.float64]
Cotangent of the front-side slope of the structure (-)
Ac : float | npt.NDArray[np.float64]
Armour crest freeboard of the structure (m)
Rc : float | npt.NDArray[np.float64]
Crest freeboard of the structure (m)
Hwall : float | npt.NDArray[np.float64]
Height of the crest wall (m)
gamma_beta : float | npt.NDArray[np.float64], optional
Influence factor for oblique wave incidence (-), by default 1.0
gamma_f : float | npt.NDArray[np.float64], optional
Influence factor for surface roughness (-), by default 0.45
c0 : float | npt.NDArray[np.float64], optional
Coefficient in wave runup formula (-), by default 1.45
c1 : float | npt.NDArray[np.float64], optional
Coefficient in wave runup formula (-), by default 5.0
cFH : float | npt.NDArray[np.float64], optional
Coefficient in horizontal force formula (-), by default 1.0
rho_water : float | npt.NDArray[np.float64], optional
Water density (kg/m^3), by default 1025.0
g : float | npt.NDArray[np.float64], optional
Gravitational constant (m/s^2), by default 9.81
Returns
-------
float | npt.NDArray[np.float64]
The 2% exceedance horizontal force on the crest wall FH2% (N/m)
"""
gamma = gamma_f * gamma_beta
z2p = vangent2001.calculate_wave_runup_height_zXp(
H=Hm0, Tmm10=Tmm10, cot_alpha=cot_alpha, gamma=gamma, c0=c0, c1=c1
)
FH2p_perpendicular = calculate_FH2p_perpendicular_from_z2p(
Hm0=Hm0, z2p=z2p, rho_water=rho_water, Ac=Ac, Rc=Rc, Hwall=Hwall, g=g, cFH=cFH
)
gamma_FH_beta = calculate_influence_oblique_waves_horizontal_force_gamma_FH_beta(
z2p=z2p, Ac=Ac, beta=beta
)
FH2p_oblique = gamma_FH_beta * FH2p_perpendicular
check_validity(Hm0=Hm0, Ac=Ac, Rc=Rc, beta=beta)
return FH2p_oblique
[docs]
def calculate_FV2p_perpendicular(
Hm0: float | npt.NDArray[np.float64],
Tmm10: float | npt.NDArray[np.float64],
cot_alpha: float | npt.NDArray[np.float64],
Ac: float | npt.NDArray[np.float64],
Bwall: float | npt.NDArray[np.float64],
Fb: float | npt.NDArray[np.float64],
gamma_beta: float | npt.NDArray[np.float64] = 1.0,
gamma_f: float | npt.NDArray[np.float64] = 0.45,
c0: float | npt.NDArray[np.float64] = 1.45,
c1: float | npt.NDArray[np.float64] = 5.0,
cFV: float | npt.NDArray[np.float64] = 0.4,
cFb: float | npt.NDArray[np.float64] = 0.5,
rho_water: float | npt.NDArray[np.float64] = 1025.0,
g: float | npt.NDArray[np.float64] = 9.81,
) -> float | npt.NDArray[np.float64]:
"""Calculate the 2% exceedance vertical force on the crest wall with the Van Gent & van der Werf (2019) method.
The 2% exceedence vertical force on a crest wall of a rubble mound breakwater for perpendicular wave attack
is calculated using the Van Gent & Van der Werf (2019) method. Here, eq. 16 from Van Gent & Van der Werf (2019)
is implemented and the 2% exceedance wave runup height is calculated using Van Gent (2001), see
hydraulic.wave_runup.vangent2001.py.
For more details, see Van Gent & Van der Werf (2019), available here:
https://doi.org/10.1016/j.coastaleng.2019.04.001
Parameters
----------
Hm0 : float | npt.NDArray[np.float64]
Spectral significant wave height (m)
Tmm10 : float | npt.NDArray[np.float64]
Spectral wave period Tm-1,0 (s)
cot_alpha : float | npt.NDArray[np.float64]
Cotangent of the front-side slope of the structure (-)
Ac : float | npt.NDArray[np.float64]
Armour crest freeboard of the structure (m)
Bwall : float | npt.NDArray[np.float64]
Width of the crest wall (m)
Fb : float | npt.NDArray[np.float64]
Level of the base plate of the crest wall w.r.t. still water level (m)
gamma_beta : float | npt.NDArray[np.float64], optional
Influence factor for oblique wave incidence (-), by default 1.0
gamma_f : float | npt.NDArray[np.float64], optional
Influence factor for surface roughness (-), by default 0.45
c0 : float | npt.NDArray[np.float64], optional
Coefficient in wave runup formula (-), by default 1.45
c1 : float | npt.NDArray[np.float64], optional
Coefficient in wave runup formula (-), by default 5.0
cFV : float | npt.NDArray[np.float64], optional
Coefficient in vertical force formula (-), by default 0.4
cFb : float | npt.NDArray[np.float64], optional
Coefficient in vertical force formula (-), by default 0.5
rho_water : float | npt.NDArray[np.float64], optional
Water density (kg/m^3), by default 1025.0
g : float | npt.NDArray[np.float64], optional
Gravitational constant (m/s^2), by default 9.81
Returns
-------
float | npt.NDArray[np.float64]
The 2% exceedance vertical force on the crest wall FV2% (N/m)
"""
gamma = gamma_f * gamma_beta
z2p = vangent2001.calculate_wave_runup_height_zXp(
H=Hm0, Tmm10=Tmm10, cot_alpha=cot_alpha, gamma=gamma, c0=c0, c1=c1
)
FV2p_perpendicular = calculate_FV2p_perpendicular_from_z2p(
z2p=z2p, rho_water=rho_water, Ac=Ac, Bwall=Bwall, cFV=cFV, cFb=cFb, Fb=Fb, g=g
)
check_validity(Hm0=Hm0, Ac=Ac, Fb=Fb)
return FV2p_perpendicular
[docs]
def calculate_FV2p_perpendicular_from_z2p(
z2p: float | npt.NDArray[np.float64],
Ac: float | npt.NDArray[np.float64],
Bwall: float | npt.NDArray[np.float64],
Fb: float | npt.NDArray[np.float64],
cFV: float | npt.NDArray[np.float64] = 0.4,
cFb: float | npt.NDArray[np.float64] = 0.5,
rho_water: float | npt.NDArray[np.float64] = 1025.0,
g: float | npt.NDArray[np.float64] = 9.81,
) -> float | npt.NDArray[np.float64]:
"""Calculate the 2% exceedance vertical force on the crest wall with the Van Gent & van der Werf (2019) method.
The 2% exceedence vertical force on a crest wall of a rubble mound breakwater for perpendicular wave attack
is calculated using the Van Gent & Van der Werf (2019) method. Here, eq. 16 from Van Gent & Van der Werf (2019)
is implemented.
For more details, see Van Gent & Van der Werf (2019), available here:
https://doi.org/10.1016/j.coastaleng.2019.04.001
Parameters
----------
z2p : float | npt.NDArray[np.float64]
The 2% exceedance wave runup height (m)
Ac : float | npt.NDArray[np.float64]
Armour crest freeboard of the structure (m)
Bwall : float | npt.NDArray[np.float64]
Width of the crest wall (m)
Fb : float | npt.NDArray[np.float64]
Level of the base plate of the crest wall w.r.t. still water level (m)
cFV : float | npt.NDArray[np.float64], optional
Coefficient in vertical force formula (-), by default 0.4
cFb : float | npt.NDArray[np.float64], optional
Coefficient in vertical force formula (-), by default 0.5
rho_water : float | npt.NDArray[np.float64], optional
Water density (kg/m^3), by default 1025.0
g : float | npt.NDArray[np.float64], optional
Gravitational constant (m/s^2), by default 9.81
Returns
-------
float | npt.NDArray[np.float64]
The 2% exceedance vertical force on the crest wall FV2% (N/m)
"""
FV2p = (
cFV * rho_water * g * Bwall * (z2p - 0.75 * Ac) * (1 - (np.power(Fb / Ac, cFb)))
)
FV2p = np.max([FV2p, np.zeros_like(FV2p) * 0], axis=0)
return FV2p
[docs]
def calculate_FV2p_oblique(
Hm0: float | npt.NDArray[np.float64],
Tmm10: float | npt.NDArray[np.float64],
beta: float | npt.NDArray[np.float64],
cot_alpha: float | npt.NDArray[np.float64],
Ac: float | npt.NDArray[np.float64],
Bwall: float | npt.NDArray[np.float64],
Fb: float | npt.NDArray[np.float64],
gamma_beta: float | npt.NDArray[np.float64] = 1.0,
gamma_f: float | npt.NDArray[np.float64] = 0.45,
c0: float | npt.NDArray[np.float64] = 1.45,
c1: float | npt.NDArray[np.float64] = 5.0,
cFV: float | npt.NDArray[np.float64] = 0.4,
cFb: float | npt.NDArray[np.float64] = 0.5,
rho_water: float | npt.NDArray[np.float64] = 1025.0,
g: float | npt.NDArray[np.float64] = 9.81,
) -> float | npt.NDArray[np.float64]:
"""Calculate the 2% exceedance vertical force on the crest wall with the Van Gent & van der Werf (2019) method.
The 2% exceedence vertical force on a crest wall of a rubble mound breakwater for oblique wave attack
is calculated using the Van Gent & Van der Werf (2019) method. Here, eq. 16, 17 and 18 from
Van Gent & Van der Werf (2019) is implemented and the 2% exceedance wave runup height is calculated using
Van Gent (2001), see hydraulic.wave_runup.vangent2001.py.
For more details, see Van Gent & Van der Werf (2019), available here:
https://doi.org/10.1016/j.coastaleng.2019.04.001
Parameters
----------
Hm0 : float | npt.NDArray[np.float64]
Spectral significant wave height (m)
Tmm10 : float | npt.NDArray[np.float64]
Spectral wave period Tm-1,0 (s)
beta : float | npt.NDArray[np.float64]
Angle of wave incidence (degrees)
cot_alpha : float | npt.NDArray[np.float64]
Cotangent of the front-side slope of the structure (-)
Ac : float | npt.NDArray[np.float64]
Armour crest freeboard of the structure (m)
Bwall : float | npt.NDArray[np.float64]
Width of the crest wall (m)
Fb : float | npt.NDArray[np.float64]
Level of the base plate of the crest wall w.r.t. still water level (m)
gamma_beta : float | npt.NDArray[np.float64], optional
Influence factor for oblique wave incidence (-), by default 1.0
gamma_f : float | npt.NDArray[np.float64], optional
Influence factor for surface roughness (-), by default 0.45
c0 : float | npt.NDArray[np.float64], optional
Coefficient in wave runup formula (-), by default 1.45
c1 : float | npt.NDArray[np.float64], optional
Coefficient in wave runup formula (-), by default 5.0
cFV : float | npt.NDArray[np.float64], optional
Coefficient in vertical force formula (-), by default 0.4
cFb : float | npt.NDArray[np.float64], optional
Coefficient in vertical force formula (-), by default 0.5
rho_water : float | npt.NDArray[np.float64], optional
Water density (kg/m^3), by default 1025.0
g : float | npt.NDArray[np.float64], optional
Gravitational constant (m/s^2), by default 9.81
Returns
-------
float | npt.NDArray[np.float64]
The 2% exceedance vertical force on the crest wall FV2% (N/m)
"""
gamma = gamma_f * gamma_beta
z2p = vangent2001.calculate_wave_runup_height_zXp(
H=Hm0, Tmm10=Tmm10, cot_alpha=cot_alpha, gamma=gamma, c0=c0, c1=c1
)
FV2p_perpendicular = calculate_FV2p_perpendicular_from_z2p(
z2p=z2p, rho_water=rho_water, Ac=Ac, Bwall=Bwall, cFV=cFV, cFb=cFb, Fb=Fb, g=g
)
gamma_FV_beta = calculate_influence_oblique_waves_vertical_force_gamma_FV_beta(
z2p=z2p, Ac=Ac, beta=beta
)
FV2p_oblique = gamma_FV_beta * FV2p_perpendicular
check_validity(Hm0=Hm0, Ac=Ac, beta=beta, Fb=Fb)
return FV2p_oblique
[docs]
def calculate_FH01p_perpendicular(
FH2p: float | npt.NDArray[np.float64],
) -> float | npt.NDArray[np.float64]:
"""Calculate the 0.1% exceedance horizontal force on the crest wall with the Van Gent & van der Werf (2019) method.
The 0.1% exceedence horizontal force on a crest wall of a rubble mound breakwater for perpendicular wave attack
is calculated using the Van Gent & Van der Werf (2019) method.
For more details, see Van Gent & Van der Werf (2019), available here:
https://www.researchgate.net/publication/336170265_Prediction_method_for_wave_overtopping_and_forces_on_rubble_mound_breakwater_crest_walls
Parameters
----------
FH2p : float | npt.NDArray[np.float64]
The 2% exceedance horizontal force on the crest wall (N/m)
Returns
-------
float | npt.NDArray[np.float64]
The 0.1% exceedance horizontal force on the crest wall FH01% (N/m)
"""
FH01p = 1.6 * FH2p
return FH01p
[docs]
def calculate_FV01p_perpendicular(
FV2p: float | npt.NDArray[np.float64],
s0p: float | npt.NDArray[np.float64],
) -> float | npt.NDArray[np.float64]:
"""Calculate the 0.1% exceedance vertical force on the crest wall with the Van Gent & van der Werf (2019) method.
The 0.1% exceedence vertical force on a crest wall of a rubble mound breakwater for perpendicular wave attack
is calculated using the Van Gent & Van der Werf (2019) method.
For more details, see Van Gent & Van der Werf (2019), available here:
https://www.researchgate.net/publication/336170265_Prediction_method_for_wave_overtopping_and_forces_on_rubble_mound_breakwater_crest_walls
Parameters
----------
FV2p : float | npt.NDArray[np.float64]
The 2% exceedance vertical force on the crest wall (N/m)
s0p : float | npt.NDArray[np.float64]
Deep water wave steepness (-)
Returns
-------
float | npt.NDArray[np.float64]
The 0.1% exceedance vertical force on the crest wall FH01% (N/m)
"""
FV01p = (2.88 - 32 * s0p) * FV2p
return FV01p