From 50d2f596523f5c42e96aed73197f48b75c745505 Mon Sep 17 00:00:00 2001 From: Lionel GUEZ <guez@lmd.ens.fr> Date: Wed, 30 Jun 2021 15:49:23 +0200 Subject: [PATCH] Do not write interpolated eddies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a big change, a big simplification. Creating interpolated eddies was the way of Alexis Chaigneau. Rémi L. thinks it is no longer useful. So remove procedure `init_interpolated_eddy`; do not create SHPC for interpolated eddies in programs `eddy_graph`, `test_overlap` and `test_write_overlap`; remove argument `hshp_interp` of procedure overlap; remove arguments `hshp_interp`, m, cyclone, `coord_extr_1`, `ssh_extr_1`, `coord_extr_2` and `ssh_extr_2` of procedure `write_overlap`. --- Overlap/Tests/test_overlap.f90 | 9 +--- Overlap/Tests/test_write_overlap.f90 | 23 +++------- Overlap/eddy_graph.f90 | 20 +++------ Overlap/eddy_graph_in.sh | 31 +------------ Overlap/overlap.f90 | 15 ++----- Overlap/write_overlap.f90 | 66 ++-------------------------- 6 files changed, 21 insertions(+), 143 deletions(-) diff --git a/Overlap/Tests/test_overlap.f90 b/Overlap/Tests/test_overlap.f90 index 826c085b..44a0a1e1 100644 --- a/Overlap/Tests/test_overlap.f90 +++ b/Overlap/Tests/test_overlap.f90 @@ -16,7 +16,6 @@ program test_overlap use shpc_create_m, only: shpc_create use shpc_open_m, only: shpc_open use unit_edge_m, only: open_edge_file, unit_edge - use write_overlap_m, only: init_interpolated_eddy implicit none @@ -101,14 +100,10 @@ program test_overlap // '"successor eddy subscript"' write(unit_edge, fmt = *) "k1 i1 k2 i2 weight" - call shpc_create(hshp, shpc_dir = "SHPC", cyclone = hshp%cyclone) - call init_interpolated_eddy - call overlap(flow, nlon, nlat, periodic, dist_lim, hshp, & - d = d_init + k_test_2, delta = max_delta, j = max_delta + 1) + call overlap(flow, nlon, nlat, periodic, dist_lim, d = d_init + k_test_2, & + delta = max_delta, j = max_delta + 1) close(unit_edge) print *, 'Created file "edgelist.csv".' - CALL shpc_close(hshp) - print *, 'Created shapefiles for interpolated eddies in SHPC.' print *, k_test_1, ":" print *, "Valid isolated eddies:" diff --git a/Overlap/Tests/test_write_overlap.f90 b/Overlap/Tests/test_write_overlap.f90 index e53957cb..34badabb 100644 --- a/Overlap/Tests/test_write_overlap.f90 +++ b/Overlap/Tests/test_write_overlap.f90 @@ -2,21 +2,14 @@ program test_write_overlap use, intrinsic:: ISO_FORTRAN_ENV - use derived_types, only: shpc - use shpc_close_m, only: shpc_close - use shpc_create_m, only: shpc_create use unit_edge_m, only: open_edge_file, unit_edge - use write_overlap_m, only: write_overlap, init_interpolated_eddy + use write_overlap_m, only: write_overlap implicit none integer j_interp - integer:: k = 2, delta = 1, m = 0 - real:: coord_extr_1(2) = [0., 0.], coord_extr_2(2) = [0., 0.] ! in rad - real:: ssh_extr_1 = 0., ssh_extr_2 = 0. - TYPE(shpc) hshp - namelist /main_nml/ k, delta, m, coord_extr_1, ssh_extr_1, coord_extr_2, & - ssh_extr_2 + integer:: k = 2, delta = 1 + namelist /main_nml/ k, delta !------------------------------------------------------------------------- @@ -33,15 +26,9 @@ program test_write_overlap // '"successor eddy subscript"' write(unit_edge, fmt = *) "k1 i1 k2 i2 weight" - call shpc_create(hshp, shpc_dir = "SHPC", cyclone = .true.) - call init_interpolated_eddy - call write_overlap(hshp, k, delta, i1 = 1, i2 = 2, m = m, & - i_interp = 10 + [(j_interp, j_interp = 1, delta - 1)], & - cyclone = .true., coord_extr_1 = coord_extr_1, ssh_extr_1 = ssh_extr_1, & - coord_extr_2 = coord_extr_2, ssh_extr_2 = ssh_extr_2, w = 0.) + call write_overlap(k, delta, i1 = 1, i2 = 2, & + i_interp = 10 + [(j_interp, j_interp = 1, delta - 1)], w = 0.) close(unit_edge) print *, 'Created file "edgelist.csv".' - CALL shpc_close(hshp) - print *, 'Created shapefiles in SHPC.' end program test_write_overlap diff --git a/Overlap/eddy_graph.f90 b/Overlap/eddy_graph.f90 index ae4938e6..1e667100 100644 --- a/Overlap/eddy_graph.f90 +++ b/Overlap/eddy_graph.f90 @@ -17,8 +17,6 @@ program eddy_graph use unit_edge_m, only: open_edge_file, unit_edge use shpc_open_m, only: shpc_open use shpc_close_m, only: shpc_close - use shpc_create_m, only: shpc_create - use write_overlap_m, only: init_interpolated_eddy implicit none @@ -58,7 +56,6 @@ program eddy_graph integer unit_isolated, unit_number_eddies, unit TYPE(shpc) hshp - TYPE(shpc) hshp_interp ! for interpolated eddies type(snapshot), allocatable:: flow(:) character(len = 30) file @@ -135,10 +132,6 @@ program eddy_graph call open_edge_file(rank) ! We do not write the title line. That will be handled by eddy_graph.sh. - write(unit = file, fmt = '("SHPC_", i0)') rank - call shpc_create(hshp_interp, shpc_dir = trim(file), cyclone = hshp%cyclone) - call init_interpolated_eddy - k_begin = (rank * n_dates) / n_proc if (rank < n_proc - 1) then @@ -160,8 +153,8 @@ program eddy_graph do delta = 1, max_delta do k = k_begin + delta, k_begin + max_delta - call overlap(flow, nlon, nlat, periodic, dist_lim, hshp_interp, & - d = d_init + k, delta = delta, j = k - k_begin + 1) + call overlap(flow, nlon, nlat, periodic, dist_lim, d = d_init + k, & + delta = delta, j = k - k_begin + 1) end do end do @@ -176,8 +169,8 @@ program eddy_graph d = d_init + k do delta = 1, max_delta - call overlap(flow, nlon, nlat, periodic, dist_lim, hshp_interp, d, & - delta, j = max_delta + 1) + call overlap(flow, nlon, nlat, periodic, dist_lim, d, delta, & + j = max_delta + 1) end do end do @@ -197,8 +190,8 @@ program eddy_graph d = d_init + k do delta = k - k_end + max_delta, max_delta - call overlap(flow, nlon, nlat, periodic, dist_lim, hshp_interp, d, & - delta, j = max_delta + 1) + call overlap(flow, nlon, nlat, periodic, dist_lim, d, delta, & + j = max_delta + 1) end do end do @@ -209,7 +202,6 @@ program eddy_graph ! 5. Back matter - CALL shpc_close(hshp_interp) CALL shpc_close(hshp) close(unit_isolated) close(unit_number_eddies) diff --git a/Overlap/eddy_graph_in.sh b/Overlap/eddy_graph_in.sh index dcd7096f..4b4de108 100755 --- a/Overlap/eddy_graph_in.sh +++ b/Overlap/eddy_graph_in.sh @@ -1,7 +1,7 @@ #!/bin/bash -# This program creates the edge list and interpolated eddies, for a -# given orientation of eddies. +# This program creates the edge list for a given orientation of +# eddies. # Note: no need to sort number_eddies.csv, already sorted by construction. @@ -13,15 +13,6 @@ fi set -e ##set -x -rank=0 - -while ((rank < $1)) -do - rm -rf SHPC_$rank - mkdir SHPC_$rank - ((rank += 1)) -done - ${mpiexec:-mpiexec} -n $1 @CMAKE_CURRENT_BINARY_DIR@/eddy_graph $2 # Two titles lines, one with long names, one with short names: @@ -55,21 +46,3 @@ rm edgelist_no_header.csv echo "Created files \"number_eddies.csv\", \"edgelist.csv\", " \ "and \"isolated_nodes.txt\"." -rm -rf SHPC -mv SHPC_0 SHPC -rank=1 - -while ((rank < $1)) -do - for my_base in extremum outermost_contour max_speed_contour - do - shpcat SHPC_$rank/$my_base SHPC/$my_base - dbfcat SHPC_$rank/$my_base SHPC/$my_base - done - - rm -r SHPC_$rank - ((rank += 1)) -done - -cp $2/grid_nml.txt SHPC -echo "Created directory \"SHPC\"." diff --git a/Overlap/overlap.f90 b/Overlap/overlap.f90 index 267f1035..852765d5 100644 --- a/Overlap/overlap.f90 +++ b/Overlap/overlap.f90 @@ -4,8 +4,7 @@ module overlap_m contains - subroutine overlap(flow, nlon, nlat, periodic, dist_lim, hshp_interp, d, & - delta, j) + subroutine overlap(flow, nlon, nlat, periodic, dist_lim, d, delta, j) ! This procedure finds edges between flow(j - delta) and flow(j), ! corresponding to dates d - delta and d. It calls write_overlap @@ -19,7 +18,7 @@ contains use nr_util, only: twopi use candidate_overlap_m, only: candidate_overlap - use derived_types, only: snapshot, shpc + use derived_types, only: snapshot use spher_polygon_area_m, only: spher_polygon_area use spher_polyline_area_m, only: spher_polyline_area use weight_m, only: weight @@ -33,9 +32,6 @@ contains ! We look for an overlapping eddy at dist_lim (in grid points) of ! the extremum of a given eddy. - ! Collection of shapefiles to which any interpolated eddy will be written: - TYPE(shpc), intent(in):: hshp_interp - integer, intent(in):: d ! date, in days since 1950-1-1 integer, intent(in):: delta ! between 1 and max_delta @@ -122,13 +118,8 @@ contains flow(j - delta + 1:j - 1)%number_eddies & = flow(j - delta + 1:j - 1)%number_eddies + 1 - call write_overlap(hshp_interp, d, delta, i1, i2, m, & + call write_overlap(d, delta, i1, i2, & flow(j - delta + 1:j - 1)%number_eddies, & - flow(j - delta)%list_vis(i1)%cyclone, & - flow(j - delta)%list_vis(i1)%coord_extr, & - flow(j - delta)%list_vis(i1)%ssh_extr, & - flow(j)%list_vis(i2)%coord_extr, & - flow(j)%list_vis(i2)%ssh_extr, & weight(flow(j - delta)%list_vis(i1), & flow(j)%list_vis(i2))) flow(j - delta)%list_vis(i1)%delta_out & diff --git a/Overlap/write_overlap.f90 b/Overlap/write_overlap.f90 index da9fada0..e613cb6c 100644 --- a/Overlap/write_overlap.f90 +++ b/Overlap/write_overlap.f90 @@ -1,70 +1,29 @@ module write_overlap_m - use derived_types, only: eddy - implicit none - private eddy - type(eddy), private, save:: e - contains - subroutine write_overlap(hshp_interp, d, delta, i1, i2, m, i_interp, & - cyclone, coord_extr_1, ssh_extr_1, coord_extr_2, ssh_extr_2, w) + subroutine write_overlap(d, delta, i1, i2, i_interp, w) - ! Writes edges to unit_edge and interpolated eddies to shapefiles, - ! between (d - delta, i1) and (d, i2). + ! Writes edges to unit_edge between (d - delta, i1) and (d, i2). - ! Libraries: - use nr_util, only: twopi - - use derived_types, only: shpc use unit_edge_m, only: unit_edge - use write_eddy_m, only: write_eddy - TYPE(shpc), intent(in):: hshp_interp integer, intent(in):: d ! date, in days since 1950-1-1 - integer, intent(in):: delta, i1, i2, m + integer, intent(in):: delta, i1, i2 integer, intent(in):: i_interp(:) ! (delta - 1) - logical, intent(in):: cyclone - real, intent(in):: coord_extr_1(:) ! (2) - real, intent(in):: ssh_extr_1 - - real, intent(in):: coord_extr_2(:) ! (2) - ! (Note: value attribute not allowed for an array.) - - real, intent(in):: ssh_extr_2 real, intent(in):: w ! Local: integer i_pred, j_interp, d_interp - real w_interp - real coord_extr_2_local(2) !------------------------------------------------------------------- - if (delta >= 2) then - ! Prepare interpolation: - - e%cyclone = cyclone - - ! Define coord_extr_2_local with the longitude of extremum i2 shifted - ! to a value close to the longitude of extremum i1: - coord_extr_2_local(1) = coord_extr_2(1) + m * twopi - coord_extr_2_local(2) = coord_extr_2(2) - end if - i_pred = i1 do j_interp = 1, delta - 1 - ! Interpolate extremum: - w_interp = j_interp / real(delta) - e%coord_extr = (1 - w_interp) * coord_extr_1 & - + w_interp * coord_extr_2_local - e%ssh_extr = (1 - w_interp) * ssh_extr_1 + w_interp * ssh_extr_2 - d_interp = d - delta + j_interp - call write_eddy(e, hshp_interp, d_interp, i_interp(j_interp)) write(unit_edge, fmt = *) d_interp - 1, i_pred, d_interp, & i_interp(j_interp), w i_pred = i_interp(j_interp) @@ -74,23 +33,4 @@ contains end subroutine write_overlap - !************************************************************************** - - subroutine init_interpolated_eddy - - ! Set some null components of the interpolated eddy: - - use derived_types, only: null_ssh_contour, missing_speed - - !----------------------------------------------------------------------- - - e%out_cont = null_ssh_contour() - e%speed_cont = null_ssh_contour() - e%max_speed = missing_speed - e%valid = .false. - e%interpolated = .true. - e%radius4 = 0 - - end subroutine init_interpolated_eddy - end module write_overlap_m -- GitLab