Académique Documents
Professionnel Documents
Culture Documents
Tuteur académique :
Eric Darrigrand
Auteur :
Cédric Jourdain Tuteurs en entreprise : François
Batifoulier
Youen Kervella
8 septembre 2015
Remerciements
Je tiens à remercier vivement mon maitre de stage, M. François Batifoulier, pour son accueil,
le temps qu’il m’a consacré, le partage de son expertise et pour les conditions optimales qu’il a
su instaurer à Open Ocean.
Je remercie également M. Youen Kervella pour son aide technique ainsi que M. Renaud La-
borbe et M. Jérôme Cuny pour m’avoir accueilli dans leur entreprise.
Et enfin je remercie les autres stagiaires qui ont partagé mon bureau pendant ces six mois et
qui ont su me supporter, me conseiller, m’aider et m’accompagner tout au long de cette aventure
Brestoise.
1
Table des matières
Glossaire 4
Introduction 5
1 Open Ocean 6
1.1 L’entreprise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Le personnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Les services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.1 Metocean Analytics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2 WaveWatch III 9
2.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Conception du programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Chaine de traitement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 Fichier d’entrée du préprocesseur de grille . . . . . . . . . . . . . . . . . . . . . . 14
2.5.1 Discrétisation spectrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.2 Discrétisation temporelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.3 Paramètres réglables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5.4 Génération automatique de grille . . . . . . . . . . . . . . . . . . . . . . . 15
4 Intégration de la glace 26
4.1 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2 Recherche de données de glace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.1 HadISST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.2 MyOcean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.3 ECMWF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3 Implementation des données de glace . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4 Tests et validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2
TABLE DES MATIÈRES 3
6 Conclusion et perspectives 41
A Scores 42
D make_input_ww3.sh 48
4
Introduction
La modélisation numérique des états de mer est un domaine qui se développe depuis main-
tenant une cinquantaine d’années, cela a commencé avec les travaux de l’équipe du centre de
météorologie de Casablanca au Maroc qui a mis au point une méthode spectrale permettant de
caractériser les états de mer (Gelci et coll. 1957). Aujourd’hui, après de nombreuses années de
recherche et de développement différents modèles numériques de vagues existent : WaveWatch
III, Sawn, Tomawac etc.
La modélisation de ces états de mer a trouvé des applications dans des domaines très variées
tels que le dimensionnement d’ouvrage côtier, la sécurité de la navigation, l’étude de la stabilité
des plages ou encore les loisirs nautiques. L’entreprise Open Océan exploite cette dernière appli-
cation en utilisant notamment le logiciel WaveWatch III qui leur permet de simuler les vagues
pour tout type de projet en mer.
Alors que Open Océan focalisait son activité en Europe occidentale, elle désire aujourd’hui
étendre son activité dans le monde entier. Mon stage aura donc pour objectif la mise en place et
l’optimisation de la configuration d’un modèle global de vagues avec le logiciel WAVEWATCH
III en s’appuyant sur un modèle existant couvrant le nord de l’océan Atlantique. La seconde
partie de mon stage sera l’amélioration de cette configuration globale en intégrant la glace et les
icebergs dans le modèle numérique.
5
Partie 1
Open Ocean
1.1 L’entreprise
Open Ocean est une société basée en France avec son siège sociale à Paris et son centre de
recherche et développement à Brest [1]. Open Ocean, dont l’histoire débute en 2009, est une
société spécialisée dans la modélisation numérique des océans (vagues, courants, sédiments) pour
tout type de construction en mer : éolien offshore, énergies marines renouvelables ou encore pour
l’industrie des hydrocarbures.
1.2 Le personnel
L’équipe d’Open Océan est composé actuellement de cinq membres permanents :
— Renaud Laborbe : Co-fondateur et CEO d’Open Ocean
Titulaire d’une maitrise de mécanique des fluides et d’un DEA d’Océanographie Météoro-
logie et Environnement.
— Jérôme Cuny : Co-fondateur et directeur commercial
Jérôme Cuny est docteur en océanographie physique, diplômé de l’Université de Washington
à Seattle aux Etats-Unis.
— Youen Kervella : Responsable R&D
Docteur en hydrodynamique et en dynamique sédimentaire, il a rejoint l’entreprise en 2011,
après une thèse et un post-doctorat à l’Ifremer.
— François Batifoulier : Responsable de projets
Titulaire d’une thèse en hydrodynamique, François Batifoulier a rejoint l’équipe d’Open
Ocean en Novembre 2011 au sein du département R&D de Brest.
— Raphael Dubois : Ingénieur de projet
Diplômé de l’école polytechnique en mécanique physique pour l’environnement et titulaire
du M2 OACOS de l’Université Paris IV Pierre et Marie Curie, il a rejoint l’équipe d’Open
Ocean à Paris.
J’ai effectué mon stage au sein du departement recherche et développement à Brest aux cotés
de trois autres stagiaires : Antoine Mallegol, Yves Moisan tous deux étudiant à l’ENIB et Victor
Martin des arts et métiers.
6
1.3. LES SERVICES 7
Figure 1.1 – Le département R&D d’Open Ocean. De bas en haut et de gauche à droite :
Y. Kervalla, C. Jourdain, R. Laborbe, V. Martin, F. Batifoulier et Y. Moisan. (crédits : Ouest
France)
Pour réaliser leurs études, les chercheurs d’Open Ocean s’appuient sur de nombreux outils
de simulation numérique (MARS3D, WaveWatch III, OpenTelemac, Gerris...) et sur des outils
développés en interne. Open Ocean propose ainsi différents services :
• Analyse de données permettant le choix d’un site idéal,
• Étude de potentiel énergétique,
• Estimation du taux de charge (pour le dimensionnement des structures maritimes),
• Étude d’impacts environnementaux
• Recherche et développement pour des projets d’énergie offshore.
Sur la figure 1.2 un exemple de statistique que l’on peut obtenir en un clic est montré ; c’est
un rose de distribution des courant en un point donné
Partie 2
WaveWatch III
2.1 Principe
La modélisation de l’état de la mer est fondée sur la notion de spectre [3]. Ce spectre est
une décomposition de l’énergie des vagues selon les périodes et directions des vagues et ce en
tout point de la surface océanique. Chaque composante de ce spectre d’énergie est un train de
vagues régulières, la somme de plusieurs trains de vagues allant dans différentes directions ✓ avec
différentes fréquences f décrit pleinement l’état de la mer.
Figure 2.1 – Spectre de densité d’énergie F (k, ✓). Sur ce diagramme, la direction des zones
colorées indique la direction d’où vient la houle, tandis que la distance au centre représente
la fréquence f = 1/T . Le niveau de couleur donne la densité d’énergie normalisée. Source de
l’image : [5]
9
2.1. PRINCIPE 10
Bien que le spectre de densité d’énergie F (k, ✓) décrit relativement bien les vagues de surface
des océans [6], le spectre de densité d’action N (k, ✓) = F (k, ✓)/ , est plus approprié pour les
modèles de vagues numériques. En effet, la densité d’action est conservée lors de la propagation
en présence d’un courant local, alors que la densité d’énergie F (k, ✓) ne l’est pas [7].
Afin de suivre l’évolution de l’énergie des vagues, le modèle numérique WaveWatch III calcul
l’évolution de la densité d’action N (k, ✓, x, t) d’un endroit de l’océan à un autre en résolvant
l’équation de conservation du spectre de densité d’actiondes ondes [8][9](pour amélio-
rer la lisibilité, le spectre sera désormais noté simplement N )
@N
@t + rxy · [(Cg + U)N ] + @ @k
@k @t N + @ @✓
@✓ @t N = S
, (2.1)
où rxy est l’opérateur de divergence spatiale restreint à la surface océanique, Cg = @ /@k est
la vitesse de groupe, U est la vitesse d’advection (fonction du courant), la fréquence intrin-
sèque et S représente le terme source pour la formation et la dissipation des vagues. Le premier
terme de la partie gauche de l’équation 2.1 est la partie cinématique l’équation, le second partie
de l’équation est le terme de propagation de l’énergie dans un espace en deux dimensions. Le
troisième terme représente le changement de fréquence radian en raison des variations de pro-
fondeur et du courant et enfin le quatrième terme représentent les effets de réfraction induit par
le courant de profondeur. La partie droite de l’équation contient le terme source/puits noté S,
il représente tous les processus physiques qui génèrent, dissipent, ou redistribuent l’énergie des
vagues. L’équation 2.1 régit l’évolution du spectre d’action pour des vagues se propageant dans
un milieu non-homogène et non-permanent, la densité spectrale d’action de l’état de mer est
conservé aux termes sources et puits près (S).
L’équation de conservation du spectre de densité d’action (2.1) est écrite pour chaque com-
posante spectrale (généralement 24 directions x 32 fréquences) et toutes ces équations qui en
résultent sont couplées par les termes physiques du modèle [10]
— "Braquage des vagues" : l’énergie provenant d’une direction est décalée à une énergie pro-
venant d’une autre direction (interaction vague-vague)
L’équation de conservation du spectre de densité d’action des ondes (2.1) est l’équation de
base du modèle de vagues. Cependant, une version modifiée de cette équation est utilisée dans le
modèle. Lorsque l’on résout l’équation (2.1) directement, une réduction de la résolution spectrale
se produit à l’approche des côtes, i.e dans les eaux peu profondes [6]. Pour pallier cette perte de
résolution il est nécessaire de résoudre l’équation en utilisant une grille avec un nombre d’onde
variable. Cette grille va incorporer les changements cinématiques du nombre d’onde provenant
du phénomène de "wave shoaling". À l’approche des côtes la profondeur diminue ce qui a pour
effet de réduire la vitesse des vagues et donc d’augmenter l’amplitude des vagues et ainsi de
modifier la longueur d’onde, la fréquence quant à elle reste constante. On désignera cette grille
d’onde variable par . En intégrant cette grille au modèle, l’équation de conservation du spectre
de densité d’action des ondes (2.1) devient :
@ ẏN ˙
@ N
@t cg + @ ẋN
@x cg + @y cg + @ ̇N
@ cg + @ ✓N
@✓ cg = 0, (2.2)
où
@k
̇ @ = cg 1@ @d
@d ( @t + U · rx d) k· @U
@s ,
(2.3)
L’équation (2.2) est résolue en utilisant une méthode à pas fractionnaire, méthode très utilisée
pour la modélisation des vagues. La résolution est basée sur une méthode de splitting qui permet
2.2. FONCTIONNEMENT 11
de diviser la résolution de l’équation en plusieurs étapes. Ces étapes résolvent des sous-système
stable tandis que le système général reste instable. De ce fait, dans le modèle de vagues Wave-
Watch III, le système (2.2) est remplacé par quatre sous-systèmes correspondant chacun à une
des étapes décrites dans le paragraphe suivant, chacune de ces étapes nécessitent un pas de temps
spécifique.
La première étape prend en compte les variations temporelles de la profondeur, ainsi que
les changements correspondant dans la grille au nombre d’onde variable. Pour cette étape on
prendra un pas de temps dit "global" tg , pour lequel l’ensemble de la solution est propagée
dans le temps et ou les intervalles d’entrée du vent et des courants sont interpolés. Les autres
étapes fractionnelles prennent en compte la propagation spatiale, la propagation intra-spectrale
et les termes sources.
2.2 Fonctionnement
La figure ci-dessous résume le fonctionnement du programme WaveWatch III
bathymétrie &
trait de côte
(Mask)
Vents, courant,
niveau d’eau, Champs spectral des
température de WaveWatch III vagues en tout point
l'eau, glaces, Modèle
icebergs...
Autres sorties
i. Spectre local
Propagation Physique du modèle ii. Paramètre moyen : Hs,
i. isotrope longueur d'onde moyenne,
i. croissance (input du vent)
ii. réfraction période moyenne
ii. décroissance (déferlement)
iii. dispersion
iii.interaction vague-vague
Le coût d’un modèle de vagues peut être beaucoup plus élevé que celui d’un modèle de
circulation océanique avec la même résolution horizontale et verticale. En effet, les modèles de
vagues utilisent généralement plus de variables/données. La précision d’un modèle de vagues
dépend essentiellement de l’exactitude des champs de forçage (vents, les courants, la glace de
mer, la bathymétrie, la rugosité du fond ...), l’exactitude des paramétrages qui représentent la
production, les processus d’échange et de dissipation et la qualité des méthodes numériques
utilisées pour résoudre l’équation de conservation du spectre de densité d’action (2.1).
launch_hindcast_ww3.sh setup_ww3.sh
build_time_and_list.sh
Bathymétrie ww3_grid.inp.model
Preprocesseur de grille
Trait de côtes :
- continent : .mask
make_grids_ww3.sh - petites îles : .obs
paramètres réglables :
Pre-processing
Glace et iceberg
make_input_ww3.sh Niveau d'eau
Vents
Courant
make_run_ww3.sh
Paramètres spectral
make_output_ww3.sh
Paramètres standard
moyen des vagues
Formatage des sorties (Hs, Tm01, Dir...)
spectrales et 2D
make_format_ww3.sh
La première étape consiste à définir la simulation que l’on veut réaliser dans le script shell
setup_ww3.sh, ce dernier va contenir :
• les dates de simulation,
• le modèle utilisé (global ou localisé sur une zone plus petite e.g la zone Atlantique nord),
• l’organisation des entrées du modèle : les champs de forçages, leurs sources et leurs cali-
brages,
• le type de parallélisation,
• les parties de code qui doivent être exécutées (préprocesseur de grille, condition initiale,
entrées, calculs, création des fichiers de sorties),
• les chemins absolus de la configuration, des codes sources, des fichiers de redémarrage, des
fichiers de forçages etc.,
• les options de sorties des résultats (pas de temps, les champs de sorties).
Pour exécuter Wavewatch III on fait appel à un setup (setup_ww3.sh) ainsi qu’à un script
shell qui organise le lancement des sous-routines (le launch_hindcast_ww3.sh), ce dernier va
prendre le build_time_and_list.sh en source, c’est-à-dire qu’il va lire et exécuter les commandes
contenues dans ce fichier avec l’environnement du shell en cours.
2.5. FICHIER D’ENTRÉE DU PRÉPROCESSEUR DE GRILLE 14
Sur la figure 2.5 on a exécuté WaveWatch III en local, mais en pratique, étant donnée le
volume de données à traiter, il est impératif d’exécuter le programme sur une une grappe de
serveurs (cluster).
Le "Processing" est l’étape d’exécution du modèle de vagues, c’est à ce niveau qu’il va lancer
les calculs nécessaires à la résolution des équations (2.2). Cette étape d’exécution de modèle se
fait via le script make_run_ww3.sh.
La dernière étape est le "Post-processing", elle va permettre la création des fichiers de sorties
et leurs formatages (dans notre cas on formate ces données au format NetCDF4).
le pas temps spatial txy est le premier des pas de temps qui doit être défini ; il doit satisfaire
la condition de Courant-Friedrichs-Levy (CFL) : la vitesse des vagues les plus rapides dans le
modèle doit être inférieur ou égale à l’espacement de la grille (la taille de la maille) divisé par
le pas de temps. Par conséquent, chaque grille va posséder son propre txy qui sera déterminée
par la résolution de la grille, la latitude maximal de la grille et par la première fréquence.
Grâce à ces switchs nous définissons le schéma de propagation voulu (PR3 : schéma de
propagation d’ordre élevé, UQ : schéma de propagation au 3 ème ordre). Ils définissent aussi les
méthodes utilisées pour le terme source :
a) Phénomène de dissipation,
b) Interactions non-linéaires (vague-vague)
ils définissent également les paramètres physiques :
1. Frottement sur le fond marin,
2. Amortissement due à la présence de glace,
3. Phénomène de réflexion,
4. Phénomène de déferlement,
5. Méthodes d’interpolation pour le vent,
6. Méthodes d’interpolation pour le courant
Ensuite à l’aide de chaînes de caractère appelée ’listnames’ littéralement ’listes de nom’, on
définit les constantes du terme source a) et b) et des paramètres physiques (1., 2., 3., 4. et 5.).
J’ai donc créer une méthode python write_to_ww3 (cf. annexe C) qui, à partir de donnée
bathymétrique, sauvegarde les données dans des fichiers destinés au préprocesseur de grille de
WaveWatch III (ww3_grid) :
1. un fichier avec les profondeurs (en mètre) (model_name.bot),
3. un fichier d’obstructions (model_name.obs). C’est une sous-grille avec des taux d’obstruc-
tion (îles) ; pour chaque point de la grille elle aura deux coefficients : les taux d’obstructions
horizontaux puis verticaux ,
Le fichier d’entrée du préprocesseur grille, en plus de contenir les noms des trois premiers
fichiers (.bot, .mask et .obs), va également contenir la discrétisation spectrale, le système de
coordonnées, une discrétisation temporelle, les paramètres ajustables pour les termes sources,
2.5. FICHIER D’ENTRÉE DU PRÉPROCESSEUR DE GRILLE 16
les schémas de propagation et les valeurs numériques. Toutes ces variables dépendent de la zone
étudiée, c’est pourquoi mon programme python inclue uniquement les paramètres indispensables
au fonctionnement de la nouvelle grille WaveWatch III. Les valeur des discrétisations sont fixées
de manière générique idem pour quelques constantes du terme source. Un second paramétrage
de ces valeurs ainsi que le rajout de quelques paramètres sera nécessaire à l’issue de la création
d’une nouvelle grille WW3.
3.1 Problématique
Open Ocean utilise le code de calcul WaveWatch III, initialement développé par Hendrik Tol-
man il est aujourd’hui développé par de nombreux centres de recherche notamment par la NOAA
et l’Ifremer. Ce logiciel permet de simuler les vagues dans des zones potentiellement intéressantes
pour les énergies marine renouvelables.
Le modèle de vagues qu’Open Ocean utilisait jusqu’à présent se focalisait essentiellement sur
l’Europe ; ils ont raffiné leur maillage et paramétré leur modèle uniquement pour la zone couvrant
le Nord de l’océan Atlantique. Open Ocean souhaite étendre sont activité dans le monde entier
et cela nécessite la mise en place et la paramétrisation d’un modèle global de vagues.
La première partie présente la mise en place de ce modèle global de vague, le but étant d’ob-
tenir un modèle global de vagues qui soit stable, au plus proche de la réalité et qui prenne le
moins de temps de calcul. Pour cela une étude sur le fichier d’entrée du préprocesseur de grille
est nécessaire. En effet, c’est dans ce dernier que l’on détermine la discrétisation temporelle,
la discrétisation spectrale et enfin la paramétrisation physique des constantes. En s’aidant du
manuel, de ce qu’il y existe sur internet et en s’inspirant des codes de configuration du modèle
Atlantique Nord d’Open Ocean ; il a été possible d’implémenter une configuration approximative
du modèle de vagues global (ce modèle est présenté dans la section suivante).
Bien qu’avec cette configuration on obtienne des résultats cohérent, une paramétrisation plus
fines du modèle a été nécessaire. En effet, lorsque l’on visualise sommairement les résultats du
modèle semblent correctes. Mais lorsque l’on examine plus attentivement les sorties du logiciel
WaveWatch III, notamment les hauteurs significatives des vagues (Hs), on observe la présence
de fluctuation à certains endroits de l’océan (cf. figure (3.1)).
(a) Modèle global (b) Zoom du modèle global sur la zone Atlantique Nord
17
3.2. PRÉSENTATION DU MODÈLE 18
Figure 3.2 – Hauteurs significatives de vagues [m] en fonction du temps [jours depuis le 1er
janvier 1990]. La période temporelle correspond au mois de février 2014.
On remarque sur la figure (3.1) la présence d’une fluctuation des hauteurs significatives des
vagues au niveau du golfe de Gascogne. En effet, à cet endroit Hs atteint une valeur improbable
de 49 mètres alors que la plus haute vague jamais enregistrée atteint une hauteur de 29.1 mètres
et le record mondial de hauteur significative observé par un instrument en mer est de 17,2 m.
Nous allons donc étudier l’origine de ces pics d’erreurs et voir comment corriger la configu-
ration. Nous allons nous intéresser en particulier à la discrétisation temporelles, la discrétisation
spectrale et enfin la paramétrisation physique des constantes. Ces discrétisations et paramétri-
sations s’effectuent dans le fichier d’entrée du préprocesseur de grille.
Pour faire fonctionner le modèle il est nécessaire de lui fournir un fichier bathymétrique conte-
nant l’ensemble des profondeurs des océans. Ces données sont transmises au modèle via le fichier
d’entrée du préprocesseur de grille (ww3_grid.inp), c’est un fichier texte avec l’extension ".bot".
La figure ci-dessous (3.3) présente la bathymétrie utilisée par notre modèle global.
L’unique forçage effectué pour le moment est le forçage du vent, qui est l’élément moteur dans
le processus de génération des vagues. Pour cela on utilise la base de donnée de ECMWF (Centre
européen pour les prévisions météorologiques à moyen terme). Ce centre fournit des données de
vents mis-à-jour quotidiennement avec plusieurs résolutions de données. Nous transmettons les
composantes spatiales du vent avec une résolution de 0.5o . Cette résolution de donnée a été choisi
pour le modèle global car c’est la résolution du maillage.
Le paramétrage utilisé dans cette configuration pour la génération et la dissipation des vagues
[11] est celui développé par l’Ifremer lors du projet de recherche IOWAGA (Integrated Ocean
WAves for Geophysical and other Applications). Le paramétrage des termes de dissipation sur le
fond (BT4) est lui aussi issu de l’Ifremer. La réflexion des vagues en zone côtière est paramétrée
à l’aide d’un coefficient de réflexion (REF1). Le coefficient de réflexion va varier en fonction de
la pente de la zone littorale, des reliefs du rivage et des caractéristiques de vagues (hauteur des
vagues incidentes, fréquence moyenne) [12]. Les spectres directionnels de densité sont discrétisés
sur 24 directions et sur 32 fréquences (comprises entre 0.0373 Hz to 35.2373 Hz) ce qui donne au
modèle 24 ⇤ 32 = 768 équations d’advection couplées à résoudre et donc un problème à plusieurs
millions d’inconnues.
Dans la section suivante, nous allons partir de cette paramétrisation, la tester, analyser les
résultats, puis la modifier pour l’adapter à nos données.
Pour comparer les données du modèle avec les données de bouées in situ, j’ai utilisé une
routine (Projet.py) développée en interne chez Openocean permettant de calculer les statistiques
bias, corr, std, rmse, crmse, nrmse, scatter_index et nse définies dans l’annexe A. Cette rou-
tine prend en argument des fichiers XML qui décrivent les statistiques voulues, la variable à
comparer (Hs dans notre cas), le modèle à comparer, la bouée à comparer et enfin la période à
comparer. À la fin de l’exécution elle produit un graphique contenant l’ensemble des statistiques
crée. La figure 3.5 est un exemple de statistiques réalisées avec cette routine, sur cette dernière
nous avons comparé le modèle de vagues global (1.) avec la bouées no 62163 située à l’ouest de
la Bretagne (latitude 47.550N longitude 8.470W) sur la période du mois d’avril 2012.
Nous avons ré-effectué cette manœuvre de comparaison modèle-bouée pour les six modèles
décrient précèdement, puis nous avons résumé les statistiques ainsi que les temps d’exécution
dans le tableau ci-dessous :
3.3. STABILISATION DU MODÈLE DE VAGUES GLOBAL 21
Figure 3.5 – Comparaison des hauteurs significatives de vagues données par le modèle de vagues
global WaveWatch III avec celles données par la bouée 62163 située à l’ouest de la Bretagne
(47.550N 8.470W).
Figure 3.6 – Tableau résumant les statistiques obtenues en comparant différents modèles et
paramétrisations à la bouée 62163 située à l’ouest de la Bretagne (47.550N 8.470W). Les numéros
1, 2, 3, 4 , 5 et 6 correspondent aux modèles décrits précédemment
À paramétrisation équivalente, la résolution du modèle global prend environ sept fois plus de
9h59m46s 11h39m
+ 1h38m36s + 15h38m
temps de calcul que le celle du modèle de l’Atlantique Nord ( 1h23m 2h19m
=
3
7.226 + 7.089 + 6.748
= 7.021). En effet, la zone du modèle global est bien plus grande que la
3
zone du modèle Atlantique Nord, ce qui donne des temps de simulations bien plus grand.
C’est avec la discrétisation ’global’ (1 et 3) que les temps de calcul sont les plus faible et
ce quel que soit le modèle de vagues utilisé (global ou Atlantique Nord). En effet, avec cette
discrétisation, on ne calcule que pour 32 fréquences et 24 directions (soit 768). La discrétisation
de l’Atlantique Nord, quant à elle, prend 25 fréquences et 32 directions et enfin la discrétisation
’spéciale’ a 32 fréquences et 36 directions c’est ce qui explique pourquoi cette dernière discréti-
sation entraine des temps de calcul plus élevés.
En comparant les statistiques des deux modèles à paramétrisation équivalente (c-à-d en com-
parant les statistiques des colonnes 1 et 4, 2 et 5 puis 3 et 6 du tableau de la figure 4.3), notamment
les statistiques bias, on remarque que les le modèle de l’Atlantique nord est légèrement plus précis.
En comparant les statistiques des différentes discrétisations à modèle équivalent (i.e en com-
parant 1,2 et 3 puis 4,5 et 6) ; on constate sans surprise que c’est la discrétisation ’spéciale’ qui
donne les résultats les plus précis. En effet, lorsque l’on augmente le nombre de fréquences et de
3.3. STABILISATION DU MODÈLE DE VAGUES GLOBAL 22
Conclusion :
En effectuant le rapport du temps de calcul par la précision des résultats, la discrétisation
global apparait comme la plus intéressante. En effet, pour la discrétisation ’spéciale’, le gain de
précision est ridiculement petit devant l’augmentation des temps de calcul (en particulier pour
le modèle global : 5h30 de temps calcul en plus pour quelques dixièmes de pourcentages gagné).
Dans la suite, nous utiliserons donc la discrétisation ’global’ pour nos calculs.
Figure 3.7 – Comparaison du modèle de vagues avec différentes valeurs du coefficient de réflexion
du littoral
1- Configuration du modèle global avec REFCOAST=0.1 (Courbe avec les plus grands pics)
2- Configuration du modèle global initiale (courbe verte avec des petits pics d’erreurs)
3- Configuration du modèle global avec REFCOAST=0.01 4- Configuration du modèle global en
supprimant le paramètre REFCOAST
3.4 Validation
Pour valider le modèle global, on a comparer les résultats de nos simulations avec des données
in situ, il a d’abord été nécessaire de réaliser une recherche de données de bouées dans les
différents océans du globe. En effet, Open Ocean a validé son modèle Atlantique nord avec des
bouées localisées uniquement dans cette zone d’intérêt.
Je me suis donc intéressé dans un premier temps aux données de bouées présentes sur le site
de la NDBC, j’ai sélectionné les bouées les plus intéressantes i.e celles qui possèdent le plus grand
nombre de données (en particulier la hauteur significative des vagues Hs , la direction des vagues
dir, la vitesse du vent, la direction du vent...) sur des périodes de temps les plus grandes possibles.
Des données de bouées au niveau de l’océan Atlantique sud (en particulier au large des côtes
du Brésil) ont pu être récupéré sur le site de GOOS-BRASIL (via le programme national de
bouées PNBOIA). De même, des données ont pu être récupéré au large des côtes canadienne à
l’aide du site ’Fisheries and Oceans Canada’. L’ensemble des nouvelles bouées sont localisées sur
la figure ci-dessous 4.6.
Figure 3.8 – Localisation des nouvelles données de bouées : L’étoile indique la position de la
bouée et le nombre à coté de l’étoile correspond au numéro de bouée.
Afin d’exploiter ces nouvelles données de bouées il a fallu les formater. En effet, les données
brut étaient au format csv (cf. glossaire) inutilisable dans notre chaîne de traitement. J’ai donc
crée un algorithme python, en m’aidant des bibliothèques crées en interne chez OpenOcean, qui
lit le fichier csv et réecrit les données dans un fichier netCDF exploitable et avec lequel il sera
possible d’effectuer une comparaison bouée-modèle afin de calculer les scores (statistiques).
3.4. VALIDATION 24
Table 3.1 – Résumé des statistiques du modèle global en comparaison aux données de bouées
pour le mois de janvier 2008.
Table 3.2 – Résumé des statistiques du modèle global en comparaison aux données de bouées
pour le mois de décembre 2014.
En analysant les figures 3.1 et 3.2, on constate que le modèle de vagues global est relativement
précis pour l’Atlantique Nord ainsi que pour le Pacifique Nord. En effet, les statistiques pour
cette partie de l’océan sont très bonnes ; l’indice d’efficacité du modèle (N SE) reste relativement
élevé (supérieur à 0.7), de même le coefficient de corrélation (corr) est toujours supérieur à 0.87.
Pour la bouée 52200 (situé au milieu de l’océan pacifique nord), le modèle n’est pas très
précis ; cela est dû à la proximité de la bouée de l’île de Guam (à moins de 2 kilomètres). En
effet le modèle global ne tient pas compte de cette île dans ces grilles de calcul car elle est trop
petite par rapport à la taille de maille utilisé (0.5o ⇡ 60km) c’est pourquoi il y a une très forte
différence entre les résultats du modèle et les données in situ.
Les statistiques obtenues pour la bouée 32012 (située à côté du Chili) sont très mauvaises.
Une hypothèse expliquant ce manque de précision est que la propagation des vagues n’est pas
correctement modélisé étant donné que l’on ne prend pas en compte les données de glaces et
d’iceberg. La présence d’iceberg et de glace de mer dans le modèle a de forte chance d’avoir un
impact sur la dynamique des vagues. En effet, dans cette partie de l’océan la propagation des
vagues s’effectue sans obstacles et donc même si la mer de glace et les icebergs sont présents à
des centaines de kilomètres, cela peut avoir un impact sur les hauteurs de vagues enregistrées
par cette bouée.
Et enfin, les statistiques obtenues avec les bouées aux large du Brésil ne sont pas très précises.
Bien qu’il y est une forte corrélation entre les données et le modèle, le coefficient N SE est bas
(inférieur à 0.61). Ces erreurs sont dû à la proximité des bouées aux côtes Brésilienne. En effet,
le modèle de global avec une résolution de 0.5o mis en place ne peut représenter précisément
une dynamique côtière. Pour mieux représenter la dynamique local, il faudrait mettre en place
un modèle local avec une résolution plus fine forcé par le modèle global. Le modèle serait plus
performant car les phénomènes de shoaling et réflexion des vagues sur la côtes seraient mieux
pris en compte dans le modèle.
3.4. VALIDATION 25
Conclusion :
Nous avons donc mis en place un modèle global de vagues avec une résolution horizontale et
verticale à 0.5o stable. Pour cela, nous avons dû réaliser des tests avec différentes discrétisations
spectrales, afin d’en sélectionner une, la ’global’ qui permet d’avoir un modèle relativement précis
avec des temps de calculs corrects. Pour stabiliser le modèle, nous avons dû tester différents
paramétrages physiques, ce qui nous a permis d’isoler l’origine des pics d’erreurs. Ensuite, la
validation du modèle s’est effectuée à l’aide de nouvelles données bouées rapatriées puis formatées
pour être réutilisées. Selon l’endroit du globe, le modèle de vagues mis en place a des résultats
plus ou moins bon, notamment dans l’hémisphère sud où les statistiques d’efficacité du modèle
sont relativement basse. Une hypothèse de cette faible efficacité de modèle est que la glace de mer
et les icebergs ne sont pas pris en compte dans le modèle de vagues d’Open Ocean et pourtant
leur inclusion dans le modèle aurai probablement un impact mélioratif sur le modèle. Nous allons
donc nous intéresser à l’intégration de la glace et des icebergs dans le modèle dans les prochains
chapitres.
Partie 4
Intégration de la glace
Une des pistes d’amélioration des résultats précédents était l’intégration de la glace dans le
modèle, plus précisément de la glace de mer. La glace de mer est tout simplement la glace qui se
forme à partir de l’eau des océans ; elle généralement recouverte par de la neige, mais les deux
ne se mélange pas. Il ne faut pas confondre avec la glace continentale qui elle, se forme par accu-
mulation de neige sur un continent. Cette neige se transforme en glace et s’écoule par les glaciers
vers la mer. On en retrouve des morceaux qui flottent sur la mer qu’on appelle "icebergs". Glace
de mer et icebergs sont donc bien deux glaces très différentes de part leur origine. La glace de
mer se forme d’abord dans les eaux peu profondes, près des côtes ou au-dessus des hauts-fonds
ou des bancs, et particulièrement dans les baies, les bras de mer et les détroits dans lesquels il
n’y a pas de courant, et dans les zones de faibles salinités.
Jusqu’à présent Open Ocean n’intégrait pas la glace dans leur simulation, les objectifs de
mes recherches sont de comprendre les mécanismes permettant d’intégrer la glace, de trouver des
données compatibles à WaveWatch III et enfin de déterminer si cela a un impact mélioratif sur
la modélisation des vagues.
4.1 Documentation
Le premier objectif de ma documentation a été de déterminer le type de données de glace
compatible avec WaveWatch III, c’est-à-dire quel est le format du fichier d’entrée, quelle est
la ou bien les variables à transmettre au modèle de vagues. Le second objectif a été de com-
prendre comment implémenter cette intégration de glace dans le modèle, à quel niveau du code
cela s’effectue. Le manuel d’utilisation de WaveWatch III [2] a assuré la majeur partie de ma
bibliographie.
Philosophie :
Si l’on souhaite modéliser l’état de mer il est nécessaire d’intégrer au modèle des champs de
forçages (cf. 2.2) tel que la profondeur moyenne (DPT), la vitesse moyenne du courant (CUR),
la vitesse moyenne du vent (WND), la différence de température air-mer (AST), le niveau d’eau
(WLV), la concentration de glace (ICE), l’atténuation des vagues due aux icebergs (IBG) et enfin la
taille moyenne des grains de sédiments. Actuellement Open Ocean intègre uniquement la vitesse
moyenne du vent (WND) comme champ de forçage, on a pu constater que les modèles obtenaient
déjà des résultats relativement correct avec cette unique champ de forçage. En effet, le vent est
le mécanisme principal pour la génération des vagues.
L’objectif est de rajouter la concentration de glace (ICE) dans les champs de forçage dans
l’optique d’améliorer la précision du modèle de vagues global, mais aussi la précision des modèles
locaux (la zone Atlantique nord e.g). Le manuel d’utilisation de WaveWatch III ([2] p.152) nous
indique que l’intégration de la glace (et d’ailleurs de l’ensemble des champs de forçage) peut
s’effectuer de deux façons (similaires) : l’une avec le préprocesseur de fichier d’entrée (w3prep)
et la seconde avec le préprocesseur de fichier d’entrée netCDF (w3prnc).
Open Ocean intègre leurs données vents (WND) avec le préprocesseur de fichier d’entrée
netCDF. Le netCDF est un format de choix pour les entrées/sorties de nombreux systèmes
26
4.2. RECHERCHE DE DONNÉES DE GLACE 27
d’information géographique et pour les échanges de données scientifiques, c’est pourquoi Open
Ocean a décidé d’utiliser ce format et donc d’implémenter ses champs de forçage en utilisant ce
type de fichier.
4.2.1 HadISST
4.2.2 MyOcean
MyOcean est un projet subventionné par la commission européenne, dont l’objectif est la
définition et la mise en place d’une capacité européenne intégrée pour la surveillance, l’analyse et
la prédiction des Océans, en support aux activités telles que : la Sécurité maritime, la pollution
par Hydrocarbure, changement climatique, la surveillance des glaces etc. En fait, ce programme
vise à regrouper différentes base de données de plusieurs centres de recherche puis à normaliser
et supprimer les duplications de bases données. Il possède donc une base de données relatives à
la glace et ce au format netCDF . La figure 4.2 est un exemple de fichier compatible.
4.2.3 ECMWF
Actuellement OpenOcean utilise les données ECMWF au demi degré pour le forçage du vent,
c’est pourquoi la base de données ECMWF pour la glace de mer est une base de données de
choix pour avoir une homogénéité dans nos bases de données.
Dans un premier temps on effectue des simulations WaveWatch III avec les différentes bases
de données décrites précèdement afin de déterminer quel jeu de données est le plus performant.
Voici trois sorties Wavewatch III de concentration de glace provenant de trois sources : HadISST,
ECMWF et OSTIA :
(a) HadISST à 1o
Sur les figures 4.4 (a) et 4.5 (b) on observe que les concentrations de glace sont discontinues,
les données de glace n’ont pas été pris en compte sur tous les points de maillage. La résolution
des grilles WaveWatch III est de 0.5 degrés tandis que les résolutions des fichiers d’entrée de
glace sont de 1 degré pour HadISST et 0.75 degrés pour ECMWF. Une routine du programme
interpole la grille de plus faible résolution sur celle que le programme utilise pour faire ces calculs
(à 0.5o ) mais dans ce cas précis une parties des nœuds des mailles du fichier d’entrée et de la
grille de calcul sont superposés, c’est ce qui est à l’origine du dis-fonctionnement dans l’interpo-
lation. Pour pallier ce problème d’interpolation avec la base de données de ECMWF, nous avons
choisi une base de données de glace avec une résolution plus fine. En effet, la base de donnée
de ECMWF propose leur données à différentes résolutions : 0.125o , 0.25o , 0.5o , 0.75o , 1o , 1.5o .
La base de données HadiSST n’étant pas adapté au maillage que l’on utilise pour notre modèle
global, nous l’excluons donc de notre étude.
Pour sélectionner la base de données la plus adéquate nous allons comparer les résultats
WaveWatch III aux données de bouées in-situ sur une période de un mois (avril 2012). La bouée
4.4. TESTS ET VALIDATION 31
46035 (cf. figure 4.6) provenant du side de la NDBC a été utilisé pour ces comparaisons. Cette
bouée est située au niveau du détroit de Béring, au point de coordonnées 57.026 N 177.738 W,
lieu où la mer et la mer de glace se rencontrent. C’est donc un endroit où la mer de glace aura
un impact significatif sur les hauteurs significatives des vagues (Hs).
Table 4.1 – Tableau des statistiques obtenus en comparant sur la période du mois d’avril 2012,
le modèle de vagues avec les données de la bouée in-situ no 46035 (lat. 57.026 N lon. 177.738 W).
On constate une nette amélioration pour les modèles qui intègrent la glace dans leurs équa-
tions. Les statistiques du tableau 4.1 notamment les statistiques N SE (efficacité du modèle),
Bias (sur/sous évaluation du modèle) et la N RM SE (cf. annexe A), montrent que les deux
modèles intégrants la glace ont de meilleurs résultats que le modèle sans glace. Afin de valider
cette observation d’autres statistiques ont été réalisées sur une douzaine de bouées disséminés
dans les océans. La figure ci-dessous indique la position des bouées et la tableau 3.2 résume les
statistiques obtenues en comparant les résultats au données de bouées in situ.
Figure 4.6 – Localisation des nouvelles données de bouées : L’étoile indique la position de la
bouée et le nombre à coté de l’étoile correspond au numéro de bouée.
4.5. CONCLUSION 32
Table 4.2 – Résumé des statistiques de comparaison entre les modèles de vagues et les données
in-situ pour le mois de avril 2012.
En comparant les tableaux a), b) et c) du tableau 4.2 nous validons le fait que l’intégration
de la glace améliore l’efficacité du modèle de vagues. De plus, quel que soit la base de données de
glace ECMWF ou OSTIA les améliorations d’efficacité du modèle sont équivalentes. Après avoir
ré-effectué ces manœuvres de validations sur d’autres périodes temporelles, nous avons encore
obtenue des résultats similaires pour les deux bases de données de glace.
Pour mettre en avant la différence de temps de calcul selon la base de données utilisée, nous
avons effectué des simulations sur une période de deux mois (janvier-février 2014) avec un modèle
de vagues global sans glace, puis en intégrant la glace de ECMWF au 0.5o et enfin avec la glace
issue de la base de données de OSTIA.
Table 4.3 – Tableau des temps de calcul pour des modèle de glace avec et sans glace.
L’intégration des données de glace de la base de données OSTIA prend effectivement plus de
temps que celle de ECMWF. La taille de la base de donnée en est la cause. On constate que le
temps de calcul, lorsque l’on intègre la glace de ECMWF dans le modèle, est inférieur au temps
de calcul sans glace dans le modèle. Les zones où la couverture de glace est présente ne sont pas
prises en compte dans les calculs de WaveWatch III (cf. 4.3 §2). En effet, dépassé une valeur seuil
de concentration de glace (fixé à 0.25), les points du maillage ne sont pas pris en compte dans le
calcul.
4.5 Conclusion
Dans la suite nous utiliserons donc la base de donnée de ECMWF avec une résolution de
0.5o . La raison est que notre maillage global est lui-aussi au demi-degré et que le forçage du
4.5. CONCLUSION 33
vent au sein de la chaine de traitement de WaveWatch III d’Open Ocean se fait actuellement
avec des données ECMWF à 0.5o . De plus, les temps de calculs pour cette base de données sont
relativement court. En ce qui concerne la base de données de OSTIA, avec un résolution de 0.05o
elle prendrait énormément de volume de stockage pour une faible amélioration du modèle et avec
des temps de calcul allongés. En effet, lorsque WaveWatch III intègre la glace au modèle, il doit
la mettre à jour la glace pour chaque jour de la simulation ce qui prend plus ou moins de temps
selon le volume de données à traiter.
On a pu le constater à travers les statistiques du tableau 4.1, les statistiques des cartes 4.2
et avec le tableau 4.3 des temps de calcul que l’intégration de la glace dans le modèle améliore
l’efficacité du modèle. Pour bien comprendre l’impact que l’intégration de la glace a sur le modèle
nous avons réalisé des cartes de différences de hauteurs significatives des vagues (Hs) entre le
modèle global sans intégration de glace et un modèle global avec de la glace. Nous avons traité
les résultats netCDF de WaveWatch III avec python en réalisant les maximums et les moyennes
des hauteurs significatives de vagues que nous avons redirigé vers des fichiers netCDF puis à
l’aide du logiciel QGIS on a crée les cartes ci-dessous.
(a)
(b)
Figure 4.7 – Différences maximales (a) et moyennes (b) des hauteurs significatives de vagues
(Hs ) pour la période janvier-février 2014. Les contours correspondent aux valeurs de la légende.
Sur la figures 4.7 on observe des différences principalement près des pôles. En effet, aux
endroits où il y a une couverture de glace la propagation des vagues se stoppe, ce qui crée de
grandes différences avec le modèle sans glace. Ces différences de hauteurs significatives de vagues
peuvent atteindre jusqu’à 3 mètres pour la période hivernal et jusqu’à 8 mètres pour la période
estival, les différences maximales se situent aux endroits où il n’y avait initialement pas de mer
de glace dans le modèle. Pour les vagues se propageant près de la mer de glace on obtient des
différences maximales de l’ordre de quelques dizaines de centimètres. Et enfin, loin des pôles ces
différences sont de l’ordre du centimètre.
4.5. CONCLUSION 34
Figure 4.8 – Différences maximales des hauteurs significatives de vagues (Hs ) sur la période de
juillet-août 2014. Les contours correspondent aux valeurs de la légende.
Figure 4.9 – Différences moyennes des hauteurs significatives de vagues (Hs ) sur la période de
juillet-août 2014. Les contours correspondent aux valeurs de la légende.
L’intégration de la glace a donc un réel impact sur le modèle de vague, de plus il amélioré
l’efficacité du modèle principalement dans l’hémisphère sud où la propagation des vagues n’est
pas stoppé par les continents.
Partie 5
Des études réalisées notamment par l’Ifremer et en particulier par Fabrice Ardhuin ont dé-
montrées que les icebergs sont liés à de grandes anomalies de température de surface de la mer
et ils ont également un fort impact sur la dynamiques des vagues [13]. Après avoir constaté que
la distribution spatiale des icebergs est fortement corrélée aux erreurs de modèle de vagues (en
particulier dans l’océan indien). Une première paramétrisation du blocage des vagues par les
icebergs a été mise en place et a enlevé les plus grandes erreurs dans leur modèle WaveWatch
III.
5.1 Principe
Les icebergs sont considérés comme une sous-grille d’obstacle en mouvement, en suivant le
traitement (fixe) des sous-grilles d’île et le traitement (mobile) de la glace par Tolman [14]. Les
effets de diffraction sont négligés bien qu’ils aient probablement un rôle important dans la pra-
tique, en particulier pour les petits icebergs. Pour les icebergs de forme carré on considère qu’ils
absorbent entièrement le flux d’énergie des vagues qu’ils interceptent. On définit la proportion r
du flux d’énergie des vagues entrantes bloquées par les icebergs sur une unité de distance de pro-
pagation (ici 1 km) et la longueur des icebergs dans la direction perpendiculaire à la propagation,
par unité de distance de propagation. Pour un iceberg rectangulaire en position perpendiculaire
à la direction de propagation, la superficie de l’iceberg est la longueur multiplié par la largeur.
Pour calculé la proportion r nous utiliserons des données d’altimètres ; ces données ont été crée
à l’issue du ’Projet Altiberg" (nous définissons ce projet et ses données dans la sous-section 5.2.1).
où k est l’indice de la taille de l’iceberg, C0 (k) est le nombre d’icebergs dans la zone A0 (k),
P(i,j,t) est la probabilité de présence d’un iceberg, A(i,j,t) la superficie moyenne des icebergs et
ASW la zone du champ de vision de l’altimètre. Nous prenons C0 (k) constant en espace et en
temps, c’est-à-dire indépendant de i, j et t de ce fait W est une constante qui dépend uniquement
de la taille de l’histogramme d’iceberg. À la condition que les icebergs surviennent en un groupe
qui s’aligne préférentiellement dans une direction particulière relative à la direction dominante
des vagues, la décroissance de la vague est exponentielle, avec un taux spatial r qui a les unités
du km 1 . Dans le modèle de vagues, le flux d’énergie en chaque point de la grille est réduit par
35
5.2. RECHERCHE DE DONNÉES D’ICEBERGS 36
La figure 5.1 tirée de l’article de M. Ardhuin [13] illustre l’impact de petits icebergs (situés
dans l’hémisphère sud) sur la dynamique des vagues dans le modèle de vagues.
Figure 5.1 – Impact des icebergs dans les erreurs du modèle pour les hauteurs significatives
des vagues. L’image du haut montre l’erreur quadratique normalisée par rapport à des mesures
d’altimétries de Hs . La seconde image montre la même erreur pour un modèle qui inclut les
icebergs. La dernière image montre les différences maximums, en mètre, pour l’année 2008, entre
les hauteurs de vagues modélisés sans (Hs1 ) et avec (Hs2 ) icebergs (Ardhuin [13]).
L’objectif principal du projet Altiberg financé par le CNES est la création d’une base de
donnée d’iceberg couvrant la période de 1991 à aujourd’hui en utilisant les archives de forme
d’onde de l’ensemble des missions d’altimètries passé et présente existantes. Grâce à ce projet,
des données mises à disposition sur le site du CERSAT [16] ont pu être récupérés. Ces données
5.3. IMPLÉMENTATION 37
contiennent la localisation des icebergs, la probabilité de leur présence, la superficie moyenne des
icebergs et le volume de glace. La figure 5.2 illustre les données citées précédemment
On constate que les données ne sont pas globales, elles ne concernent qu’une partie du globe :
celle du bas de l’hémisphère sud entre les latitudes -40 S et -90 S. Malheureusement, aucune
base de données d’icebergs globale existe à ce jour. Nous allons donc intégrer les icebergs dans
le modèle uniquement pour cette partie du globe.
Grâce à l’aide de mon tuteur François Batifoulier, des interactions avec un ingénieur de
l’Ifremer (Mickael Accenci), des articles de M. Fabrice Ardhuin [13], [3] un calcul du coefficient
’IBG’ a pu être établi. Le coefficient ’IBG’ est définit par le rapport de la fraction de la superficie
de la mer couverte par les icebergs et de la largeur effective de l’iceberg dans la direction de
propagation, c’est-à-dire r (cf. 5.1). Le coefficient ’IBG’ correspond à un pourcentage de surface
d’iceberg qui induit un amortissement des vagues. Il faut donc multiplier la superficie de l’iceberg
A(i, j, t) par la probabilité de présence de l’iceberg P (i, j, t) le tout multiplié par un facteur de
normalisation relatif à la largeur effective de l’iceberg dans la direction de propagation des vagues
(W 5.3). Le script python qui a permis le formatage de ces données est fourni en annexe E.
5.3 Implémentation
De façon similaire à l’intégration de la glace dans WaveWatch III, il est nécessaire d’utiliser
le programme auxiliaire (ww3_prnc). Ce programme va lire les données d’un fichier d’entrée
5.4. TESTS ET VALIDATIONS 38
pré-formaté (un netCDF avec des concentrations de glace et des coefficients d’atténuation des
vagues par les icebergs) et les intègre au modèle de vagues grâce au fichier de définition du modèle
(mod_def ).
Une première approche pour intégrer les données d’iceberg au programme WaveWatch III a
été d’implémenter les codes d’intégration d’icebergs indépendamment de l’intégration des don-
nées de glace. C’est-à-dire d’intégrer la glace de mer puis intégrer les icebergs. Cette méthode
n’a pas abouti car le programme WaveWatch III intègre la glace de mer et les icebergs en même
temps. Ce qui allège et facilite grandement l’implémentation des codes d’intégration de données
d’iceberg.
L’implémentation des icebergs dans le modèle de vagues s’est effectué sur le même modèle
que pour l’intégration de la mer de glace, on a donc dû modifier les même codes sources :
build_time_and_list.sh, make_input_ww3.sh et make_run_ww3.sh.
Encore une fois, c’est dans le setup que l’on indiquera si l’on veut insérer de la glace incluant les
icebergs dans le modèle, dans le script build_time_and_list.sh on ajoute un nouveau test pour
le compteur de grille de glace (et d’iceberg) du modèle. On crée la routine build_iceberg_ww3.sh
qui est appelé dans le script make_input_ww3.sh va effectuer un formatage en découpant ou
concaténant les données de glace et d’iceberg à l’aide de commande NCO afin d’avoir des données
correspondant aux dates de runs.
La différence majeur entre l’implémentation de la glace de mer et celle des icebergs se situe
dans le make_input_ww3.sh. En effet, c’est dans ce dernier que l’on fait appel au programme
auxiliaire (ww3_prnc) et que l’on construit au préalable son fichier d’entrée ou on lui transmet
les variables à utiliser (longitude, latitude, concentration de glace et coefficient de réduction des
vagues par les icebergs).
Figure 5.3 – Différences maximales des hauteurs significatives de vagues (Hs ) entre le modèle
sans glace et le modèle intégrant la glace et les icebergs pour la période janvier 2014.
Sur la figure 5.3 on constate que les données de glace et d’iceberg sont bien intégrées au
modèle de vagues. En effet, on observe des différences de Hs dans les zones ou il y a de la mer
de glace et des "tâches" de différences de Hs qui sont dû à l’amortissement des vagues par les
icebergs. Pour confirmé cela, nous comparons les résultats du modèle intégrant la glace avec celui
intégrant glace et iceberg.
Figure 5.4 – Différences maximales des hauteurs significatives de vagues (Hs ) entre le modèle
intégrant uniquement la glace et le modèle intégrant la glace et les icebergs pour la période
janvier 2014.
La figure 5.4 confirme l’impact des icebergs dans le modèle global. La figure suivante
5.4. TESTS ET VALIDATIONS 40
Figure 5.5 – Différences moyennes des hauteurs significatives de vagues (Hs ) entre le modèle
intégrant uniquement la glace et le modèle intégrant la glace et les icebergs pour la période
janvier 2014.
Partie 6
Conclusion et perspectives
La mise en place du modèle de vagues global a pu être réalisé en partie grâce à la contri-
bution des chercheurs de l’Ifremer et en particulier grâce au partage de leur maillage global et
de leurs fichiers bathymétriques (.bot, .obs et .mask). Alors que ce modèle global présentait des
pics d’erreurs dans les résultats de hauteurs significatives, une paramétrisation des paramètres
physiques à permit de stabiliser le modèle. Le coefficient de réflexion à la côte a été supprimé
de la configuration, en effet cela n’a pas de réel impact sur le modèle de vagues global au demi
degré, car ce coefficient agit lorsqu’on s’approche des côtes. Avec une résolution de maillage aussi
faible, le phénomène de réflexion à la côte n’est pas très bien pris en compte dans les calculs. Le
modèle a été validé à l’aide de données de bouées in situ, elles ont été récupérées puis formatées
au format netCDF pour simplifier leurs utilisations.
Une amélioration du modèle global a été réalisé en incorporant, dans un premier temps, des
données de glace dans le modèle. Pour permettre leur intégration, ces données ont dû être traité
puis formatées au format netCDF. Une amélioration de la qualité du modèle en a découlé, princi-
palement dans les zones proches des pôles, i.e les endroits où la mer de glace est présente. Ensuite,
toujours dans l’optique d’améliorer le modèle, l’intégration des icebergs dans WaveWatch III a
été réalisé. Les coefficients d’amortissement des vagues induit par les icebergs ont dû être calculés
à partir de données d’altimétrie. La construction d’une base de données contenant ce coefficient
et la concentration de glace a permis l’intégration de la glace de mer, mais aussi des icebergs
dans le modèle. Cependant, la validation du modèle intégrant les icebergs doit être approfondit,
en effet le manque de données in situ a rendu difficile cette validation et pour l’instant l’unique
moyen de comparer les résultats est de comparer des hauteurs significatives moyennées sur une
année.
Ce stage de fin d’étude au sein d’Open Ocean m’a permis de découvrir et de travailler dans
le domaine de l’océanographie mais aussi dans le domaine des énergies marines renouvelables.
L’expertise de mes encadrants docteurs en hydrodynamique m’a permis de mieux comprendre
la physique liée à la modélisation des vagues. J’ai pu mettre en pratique mes compétences ac-
quises au cours de ma formation et en développer de nouvelles, notamment en script Shell, en
simulation numérique et en programmation orienté objet avec le langage python. De plus, en éla-
borant des algorithmes de traitements de données, j’ai progressivement rendu mes programmes
plus efficaces en adoptant de meilleurs méthodes de travail. Ce stage chez Open Ocean m’a éga-
lement permis de découvrir le monde des start-up et le travail en équipe au sein d’une PME.
Cela demande une bonne communication entre salariés, facilité par la bonne ambiance et par
les réunions hebdomadaire dans lesquelles on a pu suivre la progression des projets de l’entreprise.
D’un point de vue personnel, il m’a permis de dévoiler et de confirmer mes intérêts pour
l’océanographie physique, les énergies marines renouvelables et la simulation numérique. J’espère
avoir l’opportunité de poursuivre dans cette voie en orientant mes recherches d’emploi.
41
Annexe A
Scores
Les "scores" sont des indicateurs de performance d’un modèle, ils permettent à la fois de quantifier
les performances d’un modèle, mais aussi de comparer différents modèles entres eux.
Bias : Avec m le vecteur de données modélisées, et r le vecteur de données réelles, le biais s’exprime
ainsi :
Bias(m, r ) = m̄ r̄ (A.1)
Il s’agit donc simplement, de l’écart entre les moyennes des deux jeux de données. Sa valeur ren-
seigne sur la sur/sous évaluation du modèle par rapport aux données observées, c’est-à-dire la
tendance des valeurs simulées à être supérieures ou inférieures aux mesures. C’est pourquoi le
biais est optimal à 0.
Coefficient de corrélation (Corr) : Il exprime le degré d’ajustement entre les mesures et le modèle.
Plus la valeur absolue de ce coefficient est proche de 1 plus ils sont corrélés. On définit le coefficient
de corrélation ainsi :
N
X
(mn m̄) · (rn r̄)
n=1
Corr (m, r ) = v v (A.2)
u N u N
uX uX
t (mn 2 t
m̄) · (rn r̄) 2
n=1 n=1
La CRMSE est une RMSE à laquelle on enlève l’erreur liée au biais. Tout comme la RMSE, elle
est optimale à 0.
L’écart-type (std) : L’écart type ("standard deviation") représente la dispersion des données, on la
calcule ainsi : s
PN
= N1 (rn r̄)2 (A.4)
n=1
Indice de dispersion : Ou "Scatter Index" (en anglais) définit un coefficient de dispersion des valeurs
par rapport aux données mesurées. On utilise le calcul de RM SE que l’on pondère avec la valeur
moyenne des données mesurées afin d’établir une relation entre l’amplitude et la valeur moyenne.
NSE (efficacité du modèle) : Ou "Nash-Sutcliff Efficiency" est une grandeur sans dimension qui
détermine la proportion d’erreur du modèle par rapport à la variabilité des données observées.
NSE doit appartenir à [0 ;1] pour que le niveau de performance soit acceptable. D’un point de vue
plus restrictif on considère que si :
— N SE > 0.65 le modèle est excellent
42
43
On définit le N SE par :
N
P
(rn m n )2
NSE (m, r ) = 1 n=1
P N (A.6)
(rn r̄)2
n=1
RMSE (Root Mean Square Error) : La variable RMSE qui est en fait l’erreur quadratique est un
moyen précis de mesure de l’amplitude des écarts entre les valeurs prédites par le modèle et les
valeurs observées. Le modèle est d’autant plus performant que les erreurs termes à termes sont
faibles. (Plus RMSE est proche de 0 plus le modèle est performant). On calcule cette moyenne de
la façon suivante : s
P
N
RMSE (m, r ) = 1
N
[mn r n ]2 (A.7)
n=1
NRMSE (Normalized Root Mean Square Error) : Erreur quadratique moyenne normalisée.
s
P
N
NRMSE (m, r ) = 100 ⇤ 1
N
[mn rn ]2 /nval (A.8)
n=1
Voici le le fichier que l’on transmet au préprocesseur de grille de WaveWatch III (compilateur). La
paramétrisation qui s’y trouve est celle du modèle de vague
$ -------------------------------------------------------------------- $
$ WAVEWATCH III Grid preprocessor input file $
$ -------------------------------------------------------------------- $
$ Grid name (C*30, in quotes)
$
’Global 0.5 deg wave grid ’
$
$ Set spectral variables --------------------------------------------- $
$
$ - Facteur d’incrémentation de la fréquence,
$ - première fréquence (HZ),
$ - le nombre de fréquences (wavenumber) et la direction,
$ - compensation relative de la première direction en terme d’incrément
$ directionnel [-0.5, 0.5].
$
1.1 0.0373 32 24 0.
$
$ Set model flags ---------------------------------------------------- $
$
$ - FLDRY : Dry run ( Entré/Sortie uniquement, aucun calcul).
$ - FLCX, FLCY : Active les composantes X et Y de propagation.
$ - FLCTH, FLCK : Active les changements de direction et du nombre d’onde.
$ - FLSOU : Active les termes sources.
$
F T T T T T
$
$ Set time steps ----------------------------------------------------- $
$
$ - Pas de temps global maximum (secondes),
$ - Pas de temps CFL maximal pour x-y et k-theta (secondes),
$ - pas de temps minimum du terme source (secondes).
$
2400. 480. 300. 10.
$
$ Start of namelist input section ----------------------------------- $
$
$ Les paramètres réglables pour les termes souces, les schémas de propa-
$ gations et pour les valeurs numériques
$
&MISC CICE0 = 0.25, CICEN = 0.75, LICE = 40000, FLAGTR = 4 /
&REF1 REFFREQ=0, REFSLOPE=0.0,
REFCOAST=0.05, REFSUBGRID = 0.05, REFICEBERG=0.4 /
&SBT4 BOTROUGHMIN = 0.0400 /
44
45
Méthode python qui, à partir de donnée bathymétrique, sauvegarde les données dans des fichiers
destinés au préprocesseur de grille de WaveWatch III (ww3_grid). Cette méthode fait partie de la classe
’Bathymetry’, développée en interne, elle permet de gérer, modifier et formater des données bathymé-
triques de différents formats (Shapefile, ASCII et netCDF).
46
47
44
45 with open ( file_bot , ’w ’) as swriter_bot :
46 for i in range ( l1 ):
47 line =[ ’% 12.06 f ’ %( row ) for row in h0 [i ,:]]
48 swriter_bot . write ( ’ ’. join ( line )+ ’\ n ’)
49
50 h01 = np . fabs ( h0 )
51 h0_obs = h01 *0
52 swriter_obs = csv . writer ( open ( file_obs , ’w ’) , delimiter = ’ ’)
53 for i in range ( l1 ):
54 line =[ ’% d ’ %( h0 ) for h0 in h0_obs [i ,:]]
55 swriter_obs . writerow ( line )
56 swriter_obs . writerow ( ’ ’)
57 for i in range ( l1 ):
58 line =[ ’% d ’ %( h0 ) for h0 in h0_obs [i ,:]]
59 swriter_obs . writerow ( line )
60
61 h0_mask = h0 *0+1
62 h0_mask [0 ,:] = 2
63 h0_mask [ -1 ,:] = 2
64 h0_mask [: ,0] = 2
65 h0_mask [: , -1] = 2
66 h0_mask [ h0 ==999.] = 0
67
68 swriter_mask = csv . writer ( open ( file_mask , ’w ’) , delimiter = ’ ’)
69 for i in range ( l1 ):
70 line =[ ’% d ’ %( h0 ) for h0 in h0_mask [i ,:]]
71 swriter_mask . writerow ( line )
72
73 # Generation du preprocesseur de grille pour des fichiers d ’ entre
74 with open ( file_data , ’w ’) as swriter_grid :
75 swriter_grid . write ( ’$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $ \ n ’)
76 swriter_grid . write ( ’$ WWIII Grid preprocessor input file $ \ n ’)
77 swriter_grid . write ( ’$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $ \ n ’)
78 swriter_grid . write ( ’$ \ n ’)
79 swriter_grid . write ( ’ \ ’ GRID NAME ’+ str ( xres )+ ’ degree grid \ ’\ n ’)
80 swriter_grid . write ( ’$ \ n ’)
81 swriter_grid . write ( ’$ 1.1 0.04118 25 24 0.\ n ’)
82 swriter_grid . write ( ’ 1.1 0.04118 25 36 0.\ n ’)
83 swriter_grid . write ( ’$ 1.1 0.0373 32 36 0.\ n ’)
84 swriter_grid . write ( ’$ \ n ’)
85 swriter_grid . write ( ’ F T T T F T \ n ’)
86 swriter_grid . write ( ’$ \ n ’)
87 swriter_grid . write ( ’ 1800. 800. 1800. 30. \ n ’)
88 swriter_grid . write ( ’$ 2400. 480. 300. 10. \ n ’)
89 swriter_grid . write ( ’$ \ n ’)
90 swriter_grid . write ( ’ & SBT1 GAMMA = -0.067 /\ n ’)
91 swriter_grid . write ( ’ & MISC CICE0 = 0.33 , CICEN = 0.67 , FLAGTR = 0 /\ n ’)
92 swriter_grid . write ( ’$ REFSUBGRID = 0.05 /\ n ’)
93 swriter_grid . write ( ’ END OF NAMELISTS \ n ’)
94 swriter_grid . write ( ’$ \ n ’)
95 swriter_grid . write ( ’$ \ n ’)
96 swriter_grid . write ( ’ \ ’ RECT \ ’ T \ ’ NONE \ ’\ n ’)
97 swriter_grid . write ( ’$ \ ’ CURV \ ’ T \ ’ NONE \ ’\ n ’)
98 swriter_grid . write ( ’ ’+ str ( l2 )+ ’ ’+ str ( l1 )+ ’\ n ’)
99 swriter_grid . write ( ’ ’+ str ( xres )+ ’ ’+ str ( yres )+ ’ 1.\ n ’)
100 swriter_grid . write ( ’ ’+ str ( xmin )+ ’ ’+ str ( ymin )+ ’ 1.\ n ’)
101 swriter_grid . write ( ’ -0.1 2.50 20 1. 1 1 \ ’( ’+ str ( l2 )+ ’ F13 .6)\ ’ \
102 \ ’ NAME \ ’ \ ’ ’+ model_name + ’. bot \ ’\ n ’)
103 swriter_grid . write ( ’$ 21 1. 1 1 \ ’(....)\ ’ \ ’ NAME \ ’ \
\ ’ ’+ model_name + ’. obs \ ’\ n ’)
104 swriter_grid . write ( ’ 21 1 1 \ ’(....)\ ’ \ ’ NAME \ ’ \
\ ’ ’+ model_name + ’. mask \ ’\ n ’)
105 swriter_grid . write ( ’$ \ n ’)
106 print ( file_data )
Annexe D
make_input_ww3.sh
Voici une partie du code du make_input_ww3.sh, elle représente d’abord la phase précédent la com-
pilation, c-à-d l’écriture du fichier d’entrée du préprocesseur (lignes 38 à 47) puis la phase de compilation
en elle-même (ligne 59).
48
49
45 $
46 $ End of input file
47 EOF
48
49 if [[ $sourceice != ’no ’ ]]; then
50 echo ’ preparation des ww3_prnc for ice with source ’ $ice_sources ’ \
51 and for ’ $mod ’ model ’
52 cp ww3_prnc_ice . inp . $mod ww3_prnc . inp
53 ln -s mod_def . $mod mod_def . ww3
54
55 if [[ $sourceice != ’ file ’ ]]; then
56 echo ’ lien vers le ice . nc ’
57 ln -s $path_w / ice . nc . $mod ice . nc
58 fi
59 echo " Screen ouput routed to $path_o / ww3_prnc_ice . $mod . out "
60 $path_e / ww3_prnc > $path_o / ww3_prnc_ice . $mod . out
61 mv ice . ww3 ice . $gridice ’ _g ’ $gn
62 cp ice . $gridice ’ _g ’ $gn $path_bin / ’ ice . ’ $gridice ’ _g ’ $gn ’_ ’ $tstarto - $tend
63 rm -f ww3_prnc_ice . inp . $mod ww3_prnc . inp mod_def . ww3 *
64 unlink ice . nc
65 fi
66 done
67
68 elif [[ " $ice " == ’no ’ ]]
69 echo ’+ - - - - - - - -+ ’
70 echo ’| NO ICE | ’
71 echo ’+ - - - - - - - -+ ’
72 fi
Annexe E
Le script ci-dessous a été utilisé pour créer et formater une base de donnés de glace et d’icebergs.
#!/usr/bin/python
# -*- coding: utf-8 -*-1
#========================================================================================
# M.Accensi - J.Tournadre - Altiberg project 2012/2013
# Adapted in python for netCDF input by Cedric Jourdain
#========================================================================================
# This function create an netCDF file for WW3 use
#
# It convert iceberg surface in km**2 on a latlon grid to a purcentage of iceberg surface
#
# USAGE : python3 make_iceberg_nc_global.py sat date
# date must have the shape YYYY and it have to be an integer
# sat could be topex, envisat, ers1, ers2, jason1, jason1b, jason2, cryosat
#========================================================================================
import netCDF4
import sys
import os
import numpy as np
import stats.utils.compass_variable as cv
import Write
from datetime import datetime, timedelta
# Variables initialization
sat = sys.argv[1]
date= sys.argv[2]
src_dir_ice=’/mnt/nfs/home/cedricjo/ecmwf_ice_copy/’
src_dir_iceberg=’/mnt/nfs/home/cedricjo/altiberg/v1/data/’+sat+’/grid/geographic/’
lat=np.arange(-90, 90.5, 0.5)
lon=np.arange(-180,180,0.5)
# Loop on months
for m in range(1,13):
im_min=time_h[m-1].month # wanted month
im_max=time_h[-1].month # last month
ice_area[:,:,30]=0 # removes spurious values at 40 S.
50
51
# Build iceberg data (the whole construction of ibg is in the loop for more clarity)
# -> Define regular grid
nx=720
ny=361
nlo=181
nla=51
# -> Defines histogram of iceberg sizes
XX=np.linspace(0.1,4,40);
# -> fit function to observed histogram
YY=800.*np.exp(3.*(-XX+0.5))+300.*np.exp((-XX+0.5));
# -> Normalization to get total area
TA=(YY*XX).sum(axis=0); #TA=sum(YY.*XX);
# -> Normalized size distribution (number per unit area)
yy=YY/TA
# -> Normalization factor for lengths per unit area: decay rate 1/10 km)
fac=((yy*np.sqrt(XX)).sum(axis=0))*10. #fac=sum(yy.*sqrt(XX))*10.;
# Open files
dir_out=’/mnt/nfs/home/cedricjo/WORK/ice_iceberg_database/’+sat
if not os.path.isdir(dir_out):
52
os.mkdir(dir_out)
dir_out=dir_out+’/’+str(date)
if not os.path.isdir(dir_out):
os.mkdir(dir_out)
if m<10:
netcdf_out=dir_out+’/sea-ice_ECMWF_ERA-INTERIM_iceberg_altiberg_’+sat+’_’+str(date)+’0’\
+str(m)+’_180W-180E.nc’
else:
netcdf_out=dir_out+’/sea-ice_ECMWF_ERA-INTERIM_iceberg_altiberg_’+sat+’_’+str(date)\
+str(m)+’_180W-180E.nc’
# Writes file to disk for use in the wave model with lon, lat, time, ibg and ci variables
time=time.astype(np.int)
compassV = cv.CompassVariable(varname=’time’, vardims=(’time’,), vararray=np.array(new_time))
compassV.add_attribute(’units’,’days since 1990-01-01T00:00:00Z’)
compassV.add_attribute(’long_name’,’julian day (UT)’)
compassV.add_attribute(’standard_name’,’time’)
compassV.add_attribute(’conventions’,’Relative julian days’)
compassV.add_attribute(’axis’,’T’)
Write.write_variable_to_netcdf(compassV,netcdf_out,verbose=False)
#=======================================================================
Bibliographie
53