diff --git a/Inst_eddies/Tests/test_set_max_speed.f90 b/Inst_eddies/Tests/test_set_max_speed.f90 index f5021f536a37ccfb7c39e1fd6c8468cee492fbeb..38d9fc026029596dd23206ba1fb233b4b7533428 100644 --- a/Inst_eddies/Tests/test_set_max_speed.f90 +++ b/Inst_eddies/Tests/test_set_max_speed.f90 @@ -102,9 +102,10 @@ program test_set_max_speed i_outer = n_cont - call set_max_speed(e, cont_list, n_cont, & - ssh(llc(1):urc(1), llc(2):urc(2)), u(llc(1):urc(1), llc(2):urc(2)), & - v(llc(1):urc(1), llc(2):urc(2)), corner_window, step) + call set_max_speed(e%speed_cont, e%max_speed, cont_list, n_cont, & + e%extr%coord, ssh(llc(1):urc(1), llc(2):urc(2)), & + u(llc(1):urc(1), llc(2):urc(2)), v(llc(1):urc(1), llc(2):urc(2)), & + corner_window, step) do i = i_outer + 1, n_cont call shp_append_object_03(ishape, hshp, shpt_polygon, & diff --git a/Inst_eddies/set_contours.f90 b/Inst_eddies/set_contours.f90 index e6824439c12b2925f9d610ebeca5ae3772546780..88a58e0e1d225c294c67fcdfdfe46fd7481fb7fc 100644 --- a/Inst_eddies/set_contours.f90 +++ b/Inst_eddies/set_contours.f90 @@ -88,8 +88,8 @@ contains ! Done restricting field - call set_max_speed(e, cont_list, n_cont, & - ssh(llc(1):urc(1), llc(2):urc(2)), & + call set_max_speed(e%speed_cont, e%max_speed, cont_list, n_cont, & + e%extr%coord, ssh(llc(1):urc(1), llc(2):urc(2)), & u(llc(1):urc(1), llc(2):urc(2)), & v(llc(1):urc(1), llc(2):urc(2)), corner_window, step) end if diff --git a/Inst_eddies/set_max_speed.F90 b/Inst_eddies/set_max_speed.F90 index 20acdaadbad1e03bfcfd50491c63fdf0c1fd4204..2532e499696231dd48ad782d5a6d9995f9f917be 100644 --- a/Inst_eddies/set_max_speed.F90 +++ b/Inst_eddies/set_max_speed.F90 @@ -4,7 +4,8 @@ module set_max_speed_m contains - subroutine set_max_speed(e, cont_list, n_cont, ssh, u, v, corner, step) + subroutine set_max_speed(speed_cont, max_speed, cont_list, n_cont, & + extr_coord, ssh, u, v, corner, step) ! This procedure defines the components speed_cont and max_speed ! of argument e. On return, e%speed_cont may be a null ssh contour @@ -26,8 +27,13 @@ contains use mean_speed_m, only: mean_speed use spher_polyline_area_m, only: spher_polyline_area - type(eddy), intent(inout):: e - ! e%extr%coord should be defined on input. + type(ssh_contour), intent(out):: speed_cont + + real, intent(out):: max_speed + ! Average of azimuthal speed on cont_list(i_outer) or speed_cont, + ! in m s-1. Positive means counterclockwise circulation. If + ! speed_cont is not a null ssh contour then max_speed is the + ! speed on speed_cont. type(ssh_contour), intent(inout):: cont_list(:) ! (n_max_cont) ! Contour list. Defined only for subscripts 1:n_cont. On entry, @@ -44,6 +50,9 @@ contains ! only called when there is an outermost contour). On return, 1 <= ! n_cont <= n_max_cont. + real, intent(in):: extr_coord(:) + ! (2) longitude and latitude of extremum , in rad + real, intent(in):: ssh(:, :), u(:, :), v(:, :) ! The domain should be the bounding box of out_cont, because we do ! not exclude other extrema. @@ -70,14 +79,14 @@ contains ! Now find the contours associated to the new values of SSH: do i = i_outer + 1, n_cont cont_list(i)%polyline = good_contour(corner, step, ssh, & - cont_list(i)%ssh, e%extr%coord) + cont_list(i)%ssh, extr_coord) end do allocate(speed(n_cont)) do i = 1, n_cont if (cont_list(i)%closed) then - speed(i) = mean_speed(u, v, cont_list(i)%polyline, e%extr%coord, & + speed(i) = mean_speed(u, v, cont_list(i)%polyline, extr_coord, & corner, step) else ! It is possible that good_contour returned a null polyline @@ -98,18 +107,18 @@ contains if (i == 0) then ! All speed values are NaN - e%speed_cont = null_ssh_contour() - e%max_speed = missing_speed + speed_cont = null_ssh_contour() + max_speed = missing_speed else - e%max_speed = speed(i) + max_speed = speed(i) if (i == i_outer) then ! Maximum speed on the outermost contour - e%speed_cont = null_ssh_contour() + speed_cont = null_ssh_contour() else - e%speed_cont = cont_list(i) - e%speed_cont%area = spher_polyline_area(e%speed_cont%polyline) - call ccw_orient(e%speed_cont) + speed_cont = cont_list(i) + speed_cont%area = spher_polyline_area(speed_cont%polyline) + call ccw_orient(speed_cont) end if end if