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

Give a second chance to association

If there are two speed-contours and they do not intersect, check
whether outermost contours intersect. The intersection threshold for
outermost contour is defined by new variable `min_inters_out`. Note
that the default value is such that results are not changed by this
commit if `min_inters_out` is left to its default value.
parent bb4f552e
No related branches found
No related tags found
No related merge requests found
...@@ -18,6 +18,10 @@ module config_graph_m ...@@ -18,6 +18,10 @@ module config_graph_m
! minimum intersection between maximum-speed contours, computed as a ! minimum intersection between maximum-speed contours, computed as a
! fraction of surface ! fraction of surface
real, protected:: min_inters_out = 1.1
! minimum intersection between outermost contours, computed as a
! fraction of surface
contains contains
subroutine config_graph(rank) subroutine config_graph(rank)
...@@ -33,7 +37,8 @@ contains ...@@ -33,7 +37,8 @@ contains
integer, intent(in):: rank integer, intent(in):: rank
! Local: ! Local:
namelist /config_graph_nml/ max_delta, dist_lim, cyclone, min_inters_speed namelist /config_graph_nml/ max_delta, dist_lim, cyclone, &
min_inters_speed, min_inters_out
!----------------------------------------------------------------- !-----------------------------------------------------------------
...@@ -54,6 +59,7 @@ contains ...@@ -54,6 +59,7 @@ contains
call ezmpi_bcast(dist_lim, root = 0) call ezmpi_bcast(dist_lim, root = 0)
call ezmpi_bcast(cyclone, root = 0) call ezmpi_bcast(cyclone, root = 0)
call ezmpi_bcast(min_inters_speed, root = 0) call ezmpi_bcast(min_inters_speed, root = 0)
call ezmpi_bcast(min_inters_out, root = 0)
call ezmpi_bcast(copy, root = 0) call ezmpi_bcast(copy, root = 0)
#endif #endif
......
...@@ -16,7 +16,7 @@ contains ...@@ -16,7 +16,7 @@ contains
use copy_shift_m, only: copy_shift use copy_shift_m, only: copy_shift
use candidate_overlap_m, only: candidate_overlap use candidate_overlap_m, only: candidate_overlap
use config_graph_m, only: dist_lim, min_inters_speed use config_graph_m, only: dist_lim, min_inters_speed, min_inters_out
use derived_types, only: snapshot use derived_types, only: snapshot
use inters_lines_m, only: inters_lines use inters_lines_m, only: inters_lines
use read_grid_m, only: nlon, nlat, periodic use read_grid_m, only: nlon, nlat, periodic
...@@ -84,20 +84,34 @@ contains ...@@ -84,20 +84,34 @@ contains
p_shifted = copy_shift(e2%speed_cont%polyline, delta_long) p_shifted = copy_shift(e2%speed_cont%polyline, delta_long)
assoc_eddies = inters_lines(e1%out_cont%polyline, p_shifted, & assoc_eddies = inters_lines(e1%out_cont%polyline, p_shifted, &
min_inters_speed) min_inters_speed)
if (.not. assoc_eddies) then
p_shifted = copy_shift(e2%out%polyline, delta_long)
assoc_eddies = inters_lines(e1%out_cont%polyline, &
p_shifted, min_inters_out)
end if
elseif (e1%speed_cont%n_points /= 0 & elseif (e1%speed_cont%n_points /= 0 &
.and. e2%speed_cont%n_points == 0) then .and. e2%speed_cont%n_points == 0) then
p_shifted = copy_shift(e2%out_cont%polyline, delta_long) p_shifted = copy_shift(e2%out_cont%polyline, delta_long)
assoc_eddies = inters_lines(e1%speed_cont%polyline, & assoc_eddies = inters_lines(e1%speed_cont%polyline, &
p_shifted, min_inters_speed) p_shifted, min_inters_speed)
if (.not. assoc_eddies) assoc_eddies &
= inters_lines(e1%out_cont%polyline, p_shifted, &
min_inters_out)
elseif (e1%speed_cont%n_points == 0 & elseif (e1%speed_cont%n_points == 0 &
.and. e2%speed_cont%n_points == 0) then .and. e2%speed_cont%n_points == 0) then
p_shifted = copy_shift(e2%out_cont%polyline, delta_long) p_shifted = copy_shift(e2%out_cont%polyline, delta_long)
assoc_eddies = inters_lines(e1%out_cont%polyline, p_shifted, & assoc_eddies = inters_lines(e1%out_cont%polyline, p_shifted, &
min_inters_speed) min(min_inters_speed, min_inters_out))
else else
p_shifted = copy_shift(e2%speed_cont%polyline, delta_long) p_shifted = copy_shift(e2%speed_cont%polyline, delta_long)
assoc_eddies = inters_lines(e1%speed_cont%polyline, & assoc_eddies = inters_lines(e1%speed_cont%polyline, &
p_shifted, min_inters_speed) p_shifted, min_inters_speed)
if (.not. assoc_eddies) then
p_shifted = copy_shift(e2%out_cont%polyline, delta_long)
assoc_eddies = inters_lines(e1%out_cont%polyline, &
p_shifted, min_inters_out)
end if
end if end if
if (assoc_eddies) then if (assoc_eddies) then
......
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