@@ -2922,8 +2922,9 @@ subroutine find_coupling_coef(a_cpl, hvel, do_i, h_harm, bbl_thick, kv_bbl, z_i,
2922
2922
endif
2923
2923
end subroutine find_coupling_coef
2924
2924
2925
- ! > Velocity components which exceed a threshold for physically reasonable values
2926
- ! ! are truncated. Optionally, any column with excessive velocities may be sent
2925
+ ! > Velocity components which exceed a threshold for physically reasonable values are truncated,
2926
+ ! ! and the running sum of the number of trunctionas within the non-symmetric memory computational
2927
+ ! ! domain is incremmented. Optionally, any column with excessive velocities may be sent
2927
2928
! ! to a diagnostic reporting subroutine.
2928
2929
subroutine vertvisc_limit_vel (u , v , h , ADp , CDp , forces , visc , dt , G , GV , US , CS )
2929
2930
type (ocean_grid_type), intent (in ) :: G ! < Ocean grid structure
@@ -2953,7 +2954,7 @@ subroutine vertvisc_limit_vel(u, v, h, ADp, CDp, forces, visc, dt, G, GV, US, CS
2953
2954
is = G% isc ; ie = G% iec ; js = G% jsc ; je = G% jec ; nz = GV% ke
2954
2955
Isq = G% IscB ; Ieq = G% IecB ; Jsq = G% JscB ; Jeq = G% JecB
2955
2956
2956
- H_report = 6 .0 * GV% Angstrom_H
2957
+ H_report = 3 .0 * GV% Angstrom_H
2957
2958
2958
2959
if (len_trim (CS% u_trunc_file) > 0 ) then
2959
2960
! $OMP parallel do default(shared) private(trunc_any,CFL)
@@ -2983,10 +2984,12 @@ subroutine vertvisc_limit_vel(u, v, h, ADp, CDp, forces, visc, dt, G, GV, US, CS
2983
2984
do k= 1 ,nz ; do I= Isq,Ieq
2984
2985
if ((u(I,j,k) * (dt * G% dy_Cu(I,j))) * G% IareaT(i+1 ,j) < - CS% CFL_trunc) then
2985
2986
u(I,j,k) = (- 0.9 * CS% CFL_trunc) * (G% areaT(i+1 ,j) / (dt * G% dy_Cu(I,j)))
2986
- if (h(i,j,k) + h(i+1 ,j,k) > H_report) CS% ntrunc = CS% ntrunc + 1
2987
+ if (((I >= G% isc) .and. (I <= G% iec) .and. (j >= G% jsc) .and. (j <= G% jec)) .and. &
2988
+ (CS% h_u(I,j,k) > H_report)) CS% ntrunc = CS% ntrunc + 1
2987
2989
elseif ((u(I,j,k) * (dt * G% dy_Cu(I,j))) * G% IareaT(i,j) > CS% CFL_trunc) then
2988
2990
u(I,j,k) = (0.9 * CS% CFL_trunc) * (G% areaT(i,j) / (dt * G% dy_Cu(I,j)))
2989
- if (h(i,j,k) + h(i+1 ,j,k) > H_report) CS% ntrunc = CS% ntrunc + 1
2991
+ if (((I >= G% isc) .and. (I <= G% iec) .and. (j >= G% jsc) .and. (j <= G% jec)) .and. &
2992
+ (CS% h_u(I,j,k) > H_report)) CS% ntrunc = CS% ntrunc + 1
2990
2993
endif
2991
2994
enddo ; enddo
2992
2995
endif
@@ -2997,10 +3000,12 @@ subroutine vertvisc_limit_vel(u, v, h, ADp, CDp, forces, visc, dt, G, GV, US, CS
2997
3000
if (abs (u(I,j,k)) < CS% vel_underflow) then ; u(I,j,k) = 0.0
2998
3001
elseif ((u(I,j,k) * (dt * G% dy_Cu(I,j))) * G% IareaT(i+1 ,j) < - CS% CFL_trunc) then
2999
3002
u(I,j,k) = (- 0.9 * CS% CFL_trunc) * (G% areaT(i+1 ,j) / (dt * G% dy_Cu(I,j)))
3000
- if (h(i,j,k) + h(i+1 ,j,k) > H_report) CS% ntrunc = CS% ntrunc + 1
3003
+ if (((I >= G% isc) .and. (I <= G% iec) .and. (j >= G% jsc) .and. (j <= G% jec)) .and. &
3004
+ (CS% h_u(I,j,k) > H_report)) CS% ntrunc = CS% ntrunc + 1
3001
3005
elseif ((u(I,j,k) * (dt * G% dy_Cu(I,j))) * G% IareaT(i,j) > CS% CFL_trunc) then
3002
3006
u(I,j,k) = (0.9 * CS% CFL_trunc) * (G% areaT(i,j) / (dt * G% dy_Cu(I,j)))
3003
- if (h(i,j,k) + h(i+1 ,j,k) > H_report) CS% ntrunc = CS% ntrunc + 1
3007
+ if (((I >= G% isc) .and. (I <= G% iec) .and. (j >= G% jsc) .and. (j <= G% jec)) .and. &
3008
+ (CS% h_u(I,j,k) > H_report)) CS% ntrunc = CS% ntrunc + 1
3004
3009
endif
3005
3010
enddo ; enddo ; enddo
3006
3011
endif
@@ -3041,10 +3046,12 @@ subroutine vertvisc_limit_vel(u, v, h, ADp, CDp, forces, visc, dt, G, GV, US, CS
3041
3046
do k= 1 ,nz ; do i= is,ie
3042
3047
if ((v(i,J,k) * (dt * G% dx_Cv(i,J))) * G% IareaT(i,j+1 ) < - CS% CFL_trunc) then
3043
3048
v(i,J,k) = (- 0.9 * CS% CFL_trunc) * (G% areaT(i,j+1 ) / (dt * G% dx_Cv(i,J)))
3044
- if (h(i,j,k) + h(i,j+1 ,k) > H_report) CS% ntrunc = CS% ntrunc + 1
3049
+ if (((i >= G% isc) .and. (i <= G% iec) .and. (J >= G% jsc) .and. (J <= G% jec)) .and. &
3050
+ (CS% h_v(i,J,k) > H_report)) CS% ntrunc = CS% ntrunc + 1
3045
3051
elseif ((v(i,J,k) * (dt * G% dx_Cv(i,J))) * G% IareaT(i,j) > CS% CFL_trunc) then
3046
3052
v(i,J,k) = (0.9 * CS% CFL_trunc) * (G% areaT(i,j) / (dt * G% dx_Cv(i,J)))
3047
- if (h(i,j,k) + h(i,j+1 ,k) > H_report) CS% ntrunc = CS% ntrunc + 1
3053
+ if (((i >= G% isc) .and. (i <= G% iec) .and. (J >= G% jsc) .and. (J <= G% jec)) .and. &
3054
+ (CS% h_v(i,J,k) > H_report)) CS% ntrunc = CS% ntrunc + 1
3048
3055
endif
3049
3056
enddo ; enddo
3050
3057
endif
@@ -3055,10 +3062,12 @@ subroutine vertvisc_limit_vel(u, v, h, ADp, CDp, forces, visc, dt, G, GV, US, CS
3055
3062
if (abs (v(i,J,k)) < CS% vel_underflow) then ; v(i,J,k) = 0.0
3056
3063
elseif ((v(i,J,k) * (dt * G% dx_Cv(i,J))) * G% IareaT(i,j+1 ) < - CS% CFL_trunc) then
3057
3064
v(i,J,k) = (- 0.9 * CS% CFL_trunc) * (G% areaT(i,j+1 ) / (dt * G% dx_Cv(i,J)))
3058
- if (h(i,j,k) + h(i,j+1 ,k) > H_report) CS% ntrunc = CS% ntrunc + 1
3065
+ if (((i >= G% isc) .and. (i <= G% iec) .and. (J >= G% jsc) .and. (J <= G% jec)) .and. &
3066
+ (CS% h_v(i,J,k) > H_report)) CS% ntrunc = CS% ntrunc + 1
3059
3067
elseif ((v(i,J,k) * (dt * G% dx_Cv(i,J))) * G% IareaT(i,j) > CS% CFL_trunc) then
3060
3068
v(i,J,k) = (0.9 * CS% CFL_trunc) * (G% areaT(i,j) / (dt * G% dx_Cv(i,J)))
3061
- if (h(i,j,k) + h(i,j+1 ,k) > H_report) CS% ntrunc = CS% ntrunc + 1
3069
+ if (((i >= G% isc) .and. (i <= G% iec) .and. (J >= G% jsc) .and. (J <= G% jec)) .and. &
3070
+ (CS% h_v(i,J,k) > H_report)) CS% ntrunc = CS% ntrunc + 1
3062
3071
endif
3063
3072
enddo ; enddo ; enddo
3064
3073
endif
0 commit comments