From b53178f22245c880bf8641d356d81d73330755ed Mon Sep 17 00:00:00 2001
From: Lionel GUEZ <guez@lmd.ens.fr>
Date: Wed, 24 Apr 2024 13:57:37 +0200
Subject: [PATCH] Polish

---
 .../Documentation_texfol/documentation.tex    | 132 ++++++++++--------
 .../Documentation_texfol/documentation.tex    |  41 +++---
 README.md                                     |  61 +++++++-
 3 files changed, 150 insertions(+), 84 deletions(-)

diff --git a/Inst_eddies/Documentation_texfol/documentation.tex b/Inst_eddies/Documentation_texfol/documentation.tex
index 7b17ed56..c1459578 100644
--- a/Inst_eddies/Documentation_texfol/documentation.tex
+++ b/Inst_eddies/Documentation_texfol/documentation.tex
@@ -94,22 +94,16 @@ général définir cet indice à partir du fichier d'entrée. L'indice de
 date est donc une entrée supplémentaire du programme.
 
 Cf. algorithme \ref{alg:principal}.
-\begin{algorithm}[htbp]
+\begin{algorithm}
   \begin{algorithmic}
     \STATE entrer(corner, step, ssh, u, v)
-    \STATE appel de set\_all\_outerm(s, step, ssh, corner)
-    \FOR{e dans s\%list}
-    \IF{e\%out\_cont\%closed}
-    \STATE llc, urc = bbox de e\%out\_cont, dans l'espace des indices
+    \STATE appel de set\_all\_extr(s, step, ssh, corner)
+    \FOR{e dans s\%list par ordre d'orientation et de SSHde l'extremum}
+    \STATE llc, urc = bbox à $\pm$ max\_radius, dans l'espace des indices
     \STATE outside\_points = coordonnées des extremums dans llc, urc à éviter
 
-    \STATE appel de set\_max\_speed(e, outside\_points, llc, urc, ssh,
+    \STATE appel de set\_contours(e, outside\_points, llc, urc, ssh,
     u, v, step)
-    
-    \ELSE
-    \STATE e\%speed\_cont = null
-    \STATE e\%max\_speed = manquant
-    \ENDIF
     \ENDFOR
     \STATE écrire(s)
   \end{algorithmic}
@@ -120,10 +114,28 @@ Cf. algorithme \ref{alg:principal}.
 \section{Identification of instantaneous eddies}
 \label{sec:identification}
 
-Instantaneous eddies with a given orientation are identified in two
-equivalent ways: either by a couple date index $d$ and eddy index $e$ at
-that date index, or by a unique integer identifier $n$, which we can call a
-\og node index\fg{}.
+Instantaneous eddies (also called occurences of eddies) with a given
+orientation may be identified in four ways:
+\begin{itemize}
+\item By a couple date index $d$ and eddy index $e$ at that date
+  index. This is the way eddies are identified in program
+  \verb+inst_eddies+. The eddy index $e$ may be called an intra-date index.
+\item By a unique integer identifier $n$, which can be computed from
+  $d$ and $e$ (see below). As $n$ identifies an instantaneous eddy
+  across all dates, we can call it an inter-date index. $n$ is the
+  identification used in the edge list created by program
+  \verb+eddy_graph+.
+\item By a couple slice index and shape index in that slice. This
+  localizes the data relevant to an instantaneous eddy in the
+  shapefiles. So this identification is required to access the data
+  created by program \verb+inst_eddies+. It is used in program
+  \verb+eddy_graph+. It is also used in Python scripts to determine
+  trajectories and to analyze and plot the results.
+\item By a vertex index in the abstract graph of instantaneous eddies
+  and in the abstract graph of segments. The vertex index is defined
+  and used by the graph software, graph-tool. It appears in the file
+  \verb+traj_vert_ind.json+ created by script \verb+trajectories.py+.
+\end{itemize}
 
 The date index $d$ is an integer value. It is a number of time steps
 since some arbitrary reference date. For flexibility, we do not assume
@@ -144,20 +156,20 @@ guarantee that:
 \end{equation*}
 ($E$ may not be the same for cyclones and anticyclones.)
 
-The eddy indices $e$ for eddies at date index $d$ start at 1 and
+The intra-date eddy indices $e$ for eddies at date index $d$ start at 1 and
 increment 1 by 1, without any jump. So they go from 1 to
 $e_\mathrm{max}(d)$.
 
-The relation between node index $n$, date index $d$ and eddy index $e$
+The relation between inter-date index $n$, date index $d$ and intra-date eddy index $e$
 is:
 \begin{equation*}
   n = d E + e
 \end{equation*}
 So $n$ usually jumps at each change of date. The eddies at date 0 (if
-date 0 is in the range of dates) would have a node index between 1 and
+date 0 is in the range of dates) would have an inter-date index between 1 and
 $E$ at most, at date 1 between $E + 1$ and $2 E$ at most, and so
 on. Cf. table (\ref{tab:eddy_id_Matlab}).
