diff --git a/Common/derived_types.f90 b/Common/derived_types.f90 index e47ba15492b2a026f98508a56e3bda445aa08816..8590e9b153983f4318c976949cbc47966c809434 100644 --- a/Common/derived_types.f90 +++ b/Common/derived_types.f90 @@ -19,6 +19,11 @@ module derived_types type(ssh_contour) out_cont ! outermost contour type(ssh_contour) speed_cont ! contour with maximum average azimuthal speed + real innermost_level + ! SSH level of the innermost contour around each extremum, in + ! m. By construction, innermost_level < extremum for a maximum, > + ! extremum for a minimum. + real max_speed ! Average of azimuthal speed on out_cont or speed_cont, in m ! s-1. Positive means counterclockwise circulation. If speed_cont diff --git a/Inst_eddies/Tests/test_set_all_outerm.f90 b/Inst_eddies/Tests/test_set_all_outerm.f90 index 3336eb01124a7db2b2f7432c26d20f4dbf0c542b..236b782a94f6e5eefe1e90586c20fa14d64e9b6a 100644 --- a/Inst_eddies/Tests/test_set_all_outerm.f90 +++ b/Inst_eddies/Tests/test_set_all_outerm.f90 @@ -34,17 +34,12 @@ program test_set_all_outerm logical periodic ! grid is periodic in longitude TYPE(shpc_slice_handler) hshp_cyclo, hshp_anti - real, allocatable:: innermost_level(:) ! (s%number_extr) - ! SSH level of the innermost contour around each extremum, in - ! m. By construction, innermost_level < extremum for a maximum, > - ! extremum for a minimum. - !-------------------------------------------------------------- call config call input_ssh(corner, step, nlon, nlat, periodic, ssh, u, v) - call set_all_extr(s, innermost_level, step, periodic, ssh, corner) - call set_all_outerm(s, step, periodic, ssh, corner, innermost_level, & + call set_all_extr(s, step, periodic, ssh, corner) + call set_all_outerm(s, step, periodic, ssh, corner, & min_area = pi * (min_radius * 1e3)**2) do i = 1, s%number_extr diff --git a/Inst_eddies/inst_eddies.f90 b/Inst_eddies/inst_eddies.f90 index 865eab67b7c597a3cd9e9d2e37f8e8ebdc803cb7..97b1a4ad954402b44e0c474736da6f8632070561 100644 --- a/Inst_eddies/inst_eddies.f90 +++ b/Inst_eddies/inst_eddies.f90 @@ -57,11 +57,6 @@ program inst_eddies ! latitude, in rad, of all the significant extrema, except the ! target extremum - real, allocatable:: innermost_level(:) ! (s%number_extr) - ! SSH level of the innermost contour around each extremum, in - ! m. By construction, innermost_level < extremum for a maximum, > - ! extremum for a minimum. - logical exist real t0, t1 ! CPU times, in s integer:: date = 0, slice = 0 @@ -106,8 +101,8 @@ program inst_eddies write(unit, fmt = *) "CPU time for preamble, before computation:", t1 - t0, & "s" t0 = t1 - call set_all_extr(s, innermost_level, step, periodic, ssh, corner) - call set_all_outerm(s, step, periodic, ssh, corner, innermost_level, & + call set_all_extr(s, step, periodic, ssh, corner) + call set_all_outerm(s, step, periodic, ssh, corner, & min_area = pi * (min_radius * 1e3)**2) ! Done with outermost contours, now let us take care of the diff --git a/Inst_eddies/set_all_extr.f90 b/Inst_eddies/set_all_extr.f90 index 359f0a9ccdc77f078d4e1231f9009e8153f40df1..418fb10d35d0c2fb7849123d56ccdfdee404e237 100644 --- a/Inst_eddies/set_all_extr.f90 +++ b/Inst_eddies/set_all_extr.f90 @@ -4,7 +4,7 @@ module set_all_extr_m contains - subroutine set_all_extr(s, innermost_level, step, periodic, ssh, corner) + subroutine set_all_extr(s, step, periodic, ssh, corner) ! This procedures finds all the extrema of ssh. Not a function ! because "s" is not completely defined. @@ -15,12 +15,8 @@ contains type(snapshot), intent(out):: s ! Define only s%extr_map, s%ind_extr, s%number_extr, - ! s%list%coord_extr, s%list%ssh_extr, s%list%cyclone - - real, allocatable, intent(out):: innermost_level(:) ! (s%number_extr) - ! SSH level of the innermost contour around each extremum, in - ! m. By construction, innermost_level < extremum for a maximum, > - ! extremum for a minimum. + ! s%list%coord_extr, s%list%ssh_extr, s%list%cyclone, + ! s%list%innermost_level real, intent(in):: step(:) ! (2) longitude and latitude steps, in rad logical, intent(in):: periodic ! grid is periodic in longitude @@ -38,6 +34,11 @@ contains logical, allocatable:: cyclone(:) ! (s%number_extr) integer i, copy + real, allocatable:: innermost_level(:) ! (s%number_extr) + ! SSH level of the innermost contour around each extremum, in + ! m. By construction, innermost_level < extremum for a maximum, > + ! extremum for a minimum. + !-------------------------------------------------------------- copy = merge(max_radius(1), 0, periodic) @@ -64,6 +65,7 @@ contains s%number_extr = size(s%ind_extr, 2) allocate(s%list(s%number_extr)) + s%list%innermost_level = innermost_level forall (i = 1:s%number_extr) s%list(i)%coord_extr = corner + (s%ind_extr(:, i) - 1) * step diff --git a/Inst_eddies/set_all_outerm.f90 b/Inst_eddies/set_all_outerm.f90 index eaa543b97ef3fe00a35549acbb9df9ff78ba481c..c370ef2391b69058bf2e4f7be639e2fbe9944381 100644 --- a/Inst_eddies/set_all_outerm.f90 +++ b/Inst_eddies/set_all_outerm.f90 @@ -4,8 +4,7 @@ module set_all_outerm_m contains - subroutine set_all_outerm(s, step, periodic, ssh, corner, innermost_level, & - min_area) + subroutine set_all_outerm(s, step, periodic, ssh, corner, min_area) ! This procedure sets all outermost contours in the snapshot ! "s". @@ -34,11 +33,6 @@ contains real, intent(in):: corner(:) ! (2) longitude and latitude of the ! corner of the global grid, in rad - real, intent(in):: innermost_level(:) ! (s%number_extr) - ! SSH level of the innermost contour around each extremum, in - ! m. By construction, innermost_level < extremum for a maximum, > - ! extremum for a minimum. - real, intent(in):: min_area ! minimum area of an outermost contour, in m2 @@ -114,8 +108,8 @@ contains ! No need to consider contours with amplitudes < min_amp: innermost_level_2 = merge(s%list(i)%ssh_extr + merge(min_amp, & - - min_amp, s%list(i)%cyclone), innermost_level(i), & - abs(s%list(i)%ssh_extr - innermost_level(i)) < min_amp) + - min_amp, s%list(i)%cyclone), s%list(i)%innermost_level, & + abs(s%list(i)%ssh_extr - s%list(i)%innermost_level) < min_amp) outside_points = nearby_extr(s%extr_map(llc(1):urc(1), llc(2):urc(2)), & s%list, i)