Issue in Richardson number
Since NEMO 4.0 Richardson number use the p_sh2 (shear production term of TKE) which is defined as:
zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) &
& * ( uu(ji,jj,jk-1,Kmm) - uu(ji,jj,jk,Kmm) ) &
& * ( uu(ji,jj,jk-1,Kbb) - uu(ji,jj,jk,Kbb) ) &
& / ( e3uw(ji,jj,jk ,Kmm) * e3uw(ji,jj,jk,Kbb) ) &
& * wumask(ji,jj,jk)
zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) ) &
& * ( vv(ji,jj,jk-1,Kmm) - vv(ji,jj,jk,Kmm) ) &
& * ( vv(ji,jj,jk-1,Kbb) - vv(ji,jj,jk,Kbb) ) &
& / ( e3vw(ji,jj,jk ,Kmm) * e3vw(ji,jj,jk,Kbb) ) &
& * wvmask(ji,jj,jk)
p_sh2(ji,jj,jk) = 0.25 * ( ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) ) &
& + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) ) )
This gives a wrong result of the Richardson number (we tested it in the Mediterranean Sea and have terrible results).
Indeed, we should calculate the before local Richardson number which only depend on Kbb (not in Kmm):
ri = N^2 / dz(u)**2
!! = e3w**2 * rn2/[ mi( dk(uu(:,:,:,Kbb)) )+mj( dk(vv(:,:,:,Kbb)) ) ]
Fix
change SUBROUTINE zdf_ric to calculate the before Richardson number:
zdku = 0.5 / e3uw(ji,jj,jk,Kbb) * ( uu(ji-1,jj,jk-1,Kbb) + uu(ji,jj,jk-1,Kbb) &
& - uu(ji-1,jj,jk,Kbb) - uu(ji,jj,jk,Kbb) )* wumask(ji,jj,jk)
zdkv = 0.5 / e3vw(ji,jj,jk,Kbb) * ( vv(ji,jj-1,jk-1,Kbb) + vv(ji,jj,jk-1,Kbb) &
& - vv(ji,jj-1,jk,Kbb) - vv(ji,jj,jk,Kbb) )* wvmask(ji,jj,jk)
zwx = zdku*zdku + zdkv*zdkv
zcfRi = 1._wp / ( 1._wp + rn_alp * MAX( 0._wp , rn2(ji,jj,jk) / ( zwx + 1.e-20 ) ) )