From d9c55ae96f60959e7fca4c335332d8d86bfe95ca Mon Sep 17 00:00:00 2001 From: Lionel GUEZ <guez@lmd.ens.fr> Date: Mon, 12 Aug 2019 18:02:02 +0200 Subject: [PATCH] Polish. --- Documentation_texfol/Graphiques/window.odg | Bin 15523 -> 10680 bytes Documentation_texfol/documentation.tex | 107 +++++++++++++-------- derived_types.f90 | 4 +- successive_overlap.f90 | 5 +- write_eddy.f90 | 6 +- 5 files changed, 76 insertions(+), 46 deletions(-) diff --git a/Documentation_texfol/Graphiques/window.odg b/Documentation_texfol/Graphiques/window.odg index 61ff61792cbf4325f84c1494feb0b7c838e2dea7..796513de4a607d94614fdef78abd61f9884993dc 100644 GIT binary patch delta 9569 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 Uzbj9cGZ&xSYa_sxqY4rO0EYW*ivR!s delta 14475 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 diff --git a/Documentation_texfol/documentation.tex b/Documentation_texfol/documentation.tex index 8fb48e70..7b44ad30 100644 --- a/Documentation_texfol/documentation.tex +++ b/Documentation_texfol/documentation.tex @@ -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 : diff --git a/derived_types.f90 b/derived_types.f90 index ffec6925..38704ad6 100644 --- a/derived_types.f90 +++ b/derived_types.f90 @@ -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 diff --git a/successive_overlap.f90 b/successive_overlap.f90 index bd0101e8..e755c0ab 100644 --- a/successive_overlap.f90 +++ b/successive_overlap.f90 @@ -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: diff --git a/write_eddy.f90 b/write_eddy.f90 index 0d79e0da..55bad9e9 100644 --- a/write_eddy.f90 +++ b/write_eddy.f90 @@ -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 -- GitLab