- Timestamp:
- 2018-08-03T10:18:16+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfsh2.F90
r9598 r10030 6 6 !! History : - ! 2014-10 (A. Barthelemy, G. Madec) original code 7 7 !! NEMO 4.0 ! 2017-04 (G. Madec) remove u-,v-pts avm 8 !! 5.0 ! 2018-08 (G. Madec) local calculation of e3uw e3vw 8 9 !!---------------------------------------------------------------------- 9 10 … … 28 29 CONTAINS 29 30 30 SUBROUTINE zdf_sh2( p ub, pvb, pun, pvn, p_avm, p_sh2 )31 SUBROUTINE zdf_sh2( pssh, pub, pvb, pun, pvn, p_avm, p_sh2 ) 31 32 !!---------------------------------------------------------------------- 32 33 !! *** ROUTINE zdf_sh2 *** … … 47 48 !! References : Bruchard, OM 2002 48 49 !! --------------------------------------------------------------------- 50 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pssh ! sea surface height 49 51 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pub, pvb, pun, pvn ! before, now horizontal velocities 50 52 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: p_avm ! vertical eddy viscosity (w-points) 51 53 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: p_sh2 ! shear production of TKE (w-points) 52 54 ! 53 INTEGER :: ji, jj, jk ! dummy loop arguments 54 REAL(wp), DIMENSION(jpi,jpj) :: zsh2u, zsh2v ! 2D workspace 55 INTEGER :: ji, jj, jk ! dummy loop arguments 56 REAL(wp):: ze3uw_BN, ze3vw_BN ! local real 57 REAL(wp), DIMENSION(jpi,jpj) :: zsh2u , zsh2v ! 2D workspace 58 REAL(wp), DIMENSION(jpi,jpj) :: zsshu_hB, zsshv_hB ! 2D workspace 59 REAL(wp), DIMENSION(jpi,jpj) :: zsshu_hN, zsshv_hN 55 60 !!-------------------------------------------------------------------- 56 61 ! 57 DO jk = 2, jpkm1 58 DO jj = 1, jpjm1 !* 2 x shear production at uw- and vw-points (energy conserving form) 62 IF( ln_linssh ) THEN !== linear ssh case ==! 63 DO jk = 2, jpkm1 64 DO jj = 1, jpjm1 !* 2 x shear production at uw- and vw-points (energy conserving form) 65 DO ji = 1, jpim1 66 ze3uw_BN = e3uw_0(ji,jj,jk) * e3uw_0(ji,jj,jk) 67 ze3vw_BN = e3vw_0(ji,jj,jk) * e3vw_0(ji,jj,jk) 68 ! 69 zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 70 & * ( pun(ji,jj,jk-1) - pun(ji,jj,jk) ) & 71 & * ( pub(ji,jj,jk-1) - pub(ji,jj,jk) ) / ze3uw_BN * wumask(ji,jj,jk) 72 zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) ) & 73 & * ( pvn(ji,jj,jk-1) - pvn(ji,jj,jk) ) & 74 & * ( pvb(ji,jj,jk-1) - pvb(ji,jj,jk) ) / ze3vw_BN * wvmask(ji,jj,jk) 75 END DO 76 END DO 77 DO jj = 2, jpjm1 !* shear production at w-point 78 DO ji = 2, jpim1 ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 79 p_sh2(ji,jj,jk) = 0.25 * ( ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) ) & 80 & + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) ) ) 81 END DO 82 END DO 83 END DO 84 ! 85 ELSE !== Non linear ssh case ==! 86 DO jj = 1, jpjm1 59 87 DO ji = 1, jpim1 60 zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 61 & * ( pun(ji,jj,jk-1) - pun(ji,jj,jk) ) & 62 & * ( pub(ji,jj,jk-1) - pub(ji,jj,jk) ) / ( e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) ) * wumask(ji,jj,jk) 63 zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) ) & 64 & * ( pvn(ji,jj,jk-1) - pvn(ji,jj,jk) ) & 65 & * ( pvb(ji,jj,jk-1) - pvb(ji,jj,jk) ) / ( e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) ) * wvmask(ji,jj,jk) 88 zsshu_hB(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nbb) + pssh(ji+1,jj ,Nbb) ) * r1_hu_0(ji,jj) * ssumask(ji,jj) 89 zsshv_hB(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nbb) + pssh(ji ,jj+1,Nbb) ) * r1_hv_0(ji,jj) * ssvmask(ji,jj) 90 zsshu_hN(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nnn) + pssh(ji+1,jj ,Nnn) ) * r1_hu_0(ji,jj) * ssumask(ji,jj) 91 zsshv_hN(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nnn) + pssh(ji ,jj+1,Nnn) ) * r1_hv_0(ji,jj) * ssvmask(ji,jj) 66 92 END DO 67 93 END DO 68 DO jj = 2, jpjm1 !* shear production at w-point 69 DO ji = 2, jpim1 ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 70 p_sh2(ji,jj,jk) = 0.25 * ( ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) ) & 71 & + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) ) ) 94 ! 95 DO jk = 2, jpkm1 96 DO jj = 1, jpjm1 !* 2 x shear production at uw- and vw-points (energy conserving form) 97 DO ji = 1, jpim1 98 ze3uw_BN = e3uw_0(ji,jj,jk) * e3uw_0(ji,jj,jk) * ( 1._wp + zsshu_hB(ji,jj) * wumask(ji,jj,jk) ) & 99 & * ( 1._wp + zsshu_hN(ji,jj) * wumask(ji,jj,jk) ) 100 ze3vw_BN = e3vw_0(ji,jj,jk) * e3vw_0(ji,jj,jk) * ( 1._wp + zsshu_hB(ji,jj) * wvmask(ji,jj,jk) ) & 101 & * ( 1._wp + zsshu_hN(ji,jj) * wvmask(ji,jj,jk) ) 102 zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 103 & * ( pun(ji,jj,jk-1) - pun(ji,jj,jk) ) & 104 & * ( pub(ji,jj,jk-1) - pub(ji,jj,jk) ) / ze3uw_BN * wumask(ji,jj,jk) 105 zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) ) & 106 & * ( pvn(ji,jj,jk-1) - pvn(ji,jj,jk) ) & 107 & * ( pvb(ji,jj,jk-1) - pvb(ji,jj,jk) ) / ze3vw_BN * wvmask(ji,jj,jk) 108 END DO 72 109 END DO 73 END DO 74 END DO 110 DO jj = 2, jpjm1 !* shear production at w-point 111 DO ji = 2, jpim1 ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 112 p_sh2(ji,jj,jk) = 0.25 * ( ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) ) & 113 & + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) ) ) 114 END DO 115 END DO 116 END DO 117 ENDIF 75 118 ! 76 119 END SUBROUTINE zdf_sh2
Note: See TracChangeset
for help on using the changeset viewer.