-\begin{table}[htbp]
+\begin{table}
   \centering
   \begin{tabular}{lll}
     date index 0 & & \\
@@ -169,7 +181,7 @@ on. Cf. table (\ref{tab:eddy_id_Matlab}).
            & cyclones & $n = d E_\mathrm{cyclo} + 1, \dots, d E_\mathrm{cyclo}
                         + e_\mathrm{max,cyclo}(d)$
   \end{tabular}
-  \caption{Node indices}
+  \caption{Inter-date indices $n$.}
   \label{tab:eddy_id_Matlab}
 \end{table}
 Conversely, from the definition of $E$, knowing $n$ and $E$, we can
@@ -187,7 +199,7 @@ Note that $E$ is specific to a given orientation.
 \section{Shapefile collections}
 
 The data for instantaneous eddies is stored in shapefiles. For a given
-orientation and a given interval of dates, there may be three or four
+orientation and a given sequence of dates, there may be three or four
 shapefiles: extremum, \verb+max_speed_contour+,
 \verb+outermost_contour+ and, optionally, centroid. The four
 shapefiles correspond to four \og layers\fg{} of eddies. (\og
@@ -204,7 +216,7 @@ A shapefile contains \og shapes\fg{}. The shapes are identified by a
 shape index $i$, starting at 0 for each shapefile. Each eddy has a
 shape, at the same shape index $i$, in the four layers. Cf. figure
 \ref{fig:slice}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{slice}
   \caption[Contents of a given orientation of a given slice]{Contents
@@ -221,7 +233,7 @@ the three files form a logical unit and you should never separate
 them.
 
 The instantaneous eddies are identified, for a given orientation, by a
-date and an eddy index at that date. See §
+date index and an intra-date eddy index at that date. See §
 \ref{sec:identification}. These are fields (column headers) in the dbf
 files.
 
@@ -231,7 +243,10 @@ Cyclones and Anticyclones, are themselves in a directory which we call
 a slice. By \og slice\fg{}, we mean a \emph{time}-slice. The slice may
 contain data at several dates. These dates are in chronological order
 in the shapefiles of the slice. There may be jumps between consecutive
-dates ($\Delta d \ne 1$).
+dates ($\Delta d \ne 1$). For a given date index, the eddies are
+stored in the shapefile in the order of ascending intra-date eddy
+index. There may be no jump between consecutive intra-date eddy
+indices, for a given date.
 
 How to access directly any instantaneous eddy at any date in a slice?
 (Directly means without searching the file.) In order to access
@@ -242,11 +257,12 @@ would use a dictionary. In Fortran, we can do without dictionary by
 taking advantage of the facts that the dates are in chronological
 order in the slice and that there should be very few jumps between
 consecutive dates. The idea is to store in an array the shape index
-$l(d)$ of the last eddy at a given date $d$, and to index the array
-with $d$. If $d$ is not present in the slice then the stored value is
-$l(d - 1)$. This implies that the first index of the array, say $d_0$,
-must be a date present in the slice. We do not require that the last
-index of the array be a date present in the slice. We have :
+$l(d)$ of the last eddy at a given date index $d$, and to index the
+array with $d$. If $d$ is not present in the slice then the stored
+value is $l(d) = l(d - 1)$. This implies that the first index of the
+array, say $d_0$, must be a date present in the slice. We do not
+require that the last index of the array be a date present in the
+slice. We have :
 \begin{equation*}
   l(d) = \sum_{d' = d_0} ^d e_\mathrm{max}(d') - 1
 \end{equation*}
@@ -254,7 +270,7 @@ $e_\mathrm{max}(d) = 0$ if $d$ is not in the slice. So, if;
 \begin{equation*}
   1 \le e \le e_\mathrm{max}(d)
 \end{equation*}
-then the shape index $i$ of the eddy with eddy index $e$ at date $d$
+then the shape index $i$ of the eddy with intra-date eddy index $e$ at date $d$
 is:
 \begin{equation*}
   i =
@@ -276,7 +292,7 @@ A shapefile collection, in abbreviated form an SHPC, is a directory
 containing an arbitrary number of slices, numbered from index 0, and
 for each slice, the two orientations, cyclones and anticyclones.
 Cf. figure \ref{fig:SHPC}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics{SHPC}
   \caption{Contents of an SHPC}
@@ -661,7 +677,7 @@ cette forme. Si une forme dans \verb+max_speed_contour.shp+ est vide
 alors la vitesse correspondante dans \verb+extremum.dbf+ est la
 vitesse sur le contour extérieur.
 
-L'indice de date et l'indice de tourbillon dans
+L'indice de date et l'indice intra-date de tourbillon dans
 \verb+outermost_contour.dbf+ et \verb+max_speed_contour.dbf+
 sont en principe inutiles puisqu'ils sont aussi dans
 \verb+extremum.dbf+ et que les tourbillons sont stockés dans le
@@ -774,7 +790,7 @@ ind\_extr dans snapshot. Et j'ajoute à la place des champs longitude,
 latitude dans le type eddy.
 
 Cf. figure (\ref{fig:copy}).
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{copy}
   \caption[Extension d'un champ en longitude]{Extension d'un champ en
@@ -1060,7 +1076,7 @@ $\Box$
 
 Montrons enfin la décroissance de la suite $(s_{k + 1} -
 s_k)$. Cf. figure \ref{fig:descending}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics{descending}
   \caption{get\_1\_outerm. Décroissance de la suite
@@ -1134,7 +1150,7 @@ de départ. \verb+scipy.ndimage.maximum_filter+ applique
 Douglas (1996 k0968).
 
 Cf. figure (\ref{fig:periodicity}).
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics{periodicity}
   \caption[Cas de périodicité dans local\_extrema]{Cas de périodicité
@@ -1165,7 +1181,7 @@ d'amplitude et surface significatives. D'un point de vue
 algorithmique, cela se traduit par : minimum ou \verb+out_cont+ fermé,
 puisqu'on a initialisé le champ closed à vrai. Cf. figure
 \ref{fig:nearby_extr}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics{nearby_extr}
   \caption{nearby\_extr}
@@ -1182,7 +1198,7 @@ extremums sont triés par ordre de SSH décroissante. Pour les
 anticyclones, les extremums sont triés par ordre de SSH croissante.
 
 Cf. algorithme \ref{alg:set_all_outerm}.
-\begin{algorithm}[htbp]
+\begin{algorithm}
   Déclarations :
   \begin{algorithmic}
     \STATE donnée-résultat s
@@ -1227,7 +1243,7 @@ Notons ici :
   & m = \mathtt{max\_radius(1)}
 \end{align*}
 Cf. figure (\ref{fig:set_all_outerm}).
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics{set_all_outerm}
   \caption[Contrainte sur les longitudes dans
@@ -1309,7 +1325,7 @@ est intérieur au contour extérieur, donc il ne contient aucun extremum
 à l'extérieur du contour extérieur.
 
 Cf. figure \ref{fig:cont_list}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{cont_list}
   \caption[Méthode de recherche du contour de vitesse
@@ -1333,7 +1349,7 @@ contient des contours dont la hauteur est entre
 \verb+innermost_level_2+ et la hauteur du contour extérieur.
 
 Cf. figure \ref{fig:i_outer_n_cont}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{i_outer_n_cont}
   \caption[i\_outer et n\_cont]{Distribution de i\_outer et n\_cont
@@ -1346,23 +1362,23 @@ de \verb+i_outer+ est de 5 environ, la moyenne de \verb+n_cont+ est de
 18 environ.
 
 Cf. figures \ref{fig:cont_double_max} et \ref{fig:speed_double_max}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{cont_double_max}
   \caption[Contours de maximum de vitesse différents]{Comparaison des
     deux méthodes de recherche du contour de vitesse maximale. Test
-    Region\_5\_15\_days, slice 0, anticyclones, date 20456, tourbillon
+    Region\_5\_15\_days, slice 0, anticyclones, date 20456, indice intra-date
     48. master = 87252df. Les deux valeurs de vitesse maximale sont
     proches mais les valeurs de ssh sont assez différentes (écart de 3
     cm environ).}
   \label{fig:cont_double_max}
 \end{figure}
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{speed_double_max}
   \caption[Profil de vitesse]{Comparaison des deux méthodes de
     recherche du contour de vitesse maximale. Test
-    Region\_5\_15\_days, slice 0, anticyclones, date 20456, tourbillon
+    Region\_5\_15\_days, slice 0, anticyclones, date 20456, indice intra-date
     48. Révision 87252df. On voit deux maximums relatifs de vitesse,
     de valeurs assez proches, à deux abscisse assez différentes.}
   \label{fig:speed_double_max}
@@ -1443,7 +1459,7 @@ Compilation et exécution testées avec NAG Fortran Compiler Release
 Pour faire des tests : données au 1\ier{} janvier 2006. Tests sur
 différents domaines. Cf. figure (\ref{fig:regions}) et
 \verb+domains.ods+.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{regions}
   \caption{Régions pour les tests.}
@@ -1457,7 +1473,7 @@ Pour la région 1, coin en :
 soit $(\np[rad]{0.0894}, - \np[rad]{0.6349})$. Indices dans le domaine
 global, base 1, du coin de la région 1 : 21, 215. 5 minimums et 3
 maximums dans ce cadre. Cf. figure (\ref{fig:extrema}).
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{extrema}
   \caption[Région 1]{Région 1, lignes de niveau de SSH (sans
@@ -1475,7 +1491,7 @@ le plus intérieur : SSH = \np{0.293300003} m. Contour le plus
 extérieur : SSH = \np{0.460504} m. Contour de vitesse maximale : SSH =
 \np{0.3815} m. Cf. figures (\ref{fig:test_get_eddy}) et
 (\ref{fig:test_get_snapshot}).
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{test_get_eddy}
   \caption[Test Set\_max\_speed]{Test Set\_max\_speed. Projection
@@ -1485,7 +1501,7 @@ extérieur : SSH = \np{0.460504} m. Contour de vitesse maximale : SSH =
     point.}
   \label{fig:test_get_eddy}
 \end{figure}
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{test_get_snapshot}
   \caption[Test Extraction\_eddies\_region\_1]{Test
@@ -1508,7 +1524,7 @@ sont presque les mêmes aussi : j'ai \np{87.7} km au lieu de \np{87.5}
 km et \np{90.80} km au lieu de \np{90.81} km. Les SSH sur les contours
 de vitesse max diffèrent de 2 cm environ. Cf. figure
 (\ref{fig:comparaison_Matlab}).
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{comparaison_201}
   \includegraphics[width=\textwidth]{comparaison_202}
@@ -1543,7 +1559,7 @@ donc pas prendre max\_radius = 12.
 
 Test de
 \verb+max_speed_contour_ssh+. Cf. figure~\ref{fig:test_max_speed_contour_ssh}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{test_max_speed_contour_ssh}
   \caption[SSH pour le test de max\_speed\_contour\_ssh]{SSH pour le
@@ -1570,7 +1586,7 @@ Opteron 6134 sur Ciclad sont juste plus lents.
 Sur Ciclad, version \verb+0.17+, le temps passé à la concaténation des
 shapefiles semble du même ordre de grandeur que le temps passé dans
 l'exécutable Fortran. Cf. figure \ref{fig:elapsed_time}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{elapsed_time}
   \caption[Temps écoulé]{Test de performance de
@@ -1584,7 +1600,7 @@ vue de la figure \ref{fig:elapsed_time}, on peut se demander s'il y a
 un cycle reproductible de temps d'exécution par date. Le graphique
 pour une période plus longue ne le confirme pas : figure
 \ref{fig:Inst_eddies_9}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{Inst_eddies_9}
   \caption[Temps d'exécution pour l'expérience Inst\_eddies\_9]{Temps
@@ -1632,7 +1648,7 @@ Les tests dans \verb+test_output.json+ montrent, sur ciclad :
   taille.
 \end{itemize}
 Cf. figure \ref{fig:plot_test_output}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{plot_test_output}
   \caption[Tests dans test\_output.json]{Tests dans test\_output.json,
@@ -1656,7 +1672,7 @@ temps pris par l'exécutable Fortran est stable vers 24 s, dont environ
 23 s user et 1 s système.
 
 \verb+Inst_eddies_1993_2020+. Cf. figure \ref{fig:distribution}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{distribution}
   \caption[Fonctions de
@@ -1669,7 +1685,7 @@ Une variabilité d'un facteur 2, en cput comme en walltime.  Beaucoup
 de temps d'attente en sommeil pour certaines années. Le temps
 d'attente en sommeil n'est pas corrélé au cput. Cf. figure
 \ref{fig:cput_sleep}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{cput_sleep}
   \caption[Temps de sommeil]{Inst\_eddies\_1993\_2020. Temps de
@@ -1680,7 +1696,7 @@ On a bien l'égalité approximative entre walltime donné par Torque et
 real donné par la commande time. On a bien l'égalité approximative
 entre cput donné par Torque et user + sys donné par la commande
 time. Cf. figure \ref{fig:user_sys}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{user_sys}
   \caption[walltime, sleep, user,
@@ -1694,7 +1710,7 @@ internet, le processeur AMD Opteron 6378 est décrit comme plus
 puissant. 69 \% d'augmentation de user de 2010 à 2016. Le nombre de
 tourbillons (anti + cyclo) augmente de 3 \% de 2010 à 2016. Cf. figure
 \ref{fig:user_proc}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{user_proc}
   \caption[CPU user time and processor type]{Relation entre temps CPU
@@ -1742,7 +1758,7 @@ d'abord et d'augmenter éventuellement le rayon jusqu'à
 bord du domaine.
 
 Créer une carte de présence. \`A chaque point du maillage, enregistrer
-le numéro du tourbillon présent ou 0. Méthode : pour chaque contour
+le numéro intra-date du tourbillon présent ou 0. Méthode : pour chaque contour
 extérieur (ou chaque contour de maximum de vitesse ?), pour chaque
 point dans le rectangle circonscrit et dans le bon intervalle de SSH,
 appeler \verb+polygon_contains_point+. Ou chercher les points connexes
diff --git a/Overlap/Documentation_texfol/documentation.tex b/Overlap/Documentation_texfol/documentation.tex
index 9e55c42d..a6d7fd32 100644
--- a/Overlap/Documentation_texfol/documentation.tex
+++ b/Overlap/Documentation_texfol/documentation.tex
@@ -58,9 +58,11 @@
 
 Nous supposons que les tourbillons instantanés, entre lesquels nous
 avons à chercher des recouvrements, sont à un ensemble de dates
-régulièrement espacées. Ces dates sont identifiées par un nombre
-entier prenant les valeurs successives entre $k_1$ et
-$k_1 + \mathtt{n\_dates} - 1$.
+régulièrement espacées. Ces dates sont identifiées par un indice (un
+nombre entier) prenant les valeurs successives entre $k_1$ et
+$k_1 + \mathtt{n\_dates} - 1$. $k_1$ est le premier indice de date de
+la première tranche de SHPC. $\mathtt{n\_dates}$ est le nombre total
+de dates dans toutes les tranches de SHPC.
 
 Chaque tourbillon à chaque date reçoit un identifiant. Les
 recouvrements de tourbillons à différentes dates peuvent être
@@ -83,7 +85,7 @@ deux dates successives.
 Le graphe est orienté acyclique. L'ordre topologique est tout trouvé :
 numérotation par dates successives. Le graphe non orienté associé
 n'est pas une forêt. Cf. figure \ref{fig:cycle}.
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[scale=0.5]{cycle}
   \caption[Exemple possible de cycle dans le graphe non orienté
@@ -122,11 +124,7 @@ inférieure à $\delta'$. De même, un tourbillon donné à une date donnée
 peut avoir des prédécesseurs à différentes distances
 temporelles. Cf. figures \ref{fig:delta} et \ref{fig:overlap} et
 commentaires sur la procédure overlap.
-En résumé, une propriété topologique du graphe produit est que les
-motifs représentés sur la figure \ref{fig:motif_impossible} ne peuvent
-être présents dans le graphe.
-
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics{delta}
   \caption[Un exemple pour tester la procédure overlap]{Un exemple
@@ -134,8 +132,7 @@ motifs représentés sur la figure \ref{fig:motif_impossible} ne peuvent
     donne le graphe de recouvrement correspondant.}
   \label{fig:delta}
 \end{figure}
-
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics{overlap}
   \caption[Un morceau d'un graphe de recouvrement]{Un morceau d'un
@@ -155,8 +152,10 @@ motifs représentés sur la figure \ref{fig:motif_impossible} ne peuvent
     overlap.}
   \label{fig:overlap}
 \end{figure}
-
-\begin{figure}[htbp]
+En résumé, une propriété topologique du graphe produit est que les
+motifs représentés sur la figure \ref{fig:motif_impossible} ne peuvent
+être présents dans le graphe.
+\begin{figure}
   \centering
   \includegraphics{motif_impossible}
   \caption[Motif impossible dans le graphe produit]{Motifs impossibles
@@ -267,7 +266,7 @@ directement (écriture dans \verb+isolated_nodes_$m+). Les processus
 écrivent dans des fichiers ou répertoires indicés par le numéro de
 processus donc deux processus ne peuvent écrire dans le même
 fichier. Cf. figure (\ref{fig:input_output}).
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics{input_output}
   \caption{Entrées et sorties du programme de recouvrement.}
@@ -306,14 +305,14 @@ i désigne un indice de tourbillon, j un indice de position dans la
 fenêtre temporelle (entre 1 et $\max \delta$ + 1) et k un indice de
 date. Cf. figure (\ref{fig:window}) et algorithme
 (\ref{alg:main_sequential}).
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics{window}
   \caption{Indice de position dans la fenêtre glissante et indice de
     date.}
   \label{fig:window}
 \end{figure}
-\begin{algorithm}[htbp]
+\begin{algorithm}
   \begin{algorithmic}
     \STATE \COMMENT{\{$\max \delta$ $\ge 1$; n\_dates $\ge$ $\max \delta$ +
       1\}} 
@@ -370,7 +369,7 @@ date. Cf. figure (\ref{fig:window}) et algorithme
 
 Le processus $m$ envoie au processus $m - 1$. Cf. figure
 (\ref{fig:processes}).
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{processes}
   \caption[Raccordement des processus]{Raccordement des processus. Les
@@ -503,7 +502,7 @@ Si $m \ge 1$ alors :
 
 Exemples : cf. tableaux (\ref{tab:m2}) et (\ref{tab:m3}) et figures
 \ref{fig:m3} et \ref{fig:15_3}.
-\begin{table}[htbp]
+\begin{table}
   \centering
   \begin{tabular}{llll}
     $m$ & $k_b$ & $k_e$ & \verb+k_end_main_loop+ \\
@@ -519,7 +518,7 @@ Exemples : cf. tableaux (\ref{tab:m2}) et (\ref{tab:m3}) et figures
     6 à 9, écriture 10.}
   \label{tab:m2}
 \end{table}
-\begin{table}[htbp]
+\begin{table}
   \centering
   \begin{tabular}{llll}
     $m$ & $k_b$ & $k_e$ & \verb+k_end_main_loop+ \\
@@ -532,7 +531,7 @@ Exemples : cf. tableaux (\ref{tab:m2}) et (\ref{tab:m3}) et figures
   3$]{$\max \delta = 4$, n\_dates = 15, $n_p = 3$, $k_1 = 1$.}
   \label{tab:m3}
 \end{table}
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{m3}
   \caption[$\max \delta = 4$, n\_dates = 15, $n_p =
@@ -543,7 +542,7 @@ Exemples : cf. tableaux (\ref{tab:m2}) et (\ref{tab:m3}) et figures
     l'algorithme principal.}
   \label{fig:m3}
 \end{figure}
-\begin{figure}[htbp]
+\begin{figure}
   \centering
   \includegraphics[width=\textwidth]{15_3}
   \caption[Exemple de parallélisation pour 3 processus]{Exemple de
diff --git a/README.md b/README.md
index 1c008038..3bec99e1 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,59 @@
-This code implements ideas and methods described in the following articles:
-[Chaigneau et al., 2009](https://doi.org/10.1016/j.pocean.2009.07.012);
-[Chaigneau et al., 2011](https://doi.org/10.1029/2011JC007134);
-[Pegliasco et al., 2015](https://doi.org/10.1002/2015jc010950);
-[Laxenaire et al., 2018](https://doi.org/10.1029/2018JC014270).
+# What is it?
+
+This repository contains software to detect and follow oceanic
+meso-scale eddies. The code implements ideas and methods described in
+the following articles: [Chaigneau et al.,
+2009](https://doi.org/10.1016/j.pocean.2009.07.012); [Chaigneau et
+al., 2011](https://doi.org/10.1029/2011JC007134); [Pegliasco et al.,
+2015](https://doi.org/10.1002/2015jc010950); [Laxenaire et al.,
+2018](https://doi.org/10.1029/2018JC014270).
+
+## Context
+
+Ssalto : segment sol multimissions d'altimétrie, d'orbitographie et de
+localisation précise. Duacs : data unification and altimeter
+combination system. MADT : maps of absolute dynamic topography and
+absolute geostrophic velocities. Cf. aussi le glossaire sur le site
+[Aviso](http://www.aviso.altimetry.fr/en/home.html).
+
+Données altimétriques AVISO. Un satellite revient tous les sept jours
+au même endroit. AVISO distribue un champ sur une grille, quotidien,
+au quart de degré : la hauteur par rapport à l'ellipsoïde (ADT). Au
+format NetCDF. On cherche des structures de 50 à 200 km de
+rayon. Vitesse de rotation de l'ordre de 1 m s$^{- 1}$, vitesse du
+centre de l'ordre de 1 dm s$^{- 1}$.  Propriétés de l'eau différentes
+à l'intérieur et à l'extérieur d'un tourbillon. \Eng{Agulhas rings}
+créés au sud de l'Afrique et transportés sur des années vers
+l'Amérique du sud.
+
+Prendre les données globales \Eng{delayed time gridded absolute
+  dynamic topography} (DT-MADT) et \Eng{delayed time gridded
+  geostrophic velocities anomalies} (DT-MSLA-UV).
+
+[CMEMS](http://marine.copernicus.eu) a pris le relais d'AVISO pour la
+distribution des données.
+
+La norme de la vitesse géostrophique et la composante orthoradiale
+doivent être à peu près constantes sur une ligne de niveau de la
+hauteur.
+
+## Vue d'ensemble du traitement informatique
+
+Les données sont des champs globaux de SSH, u, v, sur un maillage au
+quart de degré, quotidiens, sur 29 ans (environ 10$^4$ dates). Le
+traitement informatique fonctionne indépendamment de la résolution du
+maillage et de la durée considérée mais la résolution et la durée
+visées orientent les choix de programmation pour un temps d'exécution,
+une consommation de mémoire vive et des tailles de fichiers produits
+raisonnables. Les résultats doivent être un ensemble de tourbillons
+détectés à chaque date et un suivi des tourbillons entre les
+différentes dates.
+
+Le traitement peut être décomposé en trois parties : détection des
+tourbillons instantanés ; graphe des recouvrements ; identification
+des trajectoires.
+
+# Installation
 
 Dependencies: graph-tool networkx pyshp f90nml cartopy pygifsicle
 ipython h5py pynco pygraphviz
-- 
GitLab