示例#1
0
 def test_reflective(self):
     model = models.Stockdon2006(Hs=4, Tp=11, beta=0.1)
     assert model.R2 == approx(2.54, abs=0.01)
     assert model.setup == approx(0.96, abs=0.01)
     assert model.sig == approx(1.65, abs=0.01)
     assert model.sinc == approx(2.06, abs=0.01)
     assert model.swash == approx(2.64, abs=0.01)
示例#2
0
 def test_list_input(self):
     model = models.Stockdon2006(Hs=[1, 2], Lp=[100, 200], beta=[0.05, 0.1])
     assert model.R2 == approx((0.59, 1.84), abs=0.1)
     assert model.setup == approx((0.17, 0.70), abs=0.1)
     assert model.sig == approx((0.6, 1.2), abs=0.1)
     assert model.sinc == approx((0.37, 1.5), abs=0.1)
     assert model.swash == approx((0.71, 1.92), abs=0.01)
示例#3
0
 def test_dissipative(self):
     model = models.Stockdon2006(Hs=4, Tp=11, beta=0.001)
     assert model.R2 == approx(1.18, abs=0.01)
     assert model.setup == approx(0.0096, abs=0.01)
     assert model.sig == approx(1.65, abs=0.01)
     assert model.sinc == approx(0.02, abs=0.01)
     assert model.swash == approx(1.65, abs=0.01)
示例#4
0
def load_random_sto06(
        seed=12345,
        t_start=datetime(2000, 1, 1),
        t_end=datetime(2000, 1, 2),
        dt=timedelta(hours=1),
        hs_range=(1, 3),
        tp_range=(6, 10),
        beta_range=(0.08, 0.1),
        noise_std=0.3,
):
    """
    Loads a randomly generated wave runup dataframe.

    This function returns a randomly generated :obj:`pandas.DataFrame` containing wave
    parameters and noisey runup values calculated using the Stockdon et al (2006) runup
    model. This random data is intended to be used to demonstrate runup analysis
    without having to use actual data

    Args:
        seed (:obj:`int`): Seed the random number generator
        t_start (:obj:`datetime.datetime`): Start time of the dataframe
        t_end (:obj:`datetime.datetime`): End time of the dataframe
        dt (:obj:`datetime.timedelta`): Time interval of the dataframe
        hs_range (:obj:`tuple`): Range (`min`, `max`) of the significant wave height
        tp_range (:obj:`tuple`): Range (`min`, `max`) of the peak wave period
        beta_range (:obj:`tuple`): Range (`min`, `max`) of the nearshore slope
        noise_std (:obj:`float`): Standard deviation (in meters) of the wave runup
            statistics.

    Returns:
        A :obj:`pandas.DataFrame`

    Examples:
        Get

    >>> from py_wave_runup import datasets
    >>> df = datasets.load_random_sto06()
    >>> df.head()
                               hs        tp      beta  ...     swash       sig      sinc
    2000-01-01 00:00:00  3.000000  6.000000  0.098110  ...  1.171474  0.717714  0.894084
    2000-01-01 01:00:00  2.850109  6.128432  0.099052  ...  1.378190  0.919351  1.104072
    2000-01-01 02:00:00  2.865462  6.461471  0.099766  ...  1.154970  0.664189  0.866796
    2000-01-01 03:00:00  2.942888  6.750824  0.100000  ...  1.223142  0.701520  0.918580
    2000-01-01 04:00:00  2.906808  6.937742  0.099069  ...  2.001251  1.476527  1.687905
    <BLANKLINE>
    [5 rows x 8 columns]
    """

    # Create the time index for our dataframe
    index = pd.date_range(start=t_start, end=t_end, freq=dt)
    df = pd.DataFrame(index=index)

    # Create some random noise
    random.seed(seed)
    np.random.seed(seed)
    pn = PerlinNoise(num_octaves=7, persistence=0.5)

    # Generate input parameters. Note that we offset the noise value by the length of
    # the index to avoid having the same timeseries shape for each parameter.
    l = len(index)
    hs = minmax_scale([pn.noise(i) for i, _ in enumerate(index)], hs_range)
    tp = minmax_scale([pn.noise(i + l) for i, _ in enumerate(index)], tp_range)
    beta = minmax_scale([pn.noise(i + 2 * l) for i, _ in enumerate(index)],
                        beta_range)

    # Generate wave parameters based on Stockdon
    model = models.Stockdon2006(Hs=hs, Tp=tp, beta=beta)

    # Generate additional noise
    noise = np.random.normal(0, noise_std, l)

    # Combine into a dataframe
    df["hs"] = hs
    df["tp"] = tp
    df["beta"] = beta
    df["r2"] = model.R2 + noise
    df["setup"] = model.setup + noise
    df["swash"] = model.swash + noise
    df["sig"] = model.sig + noise
    df["sinc"] = model.sinc + noise

    return df
示例#5
0
 def test_different_list_input(self):
     with raises(ValueError):
         models.Stockdon2006(Hs=[1, 2], Lp=[100, 200], beta=[0.1])
示例#6
0
 def test_no_wave_length(self):
     with raises(ValueError):
         models.Stockdon2006(Hs=1, beta=0.1)
示例#7
0
 def test_depth_and_wavelength(self):
     model = models.Stockdon2006(Hs=4, Lp=200, h=15, beta=0.05)
     assert model.R2 == approx(1.69, 0.1)
示例#8
0
 def test_depth_and_period(self):
     model = models.Stockdon2006(Hs=4, Tp=12, h=15, beta=0.05)
     assert model.R2 == approx(1.00, 0.1)
示例#9
0
 def test_wave_length(self):
     model = models.Stockdon2006(Hs=4, Lp=200, beta=0.05)
     assert model.R2 == approx(1.69, 0.1)