diff --git a/Common/read_snapshot.f90 b/Common/read_snapshot.f90 index f86d16a1e5d063169dfb9532da9457e9c9e714d6..f2501f860d2f5a0833e995b42f225c0c76877880 100644 --- a/Common/read_snapshot.f90 +++ b/Common/read_snapshot.f90 @@ -41,21 +41,21 @@ contains !--------------------------------------------------------------------- - if (k == d_init) then + if (k == 0) then ishape_first = 0 else - ! {k > d_init} - ishape_first = ishape_last(k - d_init) + 1 + ! {k > 0} + ishape_first = ishape_last(k) + 1 end if - s%number_vis_extr = ishape_last(k - d_init + 1) - ishape_first + 1 + s%number_vis_extr = ishape_last(k + 1) - ishape_first + 1 allocate(s%list_vis(s%number_vis_extr)) - do ishape = ishape_first, ishape_last(k - d_init + 1) + do ishape = ishape_first, ishape_last(k + 1) call read_eddy(e, d, i, hshp, ishape) ! Check that all the eddies have the same date index: - call assert(d == k, "read_snapshot: date index") + call assert(d - d_init == k, "read_snapshot: date index") s%list_vis(i) = e end do diff --git a/Overlap/dispatch_snapshot.f90 b/Overlap/dispatch_snapshot.f90 index 20f63793bbbd6c7c7b2474232bcea20184935ba8..cb295aeddd1f17012ae7a055052e39f9ce2443f8 100644 --- a/Overlap/dispatch_snapshot.f90 +++ b/Overlap/dispatch_snapshot.f90 @@ -5,7 +5,7 @@ module dispatch_snapshot_m contains subroutine dispatch_snapshot(s, unit_isolated, unit_number_eddies, rank, & - k_begin, max_delta, k) + k_begin, max_delta, d_init, k) use derived_types, only: snapshot use send_snapshot_m, only: send_snapshot @@ -18,22 +18,24 @@ contains integer, intent(in):: unit_number_eddies ! logical unit for file number_eddies_$rank.csv - integer, intent(in):: rank, k_begin, max_delta - integer, intent(in):: k ! date index + integer, intent(in):: rank, k_begin, max_delta, d_init + integer, intent(in):: k ! date index (0-based) ! Local: - integer i + integer i, d !------------------------------------------------------------------ if (rank == 0 .or. k >= k_begin + max_delta) then + d = k + d_init + do i = 1, s%number_vis_extr if (s%list_vis(i)%valid .and. s%list_vis(i)%delta_in == huge(0) & .and. s%list_vis(i)%delta_out == huge(0)) & - write(unit_isolated, fmt = *) k, i + write(unit_isolated, fmt = *) d, i end do - write(unit_number_eddies, fmt = *) k, s%number_vis_extr, & + write(unit_number_eddies, fmt = *) d, s%number_vis_extr, & s%number_eddies - s%number_vis_extr else call send_snapshot(s, tag = k, dest = rank - 1) diff --git a/Overlap/eddy_graph.f90 b/Overlap/eddy_graph.f90 index c9b5e8492f275a67475098d411ac850b16b1d3e0..ae4938e61b00f98eae671b5502e4dbc6967e693e 100644 --- a/Overlap/eddy_graph.f90 +++ b/Overlap/eddy_graph.f90 @@ -22,9 +22,9 @@ program eddy_graph implicit none - integer rank, n_proc, copy, delta, j + integer rank, n_proc, copy, delta, j, d integer:: n_dates = huge(0) ! number of dates to read - integer k ! date + integer k ! date index ((0-based) integer d_init, k_begin, k_end, k_end_main_loop character(len = :), allocatable:: shpc_dir integer:: max_delta = 1 @@ -139,13 +139,13 @@ program eddy_graph call shpc_create(hshp_interp, shpc_dir = trim(file), cyclone = hshp%cyclone) call init_interpolated_eddy - k_begin = d_init + (rank * n_dates) / n_proc + k_begin = (rank * n_dates) / n_proc if (rank < n_proc - 1) then - k_end = d_init + ((rank + 1) * n_dates) / n_proc + max_delta - 1 + k_end = ((rank + 1) * n_dates) / n_proc + max_delta - 1 k_end_main_loop = k_end - max_delta + 1 else - k_end = d_init + n_dates - 1 + k_end = n_dates - 1 k_end_main_loop = k_end end if @@ -160,8 +160,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, k, & - delta, j = k - k_begin + 1) + call overlap(flow, nlon, nlat, periodic, dist_lim, hshp_interp, & + d = d_init + k, delta = delta, j = k - k_begin + 1) end do end do @@ -169,13 +169,14 @@ program eddy_graph do k = k_begin + max_delta + 1, k_end_main_loop call dispatch_snapshot(flow(1), unit_isolated, unit_number_eddies, rank, & - k_begin, max_delta, k = k - max_delta - 1) + k_begin, max_delta, d_init, k = k - max_delta - 1) flow(:max_delta) = flow(2:) call get_snapshot(flow(max_delta + 1), nlon, nlat, ishape_last, corner, & step, copy, hshp, d_init, k, k_end, rank, n_proc, max_delta) - + d = d_init + k + do delta = 1, max_delta - call overlap(flow, nlon, nlat, periodic, dist_lim, hshp_interp, k, & + call overlap(flow, nlon, nlat, periodic, dist_lim, hshp_interp, d, & delta, j = max_delta + 1) end do end do @@ -185,22 +186,25 @@ program eddy_graph do k = k_end_main_loop + 1, k_end ! {rank < n_proc - 1 and k >= k_end - max_delta + 2} call dispatch_snapshot(flow(1), unit_isolated, unit_number_eddies, rank, & - k_begin, max_delta, k = k - max_delta - 1) + k_begin, max_delta, d_init, k = k - max_delta - 1) flow(:max_delta) = flow(2:) call get_snapshot(flow(max_delta + 1), nlon, nlat, ishape_last, corner, & step, copy, hshp, d_init, k, k_end, rank, n_proc, max_delta) ! (reception) ! Stitching: + + d = d_init + k + do delta = k - k_end + max_delta, max_delta - call overlap(flow, nlon, nlat, periodic, dist_lim, hshp_interp, k, & + call overlap(flow, nlon, nlat, periodic, dist_lim, hshp_interp, d, & delta, j = max_delta + 1) end do end do do j = 1, max_delta + 1 call dispatch_snapshot(flow(j), unit_isolated, unit_number_eddies, rank, & - k_begin, max_delta, k = k_end - max_delta - 1 + j) + k_begin, max_delta, d_init, k = k_end - max_delta - 1 + j) end do ! 5. Back matter