Source code for breakwater.core.overtopping

import numpy as np

from ..utils.exceptions import user_warning, NotSupportedError

[docs]def gamma_f( armour_layer, xi_m_min_1, layers=None, permeability=None, placement=None): """ Influence factor for the permeability and roughness of the slope Computes the influence factor on roughness with table 6.2 from EurOtop (2018). These values are derived for 2.8 :math:`\\leq \\xi_{m-1.0} \\leq` 4.5, in case of larger surf-similarity parameters the influence factor for roughness is increased using equation 6.7 from EurOtop (2018) +--------------------------------------+-------------------+ | Type of armour layer | :math:`\\gamma_f` | +======================================+===================+ | Smooth impermeable surface | 1.00 | +--------------------------------------+-------------------+ | Rock (1 layer, impermeable core) | 0.60 | +--------------------------------------+-------------------+ | Rock (1 layer, permeable core) | 0.45 | +--------------------------------------+-------------------+ | Rock (2 layers, impermeable core) | 0.55 | +--------------------------------------+-------------------+ | Rock (2 layers, permeable core) | 0.40 | +--------------------------------------+-------------------+ | Cubes (1 layer, flat positioning) | 0.49 | +--------------------------------------+-------------------+ | Cubes (2 layers, random positioning) | 0.47 | +--------------------------------------+-------------------+ | Antifers | 0.50 | +--------------------------------------+-------------------+ | HARO | 0.47 | +--------------------------------------+-------------------+ | Tetrapods | 0.38 | +--------------------------------------+-------------------+ | Dolos | 0.43 | +--------------------------------------+-------------------+ | Accropode I | 0.46 | +--------------------------------------+-------------------+ | Xbloc, CoreLoc, Accropode II | 0.44 | +--------------------------------------+-------------------+ | XblocPlus | 0.45 | +--------------------------------------+-------------------+ | Cubipods (1 layer) | 0.49 | +--------------------------------------+-------------------+ | Cubipods (2 layers) | 0.47 | +--------------------------------------+-------------------+ Parameters ---------- armour_layer : str name of the material of the armour layer, supported materials: Smooth, Rock, Cubes, Antifers, HARO, Tetrapods, Dolos, Accropode I, Xbloc, XblocPlus, CoreLoc, Accropode II, Cubipods xi_m_min_1 : float the surf-similarity parameter [-] layers : {1, 2}, optional, default: None number of layers in the armour layer, required if the armour layer is made out of: Rock, Cubes or Cubipods permeability : {'permeable', 'impermeable'}, optional, default: None permeability of the armour layer, required if the armour layer is made out of Rock placement : {'flat', 'random'}, optional, default: None placement of the armour layer, required if the armour layer is made out of Cubes Returns ------- gamma_f : float the influence factor for roughness Raises ------ Keyerror If the armour layer is not in table 6.2 from EurOtop (2018) """ table = {'Smooth': 1, 'Rock - 1 - permeable': 0.6, 'Rock - 1 - impermeable': 0.45, 'Rock - 2 - permeable': 0.55, 'Rock - 2 - impermeable': 0.40, 'Cubes - 1 - flat': 0.49, 'Cubes - 2 - random': 0.47, 'Antifers': 0.5, 'HARO': 0.47, 'Tetrapods': 0.38, 'Dolos': 0.43, 'Accropode I': 0.46, 'Xbloc': 0.44, 'XblocPlus': 0.45, 'CoreLoc': 0.44, 'Accropode II': 0.44, 'Cubipods - 1': 0.49, 'Cubipods - 2': 0.47} if armour_layer == 'Smooth': key = 'Smooth' elif armour_layer == 'Rock': key = f'Rock - {layers} - {permeability}' elif armour_layer == 'Cubipods': key = f'Cubipods - {layers}' elif armour_layer == 'Cubes': key = f'Cubes - {layers} - {placement}' else: key = f'{armour_layer}' # check if the armour layer (key) is in the table if key in table.keys(): # get the gamma_f value gamma_f = table[key] else: # raise error as the given armour layer is not supported raise NotSupportedError( ('EurOtop (2018) does not support a roughness factor for ' f'{armour_layer}')) if xi_m_min_1 > 5: gamma_f = gamma_f + (xi_m_min_1-5)*(1-gamma_f)/5 elif xi_m_min_1 < 2.8: user_warning( (f'xi out of range in gamma_f, {np.round(xi_m_min_1,2)} < 2.8. ' f'Continued with gamma_f = {gamma_f}')) return gamma_f
[docs]def gamma_beta(beta): """ Influence factor for oblique wave attack Computes the influence factor for oblique wave attack with equation 5.29 from EurOtop (2018). .. math:: \\gamma_{\\beta} = 1 - 0.0033 \\mid \\beta \\mid with a maximum of :math:`\\gamma_{\\beta} = 0.736` for :math:`\\mid \\beta \\mid > 80` Parameters ---------- beta : float the angle of wave attack [rad] Returns ------- gamma_beta : float the influence factor for oblique wave attack """ beta_deg = beta*180/np.pi if beta_deg <= 80: return 1 - 0.0033 * np.abs(beta_deg) else: return 0.736
[docs]def rubble_mound( Hm0, q, xi_m_min_1, alpha, beta, gamma_b, gamma_v, gam_star, armour_layer, layers=1, permeability='permeable', safety=1, Gc=None, Dn50=None, limit=True): """ Compute the crest freeboard of a rubble mound breakwater Computes the crest freeboard of a rubble mound breakwater using equation 5.10 and 5.12 from EurOtop (2018). .. math:: \\frac{q}{\\sqrt{g \\cdot H_{m 0}^{3}}}=\\frac{0.023}{\\sqrt{\\tan \\alpha}}\\gamma_{b} \\cdot \\xi_{m-1,0} \\cdot \\exp \\left[- \\left(2.7 \\frac{R_{c}}{\\xi_{m-1,0} \\cdot H_{m 0} \\cdot \\gamma_{b} \\cdot \\gamma_{f} \\cdot \\gamma_{\\beta} \\cdot \\gamma_{v}}\\right)^{1.3}\\right] with a maximum of .. math:: \\frac{q}{\\sqrt{g \\cdot H_{m 0}^{3}}}=0.09 \\cdot \\exp \\left [-\\left(1.5 \\frac{R_{c}}{H_{m 0} \\cdot \\gamma_{f} \\cdot \\gamma_{\\beta} \\cdot \\gamma^{*}}\\right)^{1.3}\\right] The reliability of the first equation is given by :math:`\\sigma` (0.023) = 0.003 and :math:`\\sigma` (2.7) = 0.20, and for the second equation by :math:`\\sigma` (0.09) = 0.0135 and :math:`\\sigma` (1.5) = 0.15. Parameters ---------- Hm0 : float the spectral wave height [m] q : float mean overtopping discharge per meter structure width [l/s per m] xi_m_min_1 : float :math:`\\xi_{m-1.0}`, the surf-similarity parameter computed with the energy wave period :math:`T_{m-1.0}` [-] alpha : float Angle of the front slope [rad] beta : float the angle of wave attack [rad] gamma_b : float influence factor for a berm [-] gamma_v : float influence factor for a vertical wall [-] gamma_star : float overall influence factor for a storm wall on slope or promenade [-] armour_layer : str name of the material of the armour layer, supported materials: Smooth, Rock, Cubes, Antifers, HARO, Tetrapods, Dolose, Accropode I, Xbloc, CoreLoc, Accropode II, Cubipods layers : {1, 2}, default: 1 number of layers in the armour layer, required if the armour layer is made out of: Rock, Cubes or Cubipods permeability : {'permeable', 'impermeable'}, default: 'permeable' permeability of the armour layer, required if the armour layer is made out of Rock safety : float, optional, default: 1 safety factor of the design, positive values increase the safety of the design by increasing the mean value of the model constants with the number of standard deviations specified. In accordance with the recommendation from EurOtop (2018), the default value is set to 1 standard deviation. Gc : float, optional, default: None Effect of armoured crest width [m] Dn50 : float, optional, default: None nominal diameter of the armour units on the crest [m] limit : bool, optional, default: True If True, the discharge will be set to the limit for zero discharge in case the given discharge is below this limit. If False, the discharge will not be changed. Returns ------- Rc : float the crest freeboard of the structure [m] """ g = 9.81 gam_f = gamma_f( armour_layer=armour_layer, xi_m_min_1=xi_m_min_1, layers=layers, permeability=permeability) gam_beta = gamma_beta(beta) constant_a = 0.023 + safety*0.003 constant_b = 2.7 - safety*0.2 constant_c = 0.09 + safety*0.0135 constant_d = 1.5 - safety*0.15 # check given overtop discharge against EurOtop limit for zero discharge limit_zero_q = np.sqrt(g*Hm0**3) * 0.01 if limit_zero_q > q: msg = (f'Given value of q = {q}, is below EurOtop limit for zero ' f'discharge, which is {np.round(limit_zero_q, 3)}') if limit: msg += f'. Using {np.round(limit_zero_q, 3)} instead as limit=True' q = limit_zero_q user_warning(msg) # in case of a wide crest the overtopping in the equation can be increased if Gc != None and Gc > 3*Dn50: Cr = 3.06 * np.exp(-1.5*Gc/Hm0) q = q / min(Cr, 1) q = q/1000 # compute arguments of the ln (to check if arg < 1) arg = (q * np.sqrt(np.tan(alpha)) / (constant_a*gamma_b*xi_m_min_1*np.sqrt(g*Hm0**3))) arg_upper = q/(constant_c*np.sqrt(g*Hm0**3)) if arg <= 1: Rc = ((xi_m_min_1*Hm0*gamma_b*gam_f*gam_beta*gamma_v/constant_b) * (-np.log(arg))**(1/1.3)) else: Rc = 0 user_warning('Encountered negative freeboard') if arg_upper <= 1: # handle for RuntimeWarning Rc_upper = ((Hm0*gam_f*gam_beta*gam_star/constant_d) * (-np.log(arg_upper))**(1/1.3)) else: Rc_upper = 0 user_warning('Encountered negative freeboard in upper bound') Rc = min(Rc, Rc_upper) return Rc
[docs]def vertical_deep(Hm0, q, safety=1, limit=True): """ Rc if the foreshore does not have an influence Compute the crest freeboard for a vertical or composite vertical wall if the foreshore does not have an influence. Implementation of equation 7.1 from EurOtop (2018). .. math:: \\frac{q}{\\sqrt{g \\cdot H_{m 0}^{3}}}=0.047 \\cdot \\exp \\left[ -\\left(2.35 \\frac{R_{c}}{H_{m 0}}\\right)^{1.3}\\right] The reliability of the equation is given by :math:`\\sigma` (0.047) = 0.007 and :math:`\\sigma` (2.35) = 0.23. Parameters ---------- Hm0 : float the spectral wave height [m] q : float mean overtopping discharge per meter structure width [l/s per m] safety : float, optional, default: 1 safety factor of the design, positive values increase the safety of the design by increasing the mean value of the model constants with the number of standard deviations specified. In accordance with the recommendation from EurOtop (2018), the default value is set to 1 standard deviation. limit : bool, optional, default: True If True, the discharge will be set to the limit for zero discharge in case the given discharge is below this limit. If False, the discharge will not be changed. Returns ------- Rc : float the crest freeboard of the structure [m] """ g = 9.81 # check given overtop discharge against EurOtop limit for zero discharge limit_zero_q = np.sqrt(g*Hm0**3) * 0.01 if limit_zero_q > q: msg = (f'Given value of q = {q}, is below EurOtop limit for zero ' f'discharge, which is {np.round(limit_zero_q, 3)}') if limit: msg += f'. Using {np.round(limit_zero_q, 3)} instead as limit=True' q = limit_zero_q user_warning(msg) # convert q from l to m^3 q = q/1000 constant_a = 0.047 + safety*0.007 constant_b = 2.35 - safety*0.23 Rc = (1/constant_b*Hm0 * (-np.log(q/(constant_a*np.sqrt(g*Hm0**3))))**(1/1.3)) return Rc
[docs]def vertical_no_breaking(Hm0, q, safety=1, limit=True): """ Rc if no possibility for breaking waves Compute the crest freeboard for a vertical or composite vertical wall if there are no breaking waves. Implementation of equation 7.5 from EurOtop (2018) .. math:: \\frac{q}{\\sqrt{g H_{m 0}^{3}}}=0.05 \\exp \\left(-2.78 \\frac{R_{c}}{H_{m 0}}\\right) The reliability of the equation is given by :math:`\\sigma` (0.05) = 0.012 and :math:`\\sigma` (2.78) = 0.17. Parameters ---------- Hm0 : float the spectral wave height [m] q : float mean overtopping discharge per meter structure width [l/s per m] safety : float, optional, default: 1 safety factor of the design, positive values increase the safety of the design by increasing the mean value of the model constants with the number of standard deviations specified. In accordance with the recommendation from EurOtop (2018), the default value is set to 1 standard deviation. limit : bool, optional, default: True If True, the discharge will be set to the limit for zero discharge in case the given discharge is below this limit. If False, the discharge will not be changed. Returns ------- Rc : float the crest freeboard of the structure [m] """ g = 9.81 # check given overtop discharge against EurOtop limit for zero discharge limit_zero_q = np.sqrt(g*Hm0**3) * 0.01 if limit_zero_q > q: msg = (f'Given value of q = {q}, is below EurOtop limit for zero ' f'discharge, which is {np.round(limit_zero_q, 3)}') if limit: msg += f'. Using {np.round(limit_zero_q, 3)} instead as limit=True' q = limit_zero_q user_warning(msg) # convert q from l to m^3 q = q/1000 constant_a = 0.05 + safety*0.012 constant_b = 2.78 - safety*0.17 Rc = 1/constant_b*Hm0 * -np.log(q/(constant_a*np.sqrt(g*Hm0**3))) return Rc
[docs]def vertical_normal(Hm0, q, h, s_m_min_1, safety=1, limit=True): """ Rc for a vertical wall if normal freeboard and breaking waves Compute the crest freeboard for a vertical wall if there is a possibility for breaking waves, but the freeboard is not low. Implementation of equation 7.8 from EurOtop (2018) .. math:: \\frac{q}{\\sqrt{g H_{m 0}^{3}}}=0.0014\\left(\\frac{H_{m 0}} {h s_{m-1,0}}\\right)^{0.5}\\left(\\frac{R_{c}}{H_{m 0}} \\right)^{-3} The reliability of the equation is given by :math:`\\sigma` (0.0014) = 0.0006 Parameters ---------- Hm0 : float the spectral wave height [m] q : float mean overtopping discharge per meter structure width [l/s per m] h : float water depth in front of the toe of the structure [m] s_m_min_1 : float :math:`s_{m-1.0}`, wave steepness with the spectral wave length (:math:`L_{m-1.0}`) [-] safety : float, optional, default: 1 safety factor of the design, positive values increase the safety of the design by increasing the mean value of the model constants with the number of standard deviations specified. In accordance with the recommendation from EurOtop (2018), the default value is set to 1 standard deviation. limit : bool, optional, default: True If True, the discharge will be set to the limit for zero discharge in case the given discharge is below this limit. If False, the discharge will not be changed. Returns ------- Rc : float the crest freeboard of the structure [m] """ g = 9.81 # check given overtop discharge against EurOtop limit for zero discharge limit_zero_q = np.sqrt(g*Hm0**3) * 0.01 if limit_zero_q > q: msg = (f'Given value of q = {q}, is below EurOtop limit for zero ' f'discharge, which is {np.round(limit_zero_q, 3)}') if limit: msg += f'. Using {np.round(limit_zero_q, 3)} instead as limit=True' q = limit_zero_q user_warning(msg) # convert q from l to m^3 q = q/1000 constant = 0.0014 + safety*0.0006 Rc = Hm0 * (q/(np.sqrt(Hm0*g*Hm0**3/(h*s_m_min_1))*constant))**(1/-3) return Rc
[docs]def vertical_low(Hm0, q, h, s_m_min_1, safety=1, limit=True): """ Rc for a vertical wall if low freeboard and breaking waves Compute the crest freeboard for a vertical wall if there is a possibility for breaking waves, and the freeboard is low. Implementation of equation 7.7 from EurOtop (2018) .. math:: \\frac{q}{\\sqrt{g H_{m 0}^{3}}}=0.011\\left(\\frac{H_{m 0}}{h s_{m-1,0}}\\right)^{0.5} \\exp \\left(-2.2 \\frac{R_{c}}{H_{m 0}} \\right) The reliability of the equation is given by :math:`\\sigma` (0.011) = 0.0045 Parameters ---------- Hm0 : float the spectral wave height [m] q : float mean overtopping discharge per meter structure width [l/s per m] h : float water depth in front of the toe of the structure [m] s_m_min_1 : float :math:`s_{m-1.0}`, wave steepness with the spectral wave length (:math:`L_{m-1.0}`) [-] safety : float, optional, default: 1 safety factor of the design, positive values increase the safety of the design by increasing the mean value of the model constants with the number of standard deviations specified. In accordance with the recommendation from EurOtop (2018), the default value is set to 1 standard deviation. limit : bool, optional, default: True If True, the discharge will be set to the limit for zero discharge in case the given discharge is below this limit. If False, the discharge will not be changed. Returns ------- Rc : float the crest freeboard of the structure [m] """ g = 9.81 # check given overtop discharge against EurOtop limit for zero discharge limit_zero_q = np.sqrt(g*Hm0**3) * 0.01 if limit_zero_q > q: msg = (f'Given value of q = {q}, is below EurOtop limit for zero ' f'discharge, which is {np.round(limit_zero_q, 3)}') if limit: msg += f'. Using {np.round(limit_zero_q, 3)} instead as limit=True' q = limit_zero_q user_warning(msg) # convert q from l to m^3 q = q/1000 constant = 0.011 + safety*0.0045 Rc = Hm0/-2.2 * np.log(q/(np.sqrt(Hm0*g*Hm0**3/(h*s_m_min_1))*constant)) return Rc
[docs]def composite_normal(Hm0, q, h, d, s_m_min_1, safety=1, limit=True): """ Rc for a composite wall if normal freeboard and breaking waves Compute the crest freeboard for a composite vertical wall if there is a possibility for breaking waves, but the freeboard is not low. Implementation of equation 7.14 from EurOtop (2018) .. math:: \\frac{q}{\\sqrt{g H_{m 0}^{3}}}=1.3\\left(\\frac{d}{h}\\right)^{0.5} 0.0014\\left(\\frac{H_{m 0}}{h s_{m-1,0}}\\right)^{0.5}\\left( \\frac{R_{c}}{H_{m 0}}\\right)^{-3} The reliability of the equation is given by :math:`\\sigma` (0.0014) = 0.0006. Parameters ---------- Hm0 : float the spectral wave height [m] q : float mean overtopping discharge per meter structure width [l/s per m] h : float water depth in front of the toe of the structure [m] d : float water depth above the toe of the structure [m] s_m_min_1 : float :math:`s_{m-1.0}`, wave steepness with the spectral wave length (:math:`L_{m-1.0}`) [-] safety : float, optional, default: 1 safety factor of the design, positive values increase the safety of the design by increasing the mean value of the model constants with the number of standard deviations specified. In accordance with the recommendation from EurOtop (2018), the default value is set to 1 standard deviation. limit : bool, optional, default: True If True, the discharge will be set to the limit for zero discharge in case the given discharge is below this limit. If False, the discharge will not be changed. Returns ------- Rc : float the crest freeboard of the structure [m] """ g = 9.81 # check given overtop discharge against EurOtop limit for zero discharge limit_zero_q = np.sqrt(g*Hm0**3) * 0.01 if limit_zero_q > q: msg = (f'Given value of q = {q}, is below EurOtop limit for zero ' f'discharge, which is {np.round(limit_zero_q, 3)}') if limit: msg += f'. Using {np.round(limit_zero_q, 3)} instead as limit=True' q = limit_zero_q user_warning(msg) # convert q from l to m^3 q = q/1000 constant = 0.0014 + safety*0.0006 Rc = Hm0 * (q/(np.sqrt(d*g*Hm0**4/(h**2*s_m_min_1))*1.3*constant))**(1/-3) return Rc
[docs]def composite_low(Hm0, q, h, d, s_m_min_1, safety=1, limit=True): """ Rc for a composite wall if low freeboard and breaking waves Compute the crest freeboard for a composite vertical wall if there is a possibility for breaking waves, and the freeboard is low. Implementation of equation 7.15 from EurOtop (2018) .. math:: \\frac{q}{\\sqrt{g H_{m 0}^{3}}}=1.3\\left(\\frac{d}{h} \\right)^{0.5} 0.011\\left(\\frac{H_{m 0}}{h s_{m-1,0}} \\right)^{0.5} \\exp \\left(-2.2 \\frac{R_{c}}{H_{m 0}}\\right) The reliability of the equation is given by :math:`\\sigma` (0.011) = 0.0045. Parameters ---------- Hm0 : float the spectral wave height [m] q : float mean overtopping discharge per meter structure width [l/s per m] h : float water depth in front of the toe of the structure [m] d : float water depth above the toe of the structure [m] s_m_min_1 : float :math:`s_{m-1.0}`, wave steepness with the spectral wave length (:math:`L_{m-1.0}`) [-] safety : float, optional, default: 1 safety factor of the design, positive values increase the safety of the design by increasing the mean value of the model constants with the number of standard deviations specified. In accordance with the recommendation from EurOtop (2018), the default value is set to 1 standard deviation. limit : bool, optional, default: True If True, the discharge will be set to the limit for zero discharge in case the given discharge is below this limit. If False, the discharge will not be changed. Returns ------- Rc : float the crest freeboard of the structure [m] """ g = 9.81 # check given overtop discharge against EurOtop limit for zero discharge limit_zero_q = np.sqrt(g*Hm0**3) * 0.01 if limit_zero_q > q: msg = (f'Given value of q = {q}, is below EurOtop limit for zero ' f'discharge, which is {np.round(limit_zero_q, 3)}') if limit: msg += f'. Using {np.round(limit_zero_q, 3)} instead as limit=True' q = limit_zero_q user_warning(msg) # convert q from l to m^3 q = q/1000 constant = 0.011 + safety*0.0045 Rc = Hm0/-2.2*np.log(q/(np.sqrt(d*g*Hm0**4/(h**2*s_m_min_1))*1.3*constant)) return Rc
[docs]def vertical( Hm0, q, h, d, L_m_min_1, s_m_min_1, safety=1, logger=None, limit=True): """ Compute crest freeboard for vertical and composite vertical walls Compute the crest freeboard, Rc, of a vertical or composite vertical wall for a given mean overtop discharge. The function is an implementation of the decision chart, figure 7.2, from EurOtop (2018). The function determines if the input classifies as a vertical or composite vertical wall, if breaking is possible and if the structure has a low freeboard. Based on the classification the function calls the corresponding function and computes the freeboard. Parameters ---------- Hm0 : float the spectral wave height [m] q : float mean overtopping discharge per meter structure width [l/s per m] h : float water depth in front of the toe of the structure [m] d : float water depth above the toe of the structure [m] L_m_min_1 : float :math:`L_{m-1.0}`, spectral wave length in deep water [m] s_m_min_1 : float :math:`s_{m-1.0}`, wave steepness with the spectral wave length (:math:`L_{m-1.0}`) [-] safety : float, optional, default: 1 safety factor of the design, positive values increase the safety of the design by increasing the mean value of the model constants with the number of standard deviations specified. In accordance with the recommendation from EurOtop (2018), the default value is set to 1 standard deviation. logger : dict, optional, default: None dict to log messages, must have keys 'INFO' and 'WARNINGS' limit : bool, optional, default: True If True, the discharge will be set to the limit for zero discharge in case the given discharge is below this limit. If False, the discharge will not be changed. Returns ------- Rc : float the crest freeboard of the structure [m] """ if h/Hm0 > 4: Rc = vertical_deep(Hm0, q, safety, limit) log = 'overtopping for vertical in deep water' else: if d/h > 0.6: # check if vertical wall if h**2/(Hm0*L_m_min_1) < 0.23: # check if waves are breaking Rc = vertical_normal(Hm0, q, h, s_m_min_1, safety, limit) log = 'overtopping for vertical with normal freeboard' if Rc/Hm0 < 1.35: # check if freeboard is low Rc = vertical_low(Hm0, q, h, s_m_min_1, safety, limit) log = 'overtopping for vertical with low freeboard' else: Rc = vertical_no_breaking(Hm0, q, safety, limit) log = 'overtopping for vertical with no breaking waves' else: # not a vertical wall, treat as composite wall if h*d/(Hm0*L_m_min_1) < 0.65: # check if waves are breaking Rc = composite_normal(Hm0, q, h, d, s_m_min_1, safety, limit) log = 'overtopping for composite with normal freeboard' if Rc/Hm0 < 1.35: # check if freeboard is low Rc = composite_low(Hm0, q, h, d, s_m_min_1, safety, limit) log = 'overtopping for composite with low freeboard' else: Rc = vertical_no_breaking(Hm0, q, safety, limit) log = 'overtopping for composite with no breaking waves' if logger != None: logger['INFO'].append(log) return Rc