Spectre de JONSWAP

Informations

  • Fichier : Knu/Scripts/Librairies/jonswap.py

  • Auteur: Victor Baconnet

  • Date de dernière modification: 27 août 2021

Description

Fonctions pour générer un spectre JONSWAP et les coefficients d’amplitude, périodes, et déphasages pour générer le signal de houle irrégulière.

Génération du spectre

Le spectre de JONSWAP est généré selon la formule suivante

\[S(\omega,a) = aH_s^2 \omega_p^4 \omega^{-5} e^{-\frac{3}{4}\left( \frac{\omega_p}{\omega}\right)^4} \gamma^b\]

avec

\[b=\exp{-\frac{(\omega - \omega_p)^2}{2\sigma^2\omega_p^2}}\]

et \(\sigma=0.07\) si \(\omega < \omega_p\), \(\sigma=0.09\) sinon. La constante réelle \(a\) peut être déterminée en utilisant la définition de \(H_s\)

\[H_s = 4\sqrt{\int_{0}^{+\infty}{S(\omega,a)d\omega}}\]

De telle sorte que :

\[a = \frac{H_s^2}{16}\left(\int_{0}^{+\infty}{S(\omega, a=1)d\omega}\right)^{-1}\]

Génération des amplitudes

Les hauteurs crête-à-creux sont générées avec la relation:

\[\frac{H_i}{2} = \sqrt{S_i\Delta\omega}\]

Génération des déphasages

Les déphasages sont générés aléatiroement entre \(0\) et \(2\pi\).

Utilisation

Les fonctions contenues dans ce fichier sont à réutiliser dans d’autres fichiers pour générer de la houle irrégulière, comme dans genHouleIrreguliere.

L’éxecution de ce fichier n’affichera aucun résultat.

Exemple d’utilisation

import numpy as np
import matplotlib.pyplot as plt    
from jonswap import genJonswapParams, jonswap

# Paramètre du spectre jonswap
Tmin = 0.87
Tmax = 2.19
Tp = 1.57
Hs = 0.125
gamma = 3.3

wmin = 2.0*np.pi/Tmax #Fréquence min
wmax = 2.0*np.pi/Tmin #Fréquence max
wp   = 2.0*np.pi/Tp   #Pulsation pic
Ncomposantes = 1000
dw = (wmax - wmin)/Ncomposantes #Incrément de fréquence
w = np.arange(wmin,wmax+dw,dw)  #Génération du vecteur de fréquences

# Génération des Amplitudes, déphasages et spectre
spectre = jonswap(Hs,Tp,gamma,w)
H, phi = genJonswapParams(spectre, w)

# Génération de houle irrégulière
t = np.linspace(0.0,100,1001)

houleIrreg = 0.0
for i in range(len(H)):
    houleIrreg += 0.5*H[i]*np.sin(w[i]*t + phi[i])

# Affichage des résultats
fig, axs = plt.subplots(figsize = (10,8), nrows = 2)

axs[0].plot(w, spectre)
axs[0].set_xlabel(r"$\omega$ (rad/s)")
axs[0].set_ylabel(r"$S(\omega)$ (m²s)")
axs[0].set_xlim((wmin, wmax))
axs[0].grid()
axs[0].set_title(rf"Spectre de paramètres Hs = {Hs}, Tp = {Tp} et $\gamma$ = {gamma}")

axs[1].plot(t,houleIrreg)
axs[1].set_xlabel("Temps (s)")
axs[1].set_ylabel(r"$\eta(t)$ (m)")
axs[1].set_xlim((0, 100))
axs[1].grid()
axs[1].set_title("Signal de houle irrégulière")

Dépendances

  • numpy

  • matplotlib

  • sys,

Code source

Lien vers le code source

Fonctions

jonswap.genJonswapParams(spectreJonswap, w)

Calcule les amplitudes, déphasages et spectre pour générer une onde irrégulière

Parameters
  • spectreJonswap (float) – le spectre de densité d’énergie JONSWAP

  • w (float ou numpy.ndarray) – Fréquence en rad/s

Returns

Amplitudes et déphasages (aléatoires entre \(0\) et \(2\pi\))

Return type

float ou numpy.ndarray

jonswap.integre(vec, dx)

Intègre un vecteur selon la méthode des trapèzes

Parameters
  • vec (numpy.ndarray ou itérable) – Vecteur de valeurs à intégrer

  • dx (float) – Pas de discrétisation

Returns

res : scalaire correspondant à l’intégrale du vecteur

Return type

float

jonswap.jonswap(Hs, Tp, gamma, w)

Renvoie une densité spectrale de puissance selon le modèle JONSWAP, avec le calcul de la constante a

Parameters
  • Hs (float) – Hauteur caractéristique

  • Tp (float) – Période pic

  • gamma (float) – Coefficient d’élancement

  • w (float ou numpy.ndarray) – Fréquence en rad/s

Returns

Densité spectrale de puissance selon le modèle JONSWAP

Return type

float ou numpy.ndarray

jonswap.sigma(w, wp)

Calcule le coefficient \(\sigma = 0.07\) si \(\omega < \omega_p\) et \(\sigma = 0.09\) si \(\omega > \omega_p\), à partir d’une combinaison de fonctions de Heaviside. Cela permet de ne pas écrire avec des “if” pour gagner du temps si on utilise un vecteur w très grand.

Parameters
  • w (float ou numpy.ndarray) – Valeur ou vecteur de fréquences en rad/s

  • wp (float) – fréquence pic en rad/s

Returns

0.07 si \(\omega < \omega_p\), 0.09 sinon

Return type

float

jonswap.spectreJonswap(a, Hs, Tp, gamma, w)

Calcule le spectre de Jonswap avec la formule donnée dans le manuel du canal à houle

Parameters
  • a (float) – le coefficient qui doit faire l’objet de l’optimisation

  • Hs (float) – hauteur caractéristique

  • Tp (float) – période pic

  • gamma (float) – Coefficient d’élancement

  • w (numpy.ndarray) – vecteur de fréquences en rad/s

Returns

vecteur densité spectrale de puissance de la même taille que w