Source code for wavespectra.construct.jonswap

import numpy as np
from typing_extensions import deprecated
from wavespectra.construct.helpers import (
    spread,
    check_coordinates,
    arrange_inputs,
    make_dataset,
)


[docs] @deprecated( "All functions and classes in `wavespectra.construct` will be replaced in " "**4.0.0** by a new spectral reconstruction api.", ) def jonswap( tp, dp, alpha, gamma=3.3, dspr=20, freqs=np.arange(0.04, 1.0, 0.02), dirs=np.arange(0, 360, 10), coordinates=[], sumpart=True, ): """Constructs JONSWAP spectra.""" check_coordinates(tp, coordinates) # Arrange inputs tp_m, dp_m, alpha_m, gamma_m, dspr_m = arrange_inputs(tp, dp, alpha, gamma, dspr) f = freqs.reshape((-1, 1)) # Calculate JONSWAP fp = 1.0 / np.array(tp_m) sig = np.where(f <= fp, 0.07, 0.09) r = np.exp(-(f - fp) ** 2.0 / (2 * sig ** 2 * fp ** 2)) S = 0.0617 * alpha_m * f ** (-5) * np.exp(-1.25 * (f / fp) ** (-4)) * gamma_m ** r # Apply spreading G1 = spread(dp_m, dspr_m, dirs) spec = S * G1 # sum partitions if sumpart: idimpart = [i for i, t in enumerate(coordinates) if t[0] == "part"] if idimpart: spec = np.sum(spec, axis=idimpart[0]) coordinates.pop(idimpart[0]) return make_dataset(spec, freqs, dirs, coordinates)