Changeset 10946 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdken.F90
- Timestamp:
- 2019-05-08T10:56:14+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdken.F90
r10425 r10946 59 59 60 60 61 SUBROUTINE trd_ken( putrd, pvtrd, ktrd, kt )61 SUBROUTINE trd_ken( putrd, pvtrd, ktrd, kt, Kmm ) 62 62 !!--------------------------------------------------------------------- 63 63 !! *** ROUTINE trd_ken *** … … 67 67 !! ** Method : - apply lbc to the input masked velocity trends 68 68 !! - compute the associated KE trend: 69 !! zke = 0.5 * ( mi-1[ u n * putrd * bu ] + mj-1[ vn* pvtrd * bv] ) / bt69 !! zke = 0.5 * ( mi-1[ uu(Kmm) * putrd * bu ] + mj-1[ vv(Kmm) * pvtrd * bv] ) / bt 70 70 !! where bu, bv, bt are the volume of u-, v- and t-boxes. 71 71 !! - vertical diffusion case (jpdyn_zdf): … … 80 80 INTEGER , INTENT(in ) :: ktrd ! trend index 81 81 INTEGER , INTENT(in ) :: kt ! time step 82 INTEGER , INTENT(in ) :: Kmm ! time level index 82 83 ! 83 84 INTEGER :: ji, jj, jk ! dummy loop indices … … 92 93 nkstp = kt 93 94 DO jk = 1, jpkm1 94 bu (:,:,jk) = e1e2u(:,:) * e3u _n(:,:,jk)95 bv (:,:,jk) = e1e2v(:,:) * e3v _n(:,:,jk)96 r1_bt(:,:,jk) = r1_e1e2t(:,:) / e3t _n(:,:,jk) * tmask(:,:,jk)95 bu (:,:,jk) = e1e2u(:,:) * e3u(:,:,jk,Kmm) 96 bv (:,:,jk) = e1e2v(:,:) * e3v(:,:,jk,Kmm) 97 r1_bt(:,:,jk) = r1_e1e2t(:,:) / e3t(:,:,jk,Kmm) * tmask(:,:,jk) 97 98 END DO 98 99 ! … … 103 104 DO jj = 2, jpj 104 105 DO ji = 2, jpi 105 zke(ji,jj,jk) = 0.5_wp * rau0 *( u n(ji ,jj,jk) * putrd(ji ,jj,jk) * bu(ji ,jj,jk) &106 & + u n(ji-1,jj,jk) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk) &107 & + v n(ji,jj ,jk) * pvtrd(ji,jj ,jk) * bv(ji,jj ,jk) &108 & + v n(ji,jj-1,jk) * pvtrd(ji,jj-1,jk) * bv(ji,jj-1,jk) ) * r1_bt(ji,jj,jk)106 zke(ji,jj,jk) = 0.5_wp * rau0 *( uu(ji ,jj,jk,Kmm) * putrd(ji ,jj,jk) * bu(ji ,jj,jk) & 107 & + uu(ji-1,jj,jk,Kmm) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk) & 108 & + vv(ji,jj ,jk,Kmm) * pvtrd(ji,jj ,jk) * bv(ji,jj ,jk) & 109 & + vv(ji,jj-1,jk,Kmm) * pvtrd(ji,jj-1,jk) * bv(ji,jj-1,jk) ) * r1_bt(ji,jj,jk) 109 110 END DO 110 111 END DO … … 122 123 ! ! ! wind stress trends 123 124 ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) , zke2d(jpi,jpj) ) 124 z2dx(:,:) = u n(:,:,1) * ( utau_b(:,:) + utau(:,:) ) * e1e2u(:,:) * umask(:,:,1)125 z2dy(:,:) = v n(:,:,1) * ( vtau_b(:,:) + vtau(:,:) ) * e1e2v(:,:) * vmask(:,:,1)125 z2dx(:,:) = uu(:,:,1,Kmm) * ( utau_b(:,:) + utau(:,:) ) * e1e2u(:,:) * umask(:,:,1) 126 z2dy(:,:) = vv(:,:,1,Kmm) * ( vtau_b(:,:) + vtau(:,:) ) * e1e2v(:,:) * vmask(:,:,1) 126 127 zke2d(1,:) = 0._wp ; zke2d(:,1) = 0._wp 127 128 DO jj = 2, jpj … … 141 142 ! ikbu = mbku(ji,jj) ! deepest ocean u- & v-levels 142 143 ! ikbv = mbkv(ji,jj) 143 ! z2dx(ji,jj) = u n(ji,jj,ikbu) * bfrua(ji,jj) * un(ji,jj,ikbu)144 ! z2dy(ji,jj) = v n(ji,jj,ikbu) * bfrva(ji,jj) * vn(ji,jj,ikbv)144 ! z2dx(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrua(ji,jj) * uu(ji,jj,ikbu,Kmm) 145 ! z2dy(ji,jj) = vv(ji,jj,ikbu,Kmm) * bfrva(ji,jj) * vv(ji,jj,ikbv,Kmm) 145 146 ! END DO 146 147 ! END DO … … 157 158 CASE( jpdyn_atf ) ; CALL iom_put( "ketrd_atf" , zke ) ! asselin filter trends 158 159 !! a faire !!!! idee changer dynnxt pour avoir un appel a jpdyn_bfr avant le swap !!! 159 !! reflechir a une possible sauvegarde du "vrai" u n,vnpour le calcul de atf....160 !! reflechir a une possible sauvegarde du "vrai" uu(Kmm),vv(Kmm) pour le calcul de atf.... 160 161 ! 161 162 ! IF( ln_drgimp ) THEN ! bottom friction (implicit case) … … 164 165 ! ikbu = mbku(ji,jj) ! deepest ocean u- & v-levels 165 166 ! ikbv = mbkv(ji,jj) 166 ! z2dx(ji,jj) = u n(ji,jj,ikbu) * bfrua(ji,jj) * un(ji,jj,ikbu) / e3u_n(ji,jj,ikbu)167 ! z2dy(ji,jj) = u n(ji,jj,ikbu) * bfrva(ji,jj) * vn(ji,jj,ikbv) / e3v_n(ji,jj,ikbv)167 ! z2dx(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrua(ji,jj) * uu(ji,jj,ikbu,Kmm) / e3u(ji,jj,ikbu,Kmm) 168 ! z2dy(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrva(ji,jj) * vv(ji,jj,ikbv,Kmm) / e3v(ji,jj,ikbv,Kmm) 168 169 ! END DO 169 170 ! END DO … … 179 180 CASE( jpdyn_ken ) ; ! kinetic energy 180 181 ! called in dynnxt.F90 before asselin time filter 181 ! with putrd=u a and pvtrd=va182 ! with putrd=uu(Krhs) and pvtrd=vv(Krhs) 182 183 zke(:,:,:) = 0.5_wp * zke(:,:,:) 183 184 CALL iom_put( "KE", zke ) 184 185 ! 185 CALL ken_p2k( kt , zke )186 CALL ken_p2k( kt , zke, Kmm ) 186 187 CALL iom_put( "ketrd_convP2K", zke ) ! conversion -rau*g*w 187 188 ! … … 191 192 192 193 193 SUBROUTINE ken_p2k( kt , pconv )194 SUBROUTINE ken_p2k( kt , pconv, Kmm ) 194 195 !!--------------------------------------------------------------------- 195 196 !! *** ROUTINE ken_p2k *** … … 202 203 !!---------------------------------------------------------------------- 203 204 INTEGER , INTENT(in ) :: kt ! ocean time-step index 205 INTEGER , INTENT(in ) :: Kmm ! time level index 204 206 REAL(wp), DIMENSION(:,:,:), INTENT( out) :: pconv ! 205 207 ! … … 214 216 215 217 ! Surface value (also valid in partial step case) 216 zconv(:,:,1) = zcoef * ( 2._wp * rhd(:,:,1) ) * w n(:,:,1) * e3w_n(:,:,1)218 zconv(:,:,1) = zcoef * ( 2._wp * rhd(:,:,1) ) * ww(:,:,1) * e3w(:,:,1,Kmm) 217 219 218 220 ! interior value (2=<jk=<jpkm1) 219 221 DO jk = 2, jpk 220 zconv(:,:,jk) = zcoef * ( rhd(:,:,jk) + rhd(:,:,jk-1) ) * w n(:,:,jk) * e3w_n(:,:,jk)222 zconv(:,:,jk) = zcoef * ( rhd(:,:,jk) + rhd(:,:,jk-1) ) * ww(:,:,jk) * e3w(:,:,jk,Kmm) 221 223 END DO 222 224 … … 225 227 DO jj = 1, jpj 226 228 DO ji = 1, jpi 227 zcoef = 0.5_wp / e3t _n(ji,jj,jk)229 zcoef = 0.5_wp / e3t(ji,jj,jk,Kmm) 228 230 pconv(ji,jj,jk) = zcoef * ( zconv(ji,jj,jk) + zconv(ji,jj,jk+1) ) * tmask(ji,jj,jk) 229 231 END DO
Note: See TracChangeset
for help on using the changeset viewer.