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

`delta_in` and `delta_out` in `test_overlap`

Add possiblity of specifying `delta_in` and `delta_out` in program
`test_overlap`.
parent d1a5e76d
No related branches found
No related tags found
No related merge requests found
...@@ -29,7 +29,7 @@ import itertools ...@@ -29,7 +29,7 @@ import itertools
import cartopy.crs as ccrs import cartopy.crs as ccrs
from os import path from os import path
def snaphot(directory, dashed = False, light = False, new_figure = False): def snapshot(directory, dashed = False, light = False, new_figure = False):
"""Plots extrema, outermost contours and max-speed contours. """Plots extrema, outermost contours and max-speed contours.
directory: containing the three shapefiles. directory: containing the three shapefiles.
...@@ -179,7 +179,7 @@ if __name__ == "__main__": ...@@ -179,7 +179,7 @@ if __name__ == "__main__":
ax.plot(lon_2d.reshape(-1), lat_2d.reshape(-1), transform = src_crs, ax.plot(lon_2d.reshape(-1), lat_2d.reshape(-1), transform = src_crs,
marker = "+", color = "gray", linestyle = "None") marker = "+", color = "gray", linestyle = "None")
snaphot(args.directory, args.dashed, args.light) snapshot(args.directory, args.dashed, args.light)
if args.velocity: if args.velocity:
with netCDF4.Dataset("uv.nc") as f: with netCDF4.Dataset("uv.nc") as f:
......
File added
File added
sources = window processes m3 call_graph input_output degeneracy periodicity copy set_all_outerm overlap sources = window processes m3 call_graph input_output degeneracy periodicity copy set_all_outerm overlap 15_3
objects := $(addsuffix .pdf, ${sources}) objects := $(addsuffix .pdf, ${sources})
......
#!/usr/bin/env python3
import math
def get_snapshot(k):
if m != n_proc and k > k_end - max_delta:
print("---------------")
print("receive", k)
def dispatch_snapshot(k):
if m != 1 and k < k_begin + max_delta: print("send", k)
max_delta = 4
n_dates = 15
n_proc = 3
assert n_proc <= n_dates // (max_delta + 1)
for m in range(1, n_proc + 1):
print("\nm = ", m)
print("prolog")
k_begin = 1 + math.floor((m - 1) * n_dates / n_proc)
if m < n_proc:
k_end = math.floor(m * n_dates / n_proc) + max_delta
k_end_main_loop = k_end - max_delta + 1
else:
k_end = n_dates
k_end_main_loop = k_end
print("k_begin =", k_begin)
print("k_end_main_loop =", k_end_main_loop)
print("k_end =", k_end)
for k in range(k_begin, k_begin + max_delta + 1):
get_snapshot(k)
for delta in range(1, max_delta + 1):
for k in range(k_begin + delta, k_begin + max_delta + 1):
print("overlap", k - delta, k)
print("main loop")
for k in range(k_begin + max_delta + 1, k_end_main_loop + 1):
dispatch_snapshot(k - max_delta - 1)
get_snapshot(k)
for delta in range(1, max_delta + 1):
print("overlap", k - delta, k)
print("epilog")
for k in range(k_end_main_loop + 1, k_end + 1):
dispatch_snapshot(k - max_delta - 1)
get_snapshot(k)
for delta in range(k - k_end + max_delta, max_delta + 1):
print("overlap", k - delta, k)
for j in range(1, max_delta + 2):
dispatch_snapshot(k_end - max_delta - 1 + j)
No preview for this file type
...@@ -995,10 +995,17 @@ overlap. ...@@ -995,10 +995,17 @@ overlap.
\caption[Un morceau d'un graphe de recouvrement]{Un morceau d'un \caption[Un morceau d'un graphe de recouvrement]{Un morceau d'un
graphe de recouvrement. Un tourbillon peut avoir des prédécesseurs graphe de recouvrement. Un tourbillon peut avoir des prédécesseurs
et des successeurs à différentes distances temporelles. Dans cet et des successeurs à différentes distances temporelles. Dans cet
exemple, $i_1$ ne peut pas avoir de successeur à distance exemple, puisque $(k - \delta, i_1)$ a un successeur $(k, i_2)$
strictement inférieure à $\delta$. $i_2$ ne peut pas être le enregistré à distance $\delta$ et $(k, i_2)$ un prédécesseur à
successeur de $i'_1$ : le recouvrement de $i_2$ et $i'_1$ n'est distance strictement inférieure à $\delta$, c'est qu'on a trouvé
pas examiné dans la procédure overlap.} que $(k - \delta, i_1)$ n'a pas de successeur à distance
strictement inférieure à $\delta$. Puisque $(k, i_2)$ a un
prédécesseur à distance strictement inférieure à $\delta$ et
$(k - \delta, i'_1)$ un successeur à distance strictement
inférieure à $\delta$, $(k, i_2)$ ne peut pas être le successeur
de $(k - \delta, i'_1)$ : le recouvrement de $(k, i_2)$ et
$(k - \delta, i'_1)$ n'est même pas examiné dans la procédure
overlap.}
\label{fig:overlap} \label{fig:overlap}
\end{figure} \end{figure}
...@@ -1355,8 +1362,8 @@ Si $m \ge 2$ alors : ...@@ -1355,8 +1362,8 @@ Si $m \ge 2$ alors :
\mathtt{k\_end\_main\_loop}(m - 1) = k_b(m) \mathtt{k\_end\_main\_loop}(m - 1) = k_b(m)
\end{equation*} \end{equation*}
Exemples : cf. tableaux (\ref{tab:m2}) et (\ref{tab:m3}) et figure Exemples : cf. tableaux (\ref{tab:m2}) et (\ref{tab:m3}) et figures
(\ref{fig:m3}). \ref{fig:m3} et \ref{fig:15_3}.
\begin{table}[htbp] \begin{table}[htbp]
\centering \centering
\begin{tabular}{llll} \begin{tabular}{llll}
...@@ -1395,6 +1402,12 @@ Exemples : cf. tableaux (\ref{tab:m2}) et (\ref{tab:m3}) et figure ...@@ -1395,6 +1402,12 @@ Exemples : cf. tableaux (\ref{tab:m2}) et (\ref{tab:m3}) et figure
l'algorithme principal.} l'algorithme principal.}
\label{fig:m3} \label{fig:m3}
\end{figure} \end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=\textwidth]{15_3}
\caption{$\max \delta = 4$, n\_dates = 15, $n_p = 3$}
\label{fig:15_3}
\end{figure}
Le \verb+dispatch_snapshot+ dans la dernière boucle sur j n'est pas Le \verb+dispatch_snapshot+ dans la dernière boucle sur j n'est pas
forcément une écriture. Exemple : $n_p = 2$, $\max \delta = 4$, forcément une écriture. Exemple : $n_p = 2$, $\max \delta = 4$,
...@@ -1720,12 +1733,15 @@ longitude de l'extremum i2. ...@@ -1720,12 +1733,15 @@ longitude de l'extremum i2.
Comment définir les composants \verb+delta_in+ et \verb+delta_out+ ? Comment définir les composants \verb+delta_in+ et \verb+delta_out+ ?
Cf. l'exemple de la figure \ref{fig:overlap}. Lorsqu'on arrive à Cf. l'exemple de la figure \ref{fig:overlap}. Lorsqu'on arrive à
$i'_1$, on ne veut pas tester le recouvrement de $i'_1$ et $i_2$. Il $(k - \delta, i'_1)$, on ne veut pas tester le recouvrement de
faut donc avoir conservé dans \verb+delta_in+ pour $i_2$ la distance $(k - \delta, i'_1)$ et $(k, i_2)$. Il faut donc avoir conservé dans
strictement inférieure à $\delta$. \verb+delta_in+ doit donc contenir \verb+delta_in+ pour $(k, i_2)$ la distance strictement inférieure à
la distance temporelle minimale à laquelle des prédécesseurs ont été $\delta$, même si un recouvrement à déjà été trouvé dans le même appel
trouvés. De même, \verb+delta_out+ doit contenir la distance à overlap entre $(k - \delta, i_1)$ et $(k, i_2)$. \verb+delta_in+
temporelle minimale à laquelle des successeurs ont été trouvés. doit donc contenir la distance temporelle minimale à laquelle des
prédécesseurs ont été trouvés. De même, \verb+delta_out+ doit contenir
la distance temporelle minimale à laquelle des successeurs ont été
trouvés. (Commission 7bb46ec.)
\subsubsection{weight} \subsubsection{weight}
......
...@@ -75,7 +75,10 @@ program test_overlap ...@@ -75,7 +75,10 @@ program test_overlap
CALL shpclose(hshp_extremum) CALL shpclose(hshp_extremum)
CALL shpclose(hshp_outermost) CALL shpclose(hshp_outermost)
CALL shpclose(hshp_max_speed) CALL shpclose(hshp_max_speed)
print *, snapshot_1, ", k = ", k print *, snapshot_1, ", k (not used) = ", k
print *, "Enter flow(1)%list_vis%delta_out:"
read *, flow(1)%list_vis%delta_out
print *, flow(1)%list_vis%delta_out
call shp_open_03(hshp_extremum, trim(snapshot_2) // "/extremum", & call shp_open_03(hshp_extremum, trim(snapshot_2) // "/extremum", &
pszaccess = "rb") pszaccess = "rb")
...@@ -90,6 +93,9 @@ program test_overlap ...@@ -90,6 +93,9 @@ program test_overlap
CALL shpclose(hshp_outermost) CALL shpclose(hshp_outermost)
CALL shpclose(hshp_max_speed) CALL shpclose(hshp_max_speed)
print *, snapshot_2, ", k = ", k print *, snapshot_2, ", k = ", k
print *, "Enter flow(max_delta + 1)%list_vis%delta_in:"
read *, flow(max_delta + 1)%list_vis%delta_in
print *, flow(max_delta + 1)%list_vis%delta_in
flow(2:max_delta)%number_eddies = 20000 flow(2:max_delta)%number_eddies = 20000
...@@ -111,11 +117,11 @@ program test_overlap ...@@ -111,11 +117,11 @@ program test_overlap
close(unit_edgelist) close(unit_edgelist)
print *, 'Created file "edgelist.csv".' print *, 'Created file "edgelist.csv".'
CALL shpclose(hshp_extremum) CALL shpclose(hshp_extremum)
print *, 'Created shapefile "Snapshot/extremum".' print *, 'Created shapefile "SHP_triplet/extremum".'
CALL shpclose(hshp_outermost) CALL shpclose(hshp_outermost)
print *, 'Created shapefile "Snapshot/outermost_contour".' print *, 'Created shapefile "SHP_triplet/outermost_contour".'
CALL shpclose(hshp_max_speed) CALL shpclose(hshp_max_speed)
print *, 'Created shapefile "Snapshot/max_speed_contour".' print *, 'Created shapefile "SHP_triplet/max_speed_contour".'
print *, snapshot_1, ":" print *, snapshot_1, ":"
print *, "Valid isolated eddies:" print *, "Valid isolated eddies:"
......
...@@ -7,8 +7,6 @@ contains ...@@ -7,8 +7,6 @@ contains
subroutine get_snapshot(s, m, n_proc, k_end, max_delta, nlon, nlat, k, & subroutine get_snapshot(s, m, n_proc, k_end, max_delta, nlon, nlat, k, &
corner, step, periodic) corner, step, periodic)
use, intrinsic:: ieee_arithmetic, only: ieee_value, IEEE_QUIET_NAN
! Libraries: ! Libraries:
use shapelib, only: shpfileobject, shpclose use shapelib, only: shpfileobject, shpclose
use shapelib_03, only: shp_open_03 use shapelib_03, only: shp_open_03
......
...@@ -33,7 +33,7 @@ contains ...@@ -33,7 +33,7 @@ contains
integer, intent(in):: dist_lim integer, intent(in):: dist_lim
! We look for an overlapping eddy at dist_lim (in grid points) of ! We look for an overlapping eddy at dist_lim (in grid points) of
! the first extremum. ! the extremum of a given eddy.
! Triplet of shapefiles to which any interpolated eddy will be written: ! Triplet of shapefiles to which any interpolated eddy will be written:
...@@ -96,7 +96,7 @@ contains ...@@ -96,7 +96,7 @@ contains
DO l = 1, n_select DO l = 1, n_select
i2 = selection(l) i2 = selection(l)
! assertion {flow(j - delta)%list_vis(i1)%delta_out >= ! Assertion: {flow(j - delta)%list_vis(i1)%delta_out >=
! delta .or. flow(j)%list_vis(i2)%delta_in >= delta} ! delta .or. flow(j)%list_vis(i2)%delta_in >= delta}
polyline_2 = merge(flow(j)%list_vis(i2)%speed_cont%polyline, & polyline_2 = merge(flow(j)%list_vis(i2)%speed_cont%polyline, &
flow(j)%list_vis(i2)%out_cont%polyline, & flow(j)%list_vis(i2)%out_cont%polyline, &
...@@ -118,8 +118,8 @@ contains ...@@ -118,8 +118,8 @@ contains
if (spher_polygon_area(res_pol) >= 0.25 & if (spher_polygon_area(res_pol) >= 0.25 &
* min(spher_polyline_area(polyline_1), & * min(spher_polyline_area(polyline_1), &
spher_polyline_area(polyline_2))) then spher_polyline_area(polyline_2))) then
! Count one more fictitious eddy between j - delta ! Count one more fictitious eddy for all dates
! + 1 and j - 1: ! between j - delta + 1 and j - 1:
flow(j - delta + 1:j - 1)%number_eddies & flow(j - delta + 1:j - 1)%number_eddies &
= flow(j - delta + 1:j - 1)%number_eddies + 1 = flow(j - delta + 1:j - 1)%number_eddies + 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment