Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
D
Detection eddies
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
IPSL
LMD
DPAO
Detection eddies
Commits
19c2ecb6
Commit
19c2ecb6
authored
3 years ago
by
Lionel GUEZ
Browse files
Options
Downloads
Patches
Plain Diff
Remove documentation on interpolated eddies
parent
a90ebb4c
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Inst_eddies/Documentation_texfol/documentation.tex
+4
-6
4 additions, 6 deletions
Inst_eddies/Documentation_texfol/documentation.tex
Overlap/Documentation_texfol/documentation.tex
+15
-133
15 additions, 133 deletions
Overlap/Documentation_texfol/documentation.tex
with
19 additions
and
139 deletions
Inst_eddies/Documentation_texfol/documentation.tex
+
4
−
6
View file @
19c2ecb6
...
...
@@ -432,9 +432,8 @@ Format shapefile. Un type de géométrie par fichier donc il faut
séparer les contours et les positions des extremums.
\begin{itemize}
\item
\verb
+
extremum.shp
+
: points
\item
\verb
+
extremum.dbf
+
: valeur de SSH, indice de date, indice de tourbillon à cette date,
interpolé (logique), cyclone (logique), valid (logique), valeur
\item
\verb
+
extremum.dbf
+
: valeur de SSH, indice de date, indice de
tourbillon à cette date, cyclone (logique), valid (logique), valeur
de vitesse sur le contour de vitesse maximale
\item
\verb
+
outermost_contour.shp
+
: polygones
\item
\verb
+
outermost_contour.dbf
+
: aire, valeur de SSH, indice de
...
...
@@ -479,9 +478,8 @@ Pour un extremum donné, radius4 est le rayon, en pas de grille, de la
plus petite croix autour de l'extremum qui déborde le contour
extérieur. Si un contour extérieur valide n'a pas été trouvé alors
radius4 est nul. Si un contour extérieur valide a été trouvé alors
radius4 est
$
\ge
1
$
. Les champs interpolated et radius4 sont écrits à
titre diagnostique et ne sont pas utilisés dans le programme de
recouvrement.
radius4 est
$
\ge
1
$
. Le champ radius4 est écrit à titre diagnostique
et n'est pas utilisé dans le programme de recouvrement.
J'avais d'abord mis la valeur de vitesse dans le fichier
\verb
+
max_speed_contour_$m.dbf
+
mais cette vitesse peut être associée
...
...
This diff is collapsed.
Click to expand it.
Overlap/Documentation_texfol/documentation.tex
+
15
−
133
View file @
19c2ecb6
...
...
@@ -81,9 +81,6 @@ Notons ici $k_b$, $k_e$, $\max \delta$ et $n_p$ les valeurs contenues
dans les variables Fortran
\verb
+
k_begin
+
,
\verb
+
k_end
+
,
\verb
+
max_delta
+
et
\verb
+
n_proc
+
respectivement.
On ne cherche des superpositions qu'entres tourbillons visibles, en
excluant les tourbillons interpolés.
Pour comparer les tourbillons à deux dates, il semble coûteux de
n'utiliser que les listes de tourbillons aux deux dates. Cela implique
une double boucle sur les listes de tourbillons, à l'intérieur d'une
...
...
@@ -142,16 +139,15 @@ commentaires sur overlap.
Lorsqu'on compare des tourbillons à distance temporelle delta (entre 1
et
$
\max
\delta
$
), on veut tester s'ils n'ont pas de prédécesseur ou
successeur visible à une date intermédiaire. Il faut donc, si on crée
un arc entre deux dates successives, ou delta arcs à distance delta
(par interpolation de tourbillons invisibles), enregistrer ce fait en
prévision du passage au delta supérieur. Mais d'un autre côté, on ne
veut pas que le fait de mettre des arcs à l'étape delta ait une
importance pour la suite de l'étape delta. (Et accessoirement, on ne
veut pas que l'ordre dans lequel on passe les tourbillons à l'étape
delta ait une importance.) On est donc obligé d'enregistrer, pour
chaque tourbillon, non seulement s'il a des prédécesseurs visibles et
s'il a des successeurs visibles, mais aussi à quelle distance
temporelle.
un arc entre deux dates successives, ou un arc à distance delta,
enregistrer ce fait en prévision du passage au delta supérieur. Mais
d'un autre côté, on ne veut pas que le fait de mettre des arcs à
l'étape delta ait une importance pour la suite de l'étape delta. (Et
accessoirement, on ne veut pas que l'ordre dans lequel on passe les
tourbillons à l'étape delta ait une importance.) On est donc obligé
d'enregistrer, pour chaque tourbillon, non seulement s'il a des
prédécesseurs visibles et s'il a des successeurs visibles, mais aussi
à quelle distance temporelle.
$
m
$
est le numéro du processus MPI, compris entre 0 et
$
n
_
p
-
1
$
. On
pourrait écrire l'algorithme principal en explicitant les
...
...
@@ -179,15 +175,7 @@ Dans le programme de recouvrement, idée d'admettre des tourbillons
dont les numéros à une date donnée n'iraient pas forcément de 1 au
nombre de tourbillons visibles. L'intérêt serait de pouvoir traiter
des domaines extraits d'un snapshot global. il faudrait ajouter une
composante identifiant au type eddy, remplacer la composante
\verb
+
number_eddies
+
du type snapshot par une composante
\verb
+
number_interp_eddies
+
et passer :
\begin{verbatim}
- flow(j - delta + 1:j - 1)
%number_interp_eddies
\end{verbatim}
au lieu de
\verb
|
flow(j - delta + 1:j - 1)%number_eddies
|
à
\verb
+
write_overlap
+
pour que les
numéros de tourbillons interpolés soient négatifs.
composante identifiant au type eddy.
Optimisation. Les send doivent-ils être bloquants ? Les recv ? Ne pas
utiliser bsend. L'algorithme ne permet pas isend ni irecv. Penser à
...
...
@@ -195,44 +183,6 @@ utiliser bsend. L'algorithme ne permet pas isend ni irecv. Penser à
\section
{
Entrées et sorties
}
On pourrait créer un shapefile séparé pour les extremums interpolés
(points), avec des méta-données supplémentaires sur les contours
fictifs associés. En notant
$
m
$
le numéro de processus MPI :
\begin{itemize}
\item
\verb
+
extremum_interpolated_$m.shp
+
: points
\item
\verb
+
extremum_interpolated_$m.dbf
+
: valeur de SSH à l'extremum,
indice de date, indice de tourbillon à cette date, aire du contour
de SSH le plus éloigné, valeur de SSH sur le contour de SSH le plus
éloigné, aire du contour de vitesse maximale, valeur de vitesse sur
le contour de vitesse maximale
\end{itemize}
Mais il me semble plus simple et clair d'écrire les tourbillons
interpolés avec les autres, en utilisant une forme NULL pour le
polygone correspondant à un contour interpolé.
On n'enregistre pas de contours pour les tourbillons interpolés. Les
tourbillons interpolés sont écrits avec les autres, en utilisant une
forme NULL pour le polygone correspondant à un contour interpolé. Un
processus donné, dans plusieurs appels à overlap, peut interpoler des
extremums à une même date. Donc, dans le shapefile
\verb
+
extremum
+
écrit par un processus donné, les dates sont dans le désordre. En
outre, deux processus peuvent interpoler des extremums à une même
date. Il sera certainement utile de concaténer et trier les shapefiles
en post-traitement. Pour trier, je ne suis pas obligé de charger en
mémoire vive tous les shapefiles : je peux simplement faire la
concaténation puis lire dans
\verb
+
extremum.dbf
+
par exemple deux suites
d'entiers
\verb
+
date_index
+
et
\verb
+
eddy_index
+
.
Un processus donné alterne lecture de shapefiles (créés par
extraction
\_
eddies) et écriture de shapefiles (contenant les
tourbillons interpolés). Un processus donné doit donc manipuler deux
jeux de pointeurs de shapefiles. On peut éventuellement supposer que
les numéros de champs sont les mêmes pour les deux jeux de shapefiles.
La méta-donnée logique
\og
interpolé
\fg
{}
dans
\verb
+
extremum_$m.dbf
+
est nécessaire parce qu'il est possible de ne
pas trouver de contour extérieur autour d'un extremum détecté.
Une possibilité simple de stockage de graphe est la liste d'adjacences
(en texte), c'est-à-dire, pour chaque sommet du graphe, une ligne :
\begin{verbatim}
...
...
@@ -270,12 +220,10 @@ facilement trouvée. On ajoute par conséquent les fichiers de sortie
suivants :
\begin{description}
\item
[number\_eddies\_\$m.csv]
Une colonne indice de date, une colonne
nombre de tourbillons visibles, une colonne nombre de tourbillons
interpolés.
\item
[isolated\_nodes\_\$m.txt]
Sur chaque ligne : indice de date, indice
de tourbillon. Peut être lu comme une simple liste
d'adjacence. Remarque : par construction, les tourbillons interpolés
ne sont jamais isolés.
nombre de tourbillons visibles.
\item
[isolated\_nodes\_\$m.txt]
Sur chaque ligne : indice de date,
indice de tourbillon. Peut être lu comme une simple liste
d'adjacence.
\end{description}
Les entrées-sorties sont dans : l'algorithme principal directement
...
...
@@ -329,11 +277,6 @@ par \verb+overlap+.
\item
[weight\_delta]
Scalaire réel.
\end{description}
On doit stocker dans le champ number
\_
eddies le nombre de tourbillons
parce qu'on peut refaire des interpolations à une même date dans
différents appels à overlap avec delta
$
\ge
2
$
: il faut que le numéro
de tourbillon interpolé soit bien incrémenté.
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
...
...
@@ -736,54 +679,6 @@ $(k, \delta_1, m_1)$ est terminé avant l'appel $(k, \delta_2,
m
_
2
)
$
. Les prédécesseurs d'une date donnée sont cherchés dans l'ordre
croissant des
$
\delta
$
.
\subsection
{
Numéros des tourbillons interpolés
}
L'attribution d'un numéro de tourbillon interpolé, et donc
l'incrémentation du nombre de tourbillons interpolés, à chaque date,
sont faits par la procédure overlap. Montrons que : deux processus ne
peuvent pas attribuer le même numéro de tourbillon interpolé à une
date donnée ; une incrémentation à une date donnée par un processus ne
peut pas s'intercaler entre deux incrémentations à la même date par un
autre processus.
Considérons deux appels de overlap :
$
(
m
_
1
, k
_
1
,
\delta
_
1
)
$
et
$
(
m
_
2
, k
_
2
,
\delta
_
2
)
$
, avec
$
m
_
1
\ne
m
_
2
$
. Supposons qu'il existe un
indice de date
$
k
$
appartenant à
$
\{
k
_
1
-
\delta
_
1
+
1
,
\dots
, k
_
1
-
1
\}
\cap
\{
k
_
2
-
\delta
_
2
+
1
,
\dots
, k
_
2
-
1
\}
$
. Avec les équations (
\ref
{
eq:pred
_
main
_
loop
}
) et
(
\ref
{
eq:predecessor
}
),
$
k
$
est dans l'intersection des domaines de
$
m
_
1
$
et
$
m
_
2
$
. Donc
$
|m
_
2
-
m
_
1
|
=
1
$
et on peut supposer sans perte
de généralité que
$
m
_
1
=
m
_
2
+
1
$
.
\begin{multline*}
k
_
2
\ge
k + 1
\ge
k
_
1 -
\delta
_
1 + 2
\ge
k
_
b(m
_
1) + 2
= k
_
b(m
_
2 + 1) + 2
\\
= k
_
e(m
_
2) -
\max
\delta
+ 3
=
\mathtt
{
k
\_
end
\_
main
\_
loop
}
(m
_
2) + 2
\end{multline*}
Donc l'appel
$
(
m
_
2
, k
_
2
,
\delta
_
2
)
$
est dans l'épilogue. L'overlap
$
(
m
_
2
, k
_
2
,
\delta
_
2
)
$
suit forcément un
\verb
+
get_snapshot(k2)
+
. Le
\verb
+
get_snapshot(k2)
+
est une réception bloquante. Il suit forcément
un send de
$
k
_
2
$
du processus
$
m
_
1
$
. Dans un processus quelconque,
après un
\verb
+
dispatch_snapshot
+
d'une date quelconque, plus aucun
overlap ne recouvre cette date. Donc l'overlap
$
(
m
_
1
, k
_
1
,
\delta
_
1
)
$
est forcément fini avant le début de l'overlap
$
(
m
_
2
, k
_
2
,
\delta
_
2
)
$
.
$
\Box
$
Pour deux exécutions avec des entrées identiques mais des nombres de
processus MPI différents, le numéro d'un tourbillon interpolé à une
certaine date entre deux tourbillons visibles donnés peut varier. En
effet, ce numéro est attribué par la procédure overlap et dépend donc
de l'ordre dans lequel les procédures overlap interpolent à une date
donnée. Par exemple, pour
$
\max
\delta
=
4
$
, n
\_
dates = 15,
$
n
_
p
=
3
$
,
$
k
_
1
=
1
$
, l'overlap 5-9 s'exécute après l'overlap 7-10. Cf. figure
\ref
{
fig:15
_
3
}
. Alors que l'overlap 5-9 s'exécute avant l'overlap 7-10
pour
$
n
_
p
=
1
$
ou 2. Difficile de mettre en place une numérotation qui
serait indépendante de l'ordre des overlap. Pour comparer facilement
les résultats d'exécutions avec différents nombres de processus, il
reste donc la possibilité de renuméroter après coup les tourbillons
interpolés : script
\verb
+
renumber_interp.py
+
.
\section
{
Algorithme principal, parallèle
}
\begin{algorithmic}
...
...
@@ -894,14 +789,6 @@ croissantes. \verb+get_snapshot+ n'a donc besoin d'avoir à un instant donné
qu'un seul triplet ouvert. Je fais le pari que plusieurs processus MPI
pourront accéder en même temps en lecture à un même fichier.
\subsection
{
init
\_
interpolated
\_
eddy
}
On peut mettre le champ valid à faux pour un tourbillon interpolé,
en cohérence avec un champ
\verb
+
out_cont
+
vide. Il faut alors un
champ interpolated pour distinguer les tourbillons interpolés de ceux
pour lesquels un extremum a été détecté mais sans obtenir de contour
extérieur.
\subsection
{
overlap
}
Accélération possible en ne comparant à i1 que les trois tourbillons
...
...
@@ -949,12 +836,7 @@ laquelle des successeurs ont été trouvés. (Commission 7bb46ec.)
\subsection
{
weight
}
D'autant plus proche de 0 que les tourbillons sont
ressemblants. Comment calculer ce poids ? Comment calculer le poids
faisant intervenir un ou deux tourbillons interpolés ? Pour faire au
plus simple, j'ai supposé que l'on utilisait pour les arcs faisant
intervenir les tourbillons interpolés le poids associé aux tourbillons
visibles entre lesquels on interpole. Normalement, ce choix doit
donner un poids plus faible à ces arcs.
ressemblants. Comment calculer ce poids ?
\section
{
Tests
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment