diff --git a/Documentation_texfol/Graphiques/call_graph.gv b/Documentation_texfol/Graphiques/call_graph.gv index d9cfd739855cb0097b75f3e4285ce452bb3b9a4d..95df12f237f168ef6a4cabb06ced44d64fa7e49e 100644 --- a/Documentation_texfol/Graphiques/call_graph.gv +++ b/Documentation_texfol/Graphiques/call_graph.gv @@ -1,6 +1,5 @@ digraph call_graph { main -> {get_snapshot overlap}; - main -> dispatch_snapshot; - overlap -> {interpolate_eddy weight, write_eddy}; + main -> dispatch_snapshot } \ No newline at end of file diff --git a/Documentation_texfol/documentation.tex b/Documentation_texfol/documentation.tex index 8a166c8b783117a6a48748da2e9ea68a08e190dd..f53be1a520797a250c39e3b66c23bb97068a5868 100644 --- a/Documentation_texfol/documentation.tex +++ b/Documentation_texfol/documentation.tex @@ -533,7 +533,7 @@ Les procédures géométriques utilisées : \item polygon\_area\_2d (bibliothèque Geometry) \item polygon\_contains\_point (bibliothèque Geometry) \item find\_contours\_reg\_grid (bibliothèque Contour\_531) -\item interpolate\_eddy +\item write\_overlap \end{itemize} travaillent dans le plan et non sur la sphère. Ces procédures sont appelées par : @@ -1429,22 +1429,8 @@ un seul processus. \subsection{Sous-algorithmes} -\subsubsection{interpolate\_eddy} +\subsubsection{init\_interpolated\_eddy} -Tous les arguments sont des données. e1, e2 : scalaires de type -eddy. j1, j2, indices de position dans la fenêtre correspondant à e1, -e2. j : indice de position dans la fenêtre auquel on veut -interpoler. k, i : indices de date et de tourbillon pour le tourbillon -interpolé. Cf. algorithme (\ref{alg:interpolate_eddy}). -\begin{algorithm}[htbp] - \begin{algorithmic} - \STATE e = interpolation entre e1 et e2 - - \STATE appel de write\_eddy(e, k, i) - \end{algorithmic} - \caption{Sous-algorithme interpolate\_eddy(e1, e2, j1, j2, j, k, i)} - \label{alg:interpolate_eddy} -\end{algorithm} 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 @@ -1483,83 +1469,6 @@ le multiple de $2 \pi$ à ajouter aux longitudes doit être le même pour tous les points du contour, et égal au multiple à ajouter à la longitude de l'extremum i2. -j, k, delta $\in \{2, \dots, \mathtt{max\_delta}\}$ : scalaires -entiers, données. flow : donnée-résultat. Cherche les arcs entre -flow(j - delta) et flow(j), correspondant aux dates k - delta et -k. Écrit ces arcs dans \verb+graph.txt+, écrit les tourbillons -interpolés dans les shapefiles via \verb+write_eddy+. Met à jour -flow(j - delta)\%list\_vis\%delta\_out, flow(j)\%list\_vis\%delta\_in, -flow\%number\_eddies. Cf. algorithme (\ref{alg:overlapping}). -\begin{algorithm}[htbp] - \begin{algorithmic} - \FOR{i1 = 1 \TO flow(j - delta)\%number\_vis\_extr} - - \IF{flow(j - delta)\%list\_vis(i1)\%valid} - - \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)\%speed\_cont\%n\_points $\ne$ 0) - - \STATE i1\_lon = flow(j - delta)\%ind\_extr(1, i1) - - \STATE i1\_lat = flow(j - delta)\%ind\_extr(2, i1) - - \FOR{i2 $\ne$ 0 dans abs(flow(j)\%extr\_map(i1\_lon - - dist\_lim:i1\_lon + dist\_lim, i1\_lat - dist\_lim:i1\_lat + - dist\_lim))} - - \IF{flow(j)\%list\_vis(i2)\%valid et (flow(j - - delta)\%list\_vis(i1)\%delta\_out $\ge$ delta ou - flow(j)\%list\_vis(i2)\%delta\_in $\ge$ delta) et flow(j - - delta)\%list\_vis(i1)\%cyclone $\Leftrightarrow$ - flow(j)\%list\_vis(i2)\%cyclone} - - \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)\%speed\_cont\%n\_points $\ne$ 0) - - \IF{polygon\_1 et polygon\_2 se recouvrent} - - \STATE weight\_delta = weight(flow(j - delta)\%list\_vis(i1), - flow(j)\%list\_vis(i2)) - - \STATE i\_pred = i1 - - \FOR{j\_interp = j - delta + 1 \TO j - 1} - - \STATE \COMMENT{compte d'un successeur fictif en j\_interp} - - \STATE flow(j\_interp)\%number\_eddies += 1 - - \STATE appel de interpolate\_eddy(flow(j - - delta)\%list\_vis(i1), flow(j)\%list\_vis(i2), j - delta, j, j\_interp, k - - j + j\_interp, flow(j\_interp)\%number\_eddies) - - \STATE écrire dans graph.txt : k - j + j\_interp - 1, i\_pred, k - - j + j\_interp, flow(j\_interp)\%number\_eddies, weight\_delta - - \STATE i\_pred = flow(j\_interp)\%number\_eddies - - \ENDFOR - - \STATE écrire dans graph.txt : k - 1, i\_pred, k, i2, - weight\_delta - - \STATE flow(j - delta)\%list\_vis(i1)\%delta\_out = delta - - \STATE flow(j)\%list\_vis(i2)\%delta\_in = delta - \ENDIF - \ENDIF - \ENDFOR - \ENDIF - \ENDFOR - \end{algorithmic} - \caption{Sous-algorithme overlap(flow, j, k, delta)} - \label{alg:overlapping} -\end{algorithm} - \subsubsection{weight} D'autant plus proche de 0 que les tourbillons sont diff --git a/overlap.f90 b/overlap.f90 index 28082b2103501111f9b07064d5662df13cb9dddc..b76b99478b49ad586a6df78be5ea4dcb1ce57efb 100644 --- a/overlap.f90 +++ b/overlap.f90 @@ -35,6 +35,8 @@ contains ! We look for an overlapping eddy at dist_lim (in grid points) of ! the first extremum. + ! Triplet of shapefiles to which any interpolated eddy will be written: + TYPE(shpfileobject), intent(in):: hshp_extremum ! shapefile extremum TYPE(shpfileobject), intent(in):: hshp_outermost @@ -46,7 +48,7 @@ contains ! position in time window, between 2 and max_delta + 1 integer, intent(in):: k ! date index - integer, intent(in):: delta + integer, intent(in):: delta ! between 1 and max_delta ! Local: diff --git a/write_overlap.f90 b/write_overlap.f90 index 4d3ed2191e4135a72e1033d4b70ceea70d6d8b4b..cb28847d6d6e01135bfddddd2a9480b88b26046b 100644 --- a/write_overlap.f90 +++ b/write_overlap.f90 @@ -13,8 +13,8 @@ contains unit_edgelist, k, delta, i1, i2, m, i_interp, cyclone, coord_extr_1, & ssh_extr_1, coord_extr_2, ssh_extr_2, w) - ! Writes edges and interpolated eddies between (k - delta, i1) and - ! (k, i2). + ! Writes edges to unit_edgelist and interpolated eddies to + ! shapefiles, between (k - delta, i1) and (k, i2). ! Libraries: use nr_util, only: twopi