Skip to content
Snippets Groups Projects
Commit 1e9d5109 authored by Lionel GUEZ's avatar Lionel GUEZ
Browse files

Polish

parent 2fb53156
No related branches found
No related tags found
No related merge requests found
......@@ -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*}
$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*}
$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
......
{
"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",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment