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

Polish.

parent ff66ef80
No related branches found
Tags v0.4
No related merge requests found
No preview for this file type
......@@ -68,18 +68,31 @@ l'amplitude minimale. Même si un contour extérieur est trouvé (avec
une amplitude supérieure à l'amplitude minimale par construction), il
peut ne pas être valide à cause du critère de surface minimale.
Le champ speed de extremum.dbf vaut \verb+missing_speed+ si et
seulement si radius4 == 0 ou \verb+speed_outerm+ dans
\verb+set_max_speed+ est NaN. Si radius4 $\ge$ 2 et speed dans
\begin{tabular}{p{5cm}cp{5cm}}
\hline
Le champ speed de extremum.dbf vaut \verb+missing_speed+
& $\Leftrightarrow$ &
radius4 == 0 ou \verb+speed_outerm+ dans \verb+set_max_speed+ est NaN \\
\hline
\end{tabular}
Si radius4 $\ge$ 2 et speed dans
extremum.dbf vaut \verb+missing_speed+ alors \verb+speed_outerm+ dans
\verb+set_max_speed+ est NaN, \verb+e%speed_cont+ est
non vide dans \verb+max_speed_contour.shp+ et \verb+mean_speed+ sur
\verb+set_max_speed+ est NaN, la forme est non vide dans
\verb+max_speed_contour.shp+ et \verb+mean_speed+ sur
\verb+e%speed_cont+ a donné un NaN. En d'autres termes, les deux
appels à \verb+mean_speed+ ont tous les deux produit un
NaN. (\verb+e%speed_cont+ est
non vide dans \verb+max_speed_contour.shp+ et speed dans extremum.dbf
vaut \verb+missing_speed+) si et seulement si (radius4 $\ge$ 2 et
speed dans extremum.dbf vaut \verb+missing_speed+).
NaN.
\begin{tabular}{p{5cm}cp{5cm}}
\hline
La forme est non vide dans \verb+max_speed_contour.shp+ et
speed dans extremum.dbf vaut \verb+missing_speed+
& $\Leftrightarrow$
& radius4 $\ge$ 2 et speed dans extremum.dbf vaut
\verb+missing_speed+ \\
\hline
\end{tabular}
Cas où les composantes \verb+out_cont+ ou \verb+speed_cont+ d'un
tourbillon sont vides, c'est-à-dire égales à
......@@ -103,8 +116,8 @@ tableau (\ref{tab:null_ssh_contour}).
vide. Colonne fraction : pour la région 5, nombre de cas sur 260
extremums au total. Note 1 : pas de bon contour à
innermost\_level. Note 2 : out\_cont est près d'une côte, champ de
vitesse non défini, max\_speed vaut $10^4$ dans le fichier
DBF. Note 3 : pas mieux que out\_cont pour la vitesse maximale.}
vitesse non défini, speed vaut $10^4$ dans le fichier DBF. Note 3
: pas mieux que out\_cont pour la vitesse maximale.}
\label{tab:null_ssh_contour}
\end{table}
Sur la région 5, sur 260 extremums, je trouve les nombres de cas
......@@ -325,16 +338,16 @@ cas pathologiques.
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_$m.shp+ : points
\item \verb+extremum_$m.dbf+
\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
de vitesse sur le contour de vitesse maximale
\item \verb+outermost_contour_$m.shp+ : polygones
\item \verb+outermost_contour_$m.dbf+ : aire, valeur de SSH, indice de
\item \verb+outermost_contour.shp+ : polygones
\item \verb+outermost_contour.dbf+ : aire, valeur de SSH, indice de
date, indice de tourbillon à cette date, radius4
\item \verb+max_speed_contour_$m.shp+ : polygones
\item \verb+max_speed_contour_$m.dbf+
\item \verb+max_speed_contour.shp+ : polygones
\item \verb+max_speed_contour.dbf+
: aire, valeur de SSH, indice de date, indice de tourbillon à cette
date
\end{itemize}
......@@ -342,19 +355,19 @@ Soit un total de 9 fichiers par processus en comptant les fichiers
shx.
valid == 1 dans le fichier
\verb+extremum_$m.dbf+ signifie qu'un contour extérieur a été trouvé
\verb+extremum.dbf+ signifie qu'un contour extérieur a été trouvé
et qu'il a une surface suffisante. Si un contour extérieur est bien
défini (non vide) alors il a par construction une amplitude supérieure
à \verb+min_amp+.
Si une forme dans \verb+max_speed_contour_$m.shp+ est non vide alors
la vitesse correspondante dans \verb+extremum_$m.dbf+ est la vitesse
Si une forme dans \verb+max_speed_contour.shp+ est non vide alors
la vitesse correspondante dans \verb+extremum.dbf+ est la vitesse
sur cette forme.
L'indice de date et l'indice de tourbillon dans
\verb+outermost_contour_$m.dbf+ et \verb+max_speed_contour_$m.dbf+
\verb+outermost_contour.dbf+ et \verb+max_speed_contour.dbf+
sont en principe inutiles puisqu'ils sont aussi dans
\verb+extremum_$m.dbf+ et que les tourbillons sont stockés dans le
\verb+extremum.dbf+ et que les tourbillons sont stockés dans le
même ordre dans les trois shapefiles. La redondance me semble
préférable pour la solidité et le confort d'utilisation.
......@@ -1054,17 +1067,21 @@ Nous avons besoin que la composante extr\_map de snapshot soit étendue
en longitude dans le cas d'un domaine périodique pour son utilisation
par \verb+successive_overlap+.
Les tailles ci-dessous sont calculées pour \verb+max_delta+ = 4 et une
durée de 16 ans, soit environ 5000 dates.
\begin{description}
\item[max\_delta] Scalaire entier. Intervalle maximal d'indices de
dates auxquelles on cherche des recouvrements. Normalement 4.
\item[flow] : Vecteur de type snapshot, de taille \verb+max_delta+ + 1,
chaque élément correspondant à une date. Environ 40 MiB.
\item[flow] : Vecteur de type snapshot, de taille \verb+max_delta+ +
1, chaque élément correspondant à une date. Environ 40 MiB pour
\verb+max_delta+ = 4.
\item[dist\_lim] Scalaire entier constant, = 3° / résolution.
\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 à non\_successive\_overlap : 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 \verb+max_delta+ + 1) et k un indice de
date. Cf. figure (\ref{fig:window}) et algorithme
......@@ -1092,7 +1109,7 @@ date. Cf. figure (\ref{fig:window}) et algorithme
\ENDFOR
\FOR{k = 2 \TO max\_delta + 1}
\STATE appel de successive\_overlap(k, k, flow)
\STATE appel de successive\_overlap(flow, k, k)
\ENDFOR
\FOR{delta = 2 \TO max\_delta}
......@@ -1112,7 +1129,7 @@ date. Cf. figure (\ref{fig:window}) et algorithme
\STATE appel de get\_snapshot(flow(max\_delta + 1), k)
\STATE appel de successive\_overlap(max\_delta + 1, k, flow)
\STATE appel de successive\_overlap(flow, max\_delta + 1, k)
\FOR{delta = 2 \TO max\_delta}
......@@ -1173,10 +1190,17 @@ Nombre d'appels à \verb+non_successive_overlap+ dans le prologue :
\end{equation*}
Dans la boucle principale : (\verb+max_delta+ - 1)(\verb+k_end_main_loop+ -
\verb+k_begin+ - \verb+max_delta+). Dans l'épilogue, si m < \verb+n_proc+ :
$\frac{\mathtt{max\_delta} (\mathtt{max\_delta} - 1)}{2}$. Total si m
< \verb+n_proc+ : (\verb+max_delta+ - 1)(k\_end - \verb+k_begin+ - \verb+max_delta+ +
1). Total si m = \verb+n_proc+ : (\verb+max_delta+ - 1)(k\_end - \verb+k_begin+ -
$\frac{\mathtt{max\_delta}}{2}$).
\begin{equation*}
\frac{\mathtt{max\_delta} (\mathtt{max\_delta} - 1)}{2}
\end{equation*}
Total si m < \verb+n_proc+ : (\verb+max_delta+ - 1)(k\_end -
\verb+k_begin+ - \verb+max_delta+ + 1). Total si m = \verb+n_proc+ :
\begin{equation*}
(\mathtt{max\_delta} - 1)
\left(
\mathtt{k\_end} - \mathtt{k\_begin} - \frac{\mathtt{max\_delta}}{2}
\right)
\end{equation*}
Si k\_end - \verb+k_begin+ était le même pour m = \verb+n_proc+ et m <
\verb+n_proc+, le processus m=\verb+n_proc+ aurait des plus grands nombres
......@@ -1280,10 +1304,11 @@ Exemples : cf. tableaux (\ref{tab:m2}) et (\ref{tab:m3}) et figure
\begin{figure}[htbp]
\centering
\includegraphics[width=\textwidth]{m3}
\caption{max\_delta = 4, n\_dates = 15, n\_proc = 3. En bleu le
prologue, en noir la boucle principale, en rouge l'épilogue. Pour
un processus donné, les actions sur une même colonne sont dans une
même boucle de l'algorithme principal.}
\caption{max\_delta = 4, n\_dates = 15, n\_proc = 3. Les numéros
sont les indices de date. En bleu le prologue, en noir la boucle
principale, en rouge l'épilogue. Pour un processus donné, les
actions sur une même colonne sont dans une même boucle de
l'algorithme principal.}
\label{fig:m3}
\end{figure}
......@@ -1342,7 +1367,7 @@ un seul processus.
\ENDFOR
\FOR{k = k\_begin + 1 \TO k\_begin + max\_delta}
\STATE appel de successive\_overlap(k - k\_begin + 1, k, flow)
\STATE appel de successive\_overlap(flow, k - k\_begin + 1, k)
\ENDFOR
\FOR{delta = 2 \TO max\_delta}
......@@ -1364,7 +1389,7 @@ un seul processus.
\STATE appel de get\_snapshot(flow(max\_delta + 1), k)
\STATE appel de successive\_overlap(max\_delta + 1, k, flow)
\STATE appel de successive\_overlap(flow, max\_delta + 1, k)
\FOR{delta = 2 \TO max\_delta}
......@@ -1446,7 +1471,7 @@ flow(j)\%list\_vis\%delta\_in, flow\%number\_eddies. Cf. algorithme
\STATE polygon\_1 = merge(flow(j -
delta)\%list\_vis(i1)\%speed\_cont\%polyline, flow(j -
delta)\%list\_vis(i1)\%out\_cont\%polyline, flow(j -
delta)\%list\_vis(i1)\%max\_speed $\ne$ 0)
delta)\%list\_vis(i1)\%speed\_cont\%n\_points $\ne$ 0)
\STATE i1\_lon = flow(j - delta)\%ind\_extr(1, i1)
......@@ -1465,7 +1490,7 @@ flow(j)\%list\_vis\%delta\_in, flow\%number\_eddies. Cf. algorithme
\STATE polygon\_2 =
merge(flow(j)\%list\_vis(i2)\%speed\_cont\%polyline,
flow(j)\%list\_vis(i2)\%out\_cont\%polyline,
flow(j)\%list\_vis(i2)\%max\_speed $\ne$ 0)
flow(j)\%list\_vis(i2)\%speed\_cont\%n\_points $\ne$ 0)
\IF{polygon\_1 et polygon\_2 se recouvrent}
......@@ -1525,7 +1550,7 @@ gagnerait rien en quantité de copie, et on perdrait en mémoire vive
occupée.
Contrainte géométrique : les extremums i1 et i2 doivent être ramenés,
via une modulation de $2 \pi$, à une distance inférieure à $pi$ en
via une modulation de $2 \pi$, à une distance inférieure à $\pi$ en
longitude. Si $\lambda_1$ désigne la longitude de l'extremum 1, et
$\lambda$ une longitude quelconque, on cherche $m \in \mathbb{Z}$ tel
que :
......
......@@ -17,7 +17,9 @@ module derived_types
logical cyclone
type(ssh_contour) out_cont ! outermost contour
type(ssh_contour) speed_cont ! contour with maximum average azimuthal speed
real max_speed ! average of azimuthal speed on speed_cont, in m s-1
real max_speed
! average of azimuthal speed on out_cont or speed_cont, in m s-1
logical valid ! valid out_cont found: not a null contour, and
! with sufficient area
......
......@@ -31,7 +31,10 @@ contains
! We look for an overlapping eddy at dist_lim (in grid points) of
! the first extremum.
integer, intent(in):: j, k
integer, intent(in):: j
! position in time window, between 2 and max_delta + 1
integer, intent(in):: k ! date index
! Local:
......
......@@ -27,13 +27,13 @@ contains
integer, intent(in):: k ! date index
integer, intent(in):: i ! eddy index
TYPE(shpfileobject), intent(inout):: hshp_extremum ! shapefile extremum_$m
TYPE(shpfileobject), intent(inout):: hshp_extremum ! shapefile extremum
TYPE(shpfileobject), intent(inout):: hshp_outermost
! shapefile outermost_contour_$m
! shapefile outermost_contour
TYPE(shpfileobject), intent(inout):: hshp_max_speed
! shapefile x_speed_contour_$m
! shapefile x_speed_contour
! Local:
integer ishape
......
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