You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

133 lines
4.5 KiB
Python

import unittest
import numpy as np
from numpy.testing import assert_array_almost_equal
from wafo.spectrum.models import (Bretschneider, Jonswap, OchiHubble, Tmaspec,
Torsethaugen, McCormick, Wallop, Spreading)
class TestCase(unittest.TestCase):
def assertListAlmostEqual(self, list1, list2, decimal=5, msg=''):
assert_array_almost_equal(list1, list2, decimal, msg)
class TestSpectra(TestCase):
def test_bretschneider(self):
S = Bretschneider(Hm0=6.5, Tp=10)
vals = S((0, 1, 2, 3)).tolist()
true_vals = [0., 1.69350993, 0.06352698, 0.00844783]
self.assertListAlmostEqual(vals, true_vals)
def test_if_jonswap_with_gamma_one_equals_bretschneider(self):
S = Jonswap(Hm0=7, Tp=11, gamma=1)
vals = S((0, 1, 2, 3))
true_vals = np.array([0., 1.42694133, 0.05051648, 0.00669692])
self.assertListAlmostEqual(vals, true_vals)
w = np.linspace(0, 5)
S2 = Bretschneider(Hm0=7, Tp=11)
# JONSWAP with gamma=1 should be equal to Bretscneider:
self.assertListAlmostEqual(S(w), S2(w))
def test_tmaspec(self):
S = Tmaspec(Hm0=7, Tp=11, gamma=1, h=10)
vals = S((0, 1, 2, 3))
true_vals = np.array([0., 0.70106233, 0.05022433, 0.00669692])
self.assertListAlmostEqual(vals, true_vals)
def test_torsethaugen(self):
S = Torsethaugen(Hm0=7, Tp=11, gamma=1, h=10)
vals = S((0, 1, 2, 3))
true_vals = np.array([0., 1.19989709, 0.05819794, 0.0093541])
self.assertListAlmostEqual(vals, true_vals)
vals = S.wind(range(4))
true_vals = np.array([0., 1.13560528, 0.05529849, 0.00888989])
self.assertListAlmostEqual(vals, true_vals)
vals = S.swell(range(4))
true_vals = np.array([0., 0.0642918, 0.00289946, 0.00046421])
self.assertListAlmostEqual(vals, true_vals)
def test_ochihubble(self):
S = OchiHubble(par=2)
vals = S(range(4))
true_vals = np.array([0., 0.90155636, 0.04185445, 0.00583207])
self.assertListAlmostEqual(vals, true_vals)
def test_mccormick(self):
S = McCormick(Hm0=6.5, Tp=10)
vals = S(range(4))
true_vals = np.array([0., 1.87865908, 0.15050447, 0.02994663])
self.assertListAlmostEqual(vals, true_vals)
def test_wallop(self):
S = Wallop(Hm0=6.5, Tp=10)
vals = S(range(4))
true_vals = np.array([0.00000000e+00, 9.36921871e-01, 2.76991078e-03,
7.72996150e-05])
self.assertListAlmostEqual(vals, true_vals)
class TestSpreading(TestCase):
def test_cos2s(self):
theta = np.linspace(0, 2 * np.pi)
d = Spreading(type='cos2s')
dvals = [[1.10168934e+00],
[1.03576796e+00],
[8.60302298e-01],
[6.30309013e-01],
[4.06280137e-01],
[2.29514882e-01],
[1.13052757e-01],
[4.82339343e-02],
[1.76754409e-02],
[5.50490020e-03],
[1.43800617e-03],
[3.09907242e-04],
[5.39672445e-05],
[7.39553743e-06],
[7.70796579e-07],
[5.84247670e-08],
[3.03264905e-09],
[9.91950201e-11],
[1.81442131e-12],
[1.55028269e-14],
[4.63223469e-17],
[2.90526245e-20],
[1.35842977e-24],
[3.26077455e-31],
[1.65021852e-45],
[1.65021852e-45],
[3.26077455e-31],
[1.35842977e-24],
[2.90526245e-20],
[4.63223469e-17],
[1.55028269e-14],
[1.81442131e-12],
[9.91950201e-11],
[3.03264905e-09],
[5.84247670e-08],
[7.70796579e-07],
[7.39553743e-06],
[5.39672445e-05],
[3.09907242e-04],
[1.43800617e-03],
[5.50490020e-03],
[1.76754409e-02],
[4.82339343e-02],
[1.13052757e-01],
[2.29514882e-01],
[4.06280137e-01],
[6.30309013e-01],
[8.60302298e-01],
[1.03576796e+00],
[1.10168934e+00]]
self.assertListAlmostEqual(d(theta)[0], dvals)
if __name__ == '__main__':
unittest.main()