From 1e9d5109b3d31ebb80ef6016cbade98e65902917 Mon Sep 17 00:00:00 2001 From: Lionel GUEZ <guez@lmd.ens.fr> Date: Wed, 29 May 2024 11:13:39 +0200 Subject: [PATCH] Polish --- .../Documentation_texfol/documentation.tex | 94 +++++++++++-------- Trajectories/Tests/perf_tests.json | 2 +- 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/Trajectories/Documentation_texfol/documentation.tex b/Trajectories/Documentation_texfol/documentation.tex index 079caaf1..fbbc59df 100644 --- a/Trajectories/Documentation_texfol/documentation.tex +++ b/Trajectories/Documentation_texfol/documentation.tex @@ -39,7 +39,7 @@ divise, il peut être utile de suivre dans le futur un des tourbillons issus de la division, ou de suivre dans le passé un des tourbillons fusionnant, jugé comme tourbillon principal dans l'événement de fusion ou division. Le graphe des recouvrements est complètement neutre et -objectif sur cette question : il représente toute les divisions et +objectif sur cette question : il représente toutes les divisions et fusions par des arcs. On peut donc traiter ce graphe pour produire des chemins préférentiels dans le graphe, correspondant à des tourbillons dont on considère qu'ils conservent leur identité à @@ -47,9 +47,19 @@ travers des événements de fusion ou division. On peut aussi décomposer le graphe en composantes connexes, ou chercher le graphe amont ou aval à partir d'un noeud du graphe. +Il y a en théorie des graphes ce qu'on appelle une géodésique d'un +graphe : c'est un chemin le plus court sur le graphe, en tenant compte +des poids des arêtes. On peut définir aussi une géodésique maximale : +qui ne peut pas être étendue ni à son origine ni à sa fin. Et il y a +un problème connu en théorie des graphes : celui de la décomposition +d'un graphe en un nombre minimal de géodésiques. Si j'ai bien compris, +c'est un problème difficile et je n'ai pas trouvé d'algorithme tout +prêt. + Des bibliothèques Python de traitement de graphe semblent bien -adaptées pour cette partie. Création d'une liste de chemins qui -recouvrent tout le graphe. +adaptées pour ces traitements. Les scripts dans le répertoire +\verb+Trajectoires+ créent des trajectoires. Ces trajectoires forment +une liste de chemins qui recouvrent tout le graphe. Vocabulaire : fusion pour \Eng{merging} et division pour \Eng{splitting}. @@ -59,34 +69,6 @@ Idée d'une naissance et d'une mort d'un tourbillon, avec une source chaque tourbillon, on peut lister ses défluents non afluents, ses affluents non défluents et ses défluents-affluents. -\`A une jonction entre segments (division ou fusion), calcul sur sept -jours avant et après la jonction, pour chaque segment, de moyennes sur -le segment : $\overline{\Delta N_\mathrm{Ro}}$, -$\overline{\Delta N_\mathrm{Bu}}$, $\bar d$ et d'écarts-types sur le -segment : $\sigma_{\Delta N_\mathrm{Ro}}$, -$\sigma_{\Delta N_\mathrm{Bu}}$, $\sigma_d$. Le nombre de Rossby -$N_\mathrm{Ro}$ : -\begin{equation*} - N_\mathrm{Ro} = \frac{|v|}{R |f|} -\end{equation*} -est calculé sur le contour de vitesse maximale, et le nombre de Burger -$N_\mathrm{Bu}$ : -\begin{equation*} - N_\mathrm{Bu} = \frac{g A}{R^2 f^2} -\end{equation*} -où $A$ est l'amplitude, est calculé sur le contour extérieur. $d$ est -la distance entre les extremums. Calcul d'une fonction de coût à -partir des grandeurs ci-dessus, analogue à celle de Pegliasco (2015 -k0998, équation (1)) qui permet de faire un choix à travers la -jonction. Ou bien utilisation de la fonction de coût de Le Vu (2018 -k1000). - -\verb+cost_function.py+. En extrayant les $10^6$ premières arêtes dans -le graphe des tourbillons instantanés du domaine global Aviso -1993-2023, les tourbillons sont étalés sur un an environ. Le graphe -des segments contient environ \np{8e4} -noeuds. Cf. \href{../experiences.ods}{expériences}. - Pour lire dans Networkx un graphe de Graph-tool créé par \verb+segments.py+ ou \verb+cost_function.py+, le passage par le format GraphML ne marche pas à cause des attributs vecteurs. Passer @@ -124,16 +106,7 @@ Mémoire vive nécessaire pour charger le graphe global sur 28 ans, sans attributs, avec Graph-tool : environ \np{6.1} GiB. Il faut au moins 11 GiB avec Networkx. -Il y a en théorie des graphes ce qu'on appelle une géodésique d'un -graphe : c'est un chemin le plus court sur le graphe, en tenant compte -des poids des arêtes. On peut définir aussi une géodésique maximale : -qui ne peut pas être étendue ni à son origine ni à sa fin. Et il y a -un problème connu en théorie des graphes : celui de la décomposition -d'un graphe en un nombre minimal de géodésiques. Si j'ai bien compris, -c'est un problème difficile et je n'ai pas trouvé d'algorithme tout -prêt. - -\section{\texttt{segments.py}} +\section{Script \texttt{segments.py}} Définition d'un segment : si un tourbillon se divise, c'est-à -dire si le degré sortant du noeud correspondant est supérieur à 2, alors le @@ -187,6 +160,45 @@ graph-tool. Is is between 0 and $N - 1$ where $N$ is the number of vertices in the graph. It appears in the file \verb+traj_vert_ind.json+ created by script \verb+trajectories.py+. +\section{Script \texttt{cost\_function.py}} + +\`A une jonction entre segments (division ou fusion), calcul sur sept +jours avant et après la jonction, pour chaque segment, de moyennes sur +le segment : $\overline{\Delta N_\mathrm{Ro}}$, +$\overline{\Delta N_\mathrm{Bu}}$, $\bar d$ et d'écarts-types sur le +segment : $\sigma_{\Delta N_\mathrm{Ro}}$, +$\sigma_{\Delta N_\mathrm{Bu}}$, $\sigma_d$. Le nombre de Rossby +$N_\mathrm{Ro}$ : +\begin{equation*} + N_\mathrm{Ro} = \frac{|v|}{R |f|} +\end{equation*} +est calculé sur le contour de vitesse maximale, et le nombre de Burger +$N_\mathrm{Bu}$ : +\begin{equation*} + N_\mathrm{Bu} = \frac{g A}{R^2 f^2} +\end{equation*} +où $A$ est l'amplitude, est calculé sur le contour extérieur. $d$ est +la distance entre les extremums. Calcul d'une fonction de coût à +partir des grandeurs ci-dessus, analogue à celle de Pegliasco (2015 +k0998, équation (1)) qui permet de faire un choix à travers la +jonction. Ou bien utilisation de la fonction de coût de Le Vu (2018 +k1000). + +En extrayant les $10^6$ premières arêtes dans le graphe des +tourbillons instantanés du domaine global Aviso 1993-2023, les +tourbillons sont étalés sur un an environ. Le graphe des segments +contient environ \np{8e4} +noeuds. Cf. \href{../experiences.ods}{expériences}. + +Dans le calcul de \verb+ip_beg+ et \verb+ip_end+, il y a +potentiellement des répétitions de calcul de date pour les mêmes +tourbillons instantanés. Nous aurions pu l'éviter en définissant un +tableau de dates pour le début de segment, que nous aurions ré-utilisé +en partie pour la fin de segment, de la même façon que nous +ré-utilisons le tableau properties. Cela aurait dégradé la lisibilité +de l'algorithme et la différence de performance doit être faible dans +la mesure où le coût de calcul d'une date est faible. + \section{Script \texttt{trajectory.py}} Les trajectoires sont presque toujours, mais pas toujours, des diff --git a/Trajectories/Tests/perf_tests.json b/Trajectories/Tests/perf_tests.json index 04138ad5..88162b77 100644 --- a/Trajectories/Tests/perf_tests.json +++ b/Trajectories/Tests/perf_tests.json @@ -1,6 +1,6 @@ { "Perf_segments": { - "description": "Performance test with adjustable size of input. edgelist_head comes from head of Global_1993_2023/Graph_anti/edgelist.csv.", + "description": "Performance test with adjustable size of input. edgelist_head comes from command `head` on Global_1993_2023/Graph_anti/Run_4/edgelist.csv.", "command": [ "$src_dir/Trajectories/segments.py", "$PWD/edgelist_head.csv", -- GitLab