PK!2py_wave_runup/__init__.py__version__ = "0.1.0" PK!?py_wave_runup/models.pyimport numpy as np class Stockdon2006(object): """ Empirical wave runup model as per Stockdon et al. (2006). DOI: 10.1016/j.coastaleng.2005.12.005 """ def __init__(self, Hs, beta, Lp=None, Tp=None): # Ensure wave length or peak period is specified if all(v is None for v in [Lp, Tp]): raise ValueError("Expected either Lp or Tp args") # Calculate wave length if it hasn't been specified. if not Lp: self.Tp = np.atleast_1d(Tp) self.Lp = 9.81 * (self.Tp ** 2) / 2 / np.pi else: self.Lp = np.atleast_1d(Lp) self.Hs = np.atleast_1d(Hs) self.beta = np.atleast_1d(beta) # Calculate Iribarren number. Need since there are different # parameterizations for dissipative and intermediate/reflective beaches. self.zeta = self.beta / (self.Hs / self.Lp) ** (0.5) @property def R2(self): # Generalized runup (Eqn 19) result = 1.1 * ( 0.35 * self.beta * (self.Hs * self.Lp) ** 0.5 + ((self.Hs * self.Lp * (0.563 * self.beta ** 2 + 0.004)) ** 0.5) / 2 ) # For dissipative beaches (Eqn 18) dissipative_mask = self.zeta < 0.3 result[dissipative_mask] = ( 0.043 * (self.Hs[dissipative_mask] * self.Lp[dissipative_mask]) ** 0.5 ) result = self._return_one_or_array(result) return result @property def setup(self): result = 0.35 * self.beta * (self.Hs * self.Lp) ** 0.5 result = self._return_one_or_array(result) return result @property def sinc(self): result = 0.75 * self.beta * (self.Hs * self.Lp) ** 0.5 result = self._return_one_or_array(result) return result @property def sig(self): result = 0.06 * (self.Hs * self.Lp) ** 0.5 result = self._return_one_or_array(result) return result def _return_one_or_array(self, val): # If only calculating a single value, return a single value and not an array # with length one. if val.size == 1: return val.item() else: return val PK!HڽTU#py_wave_runup-0.1.1.dist-info/WHEEL A н#Z;/"d&F[xzw@Zpy3Fv]\fi4WZ^EgM_-]#0(q7PK!Hz }h&py_wave_runup-0.1.1.dist-info/METADATATO0LQۅ&E`: lHűg;~$޽r?ыLxAuR ]r!&`z'j*+C CR*m2dhA R3%%R#bq jRx((yTXPu>*Nc L"2h.!9-sVb(ZA81: 7p%0լZ2]g# V Rv{3s+eSQU4bvlh|q_7'PV4u4r p?zz3&0i>bֲ'(2LINzmfNK4/=^׍ x=2~d5hy<Ƃq=)URb)#ydRWVxasɣL۞iw>[QK\<:w6R3tZ~)_,G~\wb+[y*K$ Āp{Y?iV{}zޭa/oҒ1Y#rwL-7t). 6{ y[E槚pf[',sCzOIB3 C*b%!PK!H@$py_wave_runup-0.1.1.dist-info/RECORDn0лR=F AJ@. pZѢ~̓y't,UM,f(+~Jho1\&6m j\+R&F 4';U͇ W_ ?ubBUYÕWrM2О?>5Tl8ikYc~ܪ@Hf7vŌ*?zvtZErE /-XZ/uv߆$YIUdEΘbDiHRs^i=0h0PK!2py_wave_runup/__init__.pyPK!?Npy_wave_runup/models.pyPK!HڽTU#[ py_wave_runup-0.1.1.dist-info/WHEELPK!Hz }h& py_wave_runup-0.1.1.dist-info/METADATAPK!H@$ py_wave_runup-0.1.1.dist-info/RECORDPK