Changeset 10877 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynadv_ubs.F90
- Timestamp:
- 2019-04-16T11:50:59+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/DYN/dynadv_ubs.F90
r10874 r10877 41 41 CONTAINS 42 42 43 SUBROUTINE dyn_adv_ubs( kt )43 SUBROUTINE dyn_adv_ubs( kt, Kbb, Kmm, puu, pvv, Krhs ) 44 44 !!---------------------------------------------------------------------- 45 45 !! *** ROUTINE dyn_adv_ubs *** … … 64 64 !! gamma1=1/3 and gamma2=1/32. 65 65 !! 66 !! ** Action : - ( ua,va) updated with the 3D advective momentum trends66 !! ** Action : - (puu(:,:,:,Krhs),pvv(:,:,:,Krhs)) updated with the 3D advective momentum trends 67 67 !! 68 68 !! Reference : Shchepetkin & McWilliams, 2005, Ocean Modelling. 69 69 !!---------------------------------------------------------------------- 70 INTEGER, INTENT(in) :: kt ! ocean time-step index 70 INTEGER , INTENT( in ) :: kt ! ocean time-step index 71 INTEGER , INTENT( in ) :: Kbb, Kmm, Krhs ! ocean time level indices 72 REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 71 73 ! 72 74 INTEGER :: ji, jj, jk ! dummy loop indices … … 95 97 ! 96 98 IF( l_trddyn ) THEN ! trends: store the input trends 97 zfu_uw(:,:,:) = ua(:,:,:)98 zfv_vw(:,:,:) = va(:,:,:)99 zfu_uw(:,:,:) = puu(:,:,:,Krhs) 100 zfv_vw(:,:,:) = pvv(:,:,:,Krhs) 99 101 ENDIF 100 102 ! ! =========================== ! … … 102 104 ! ! =========================== ! 103 105 ! ! horizontal volume fluxes 104 zfu(:,:,jk) = e2u(:,:) * e3u _n(:,:,jk) * un(:,:,jk)105 zfv(:,:,jk) = e1v(:,:) * e3v _n(:,:,jk) * vn(:,:,jk)106 zfu(:,:,jk) = e2u(:,:) * e3u(:,:,jk,Kmm) * puu(:,:,jk,Kmm) 107 zfv(:,:,jk) = e1v(:,:) * e3v(:,:,jk,Kmm) * pvv(:,:,jk,Kmm) 106 108 ! 107 109 DO jj = 2, jpjm1 ! laplacian 108 110 DO ji = fs_2, fs_jpim1 ! vector opt. 109 zlu_uu(ji,jj,jk,1) = ( ub (ji+1,jj ,jk) - 2.*ub (ji,jj,jk) + ub (ji-1,jj ,jk) ) * umask(ji,jj,jk)110 zlv_vv(ji,jj,jk,1) = ( vb (ji ,jj+1,jk) - 2.*vb (ji,jj,jk) + vb (ji ,jj-1,jk) ) * vmask(ji,jj,jk)111 zlu_uv(ji,jj,jk,1) = ( ub (ji ,jj+1,jk) - ub (ji ,jj ,jk) ) * fmask(ji ,jj ,jk) &112 & - ( ub (ji ,jj ,jk) - ub (ji ,jj-1,jk) ) * fmask(ji ,jj-1,jk)113 zlv_vu(ji,jj,jk,1) = ( vb (ji+1,jj ,jk) - vb (ji ,jj ,jk) ) * fmask(ji ,jj ,jk) &114 & - ( vb (ji ,jj ,jk) - vb (ji-1,jj ,jk) ) * fmask(ji-1,jj ,jk)111 zlu_uu(ji,jj,jk,1) = ( puu (ji+1,jj ,jk,Kbb) - 2.*puu (ji,jj,jk,Kbb) + puu (ji-1,jj ,jk,Kbb) ) * umask(ji,jj,jk) 112 zlv_vv(ji,jj,jk,1) = ( pvv (ji ,jj+1,jk,Kbb) - 2.*pvv (ji,jj,jk,Kbb) + pvv (ji ,jj-1,jk,Kbb) ) * vmask(ji,jj,jk) 113 zlu_uv(ji,jj,jk,1) = ( puu (ji ,jj+1,jk,Kbb) - puu (ji ,jj ,jk,Kbb) ) * fmask(ji ,jj ,jk) & 114 & - ( puu (ji ,jj ,jk,Kbb) - puu (ji ,jj-1,jk,Kbb) ) * fmask(ji ,jj-1,jk) 115 zlv_vu(ji,jj,jk,1) = ( pvv (ji+1,jj ,jk,Kbb) - pvv (ji ,jj ,jk,Kbb) ) * fmask(ji ,jj ,jk) & 116 & - ( pvv (ji ,jj ,jk,Kbb) - pvv (ji-1,jj ,jk,Kbb) ) * fmask(ji-1,jj ,jk) 115 117 ! 116 118 zlu_uu(ji,jj,jk,2) = ( zfu(ji+1,jj ,jk) - 2.*zfu(ji,jj,jk) + zfu(ji-1,jj ,jk) ) * umask(ji,jj,jk) … … 132 134 DO jk = 1, jpkm1 ! ====================== ! 133 135 ! ! horizontal volume fluxes 134 zfu(:,:,jk) = 0.25_wp * e2u(:,:) * e3u _n(:,:,jk) * un(:,:,jk)135 zfv(:,:,jk) = 0.25_wp * e1v(:,:) * e3v _n(:,:,jk) * vn(:,:,jk)136 zfu(:,:,jk) = 0.25_wp * e2u(:,:) * e3u(:,:,jk,Kmm) * puu(:,:,jk,Kmm) 137 zfv(:,:,jk) = 0.25_wp * e1v(:,:) * e3v(:,:,jk,Kmm) * pvv(:,:,jk,Kmm) 136 138 ! 137 139 DO jj = 1, jpjm1 ! horizontal momentum fluxes at T- and F-point 138 140 DO ji = 1, fs_jpim1 ! vector opt. 139 zui = ( un(ji,jj,jk) + un(ji+1,jj ,jk) )140 zvj = ( vn(ji,jj,jk) + vn(ji ,jj+1,jk) )141 zui = ( puu(ji,jj,jk,Kmm) + puu(ji+1,jj ,jk,Kmm) ) 142 zvj = ( pvv(ji,jj,jk,Kmm) + pvv(ji ,jj+1,jk,Kmm) ) 141 143 ! 142 144 IF( zui > 0 ) THEN ; zl_u = zlu_uu(ji ,jj,jk,1) … … 164 166 ! 165 167 zfv_f(ji ,jj ,jk) = ( zfvi - gamma2 * ( zlv_vu(ji,jj,jk,2) + zlv_vu(ji+1,jj ,jk,2) ) ) & 166 & * ( un(ji,jj,jk) + un(ji ,jj+1,jk) - gamma1 * zl_u )168 & * ( puu(ji,jj,jk,Kmm) + puu(ji ,jj+1,jk,Kmm) - gamma1 * zl_u ) 167 169 zfu_f(ji ,jj ,jk) = ( zfuj - gamma2 * ( zlu_uv(ji,jj,jk,2) + zlu_uv(ji ,jj+1,jk,2) ) ) & 168 & * ( vn(ji,jj,jk) + vn(ji+1,jj ,jk) - gamma1 * zl_v )170 & * ( pvv(ji,jj,jk,Kmm) + pvv(ji+1,jj ,jk,Kmm) - gamma1 * zl_v ) 169 171 END DO 170 172 END DO 171 173 DO jj = 2, jpjm1 ! divergence of horizontal momentum fluxes 172 174 DO ji = fs_2, fs_jpim1 ! vector opt. 173 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zfu_t(ji+1,jj,jk) - zfu_t(ji,jj ,jk) &174 & + zfv_f(ji ,jj,jk) - zfv_f(ji,jj-1,jk) ) * r1_e1e2u(ji,jj) / e3u _n(ji,jj,jk)175 va(ji,jj,jk) = va(ji,jj,jk) - ( zfu_f(ji,jj ,jk) - zfu_f(ji-1,jj,jk) &176 & + zfv_t(ji,jj+1,jk) - zfv_t(ji ,jj,jk) ) * r1_e1e2v(ji,jj) / e3v _n(ji,jj,jk)175 puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - ( zfu_t(ji+1,jj,jk) - zfu_t(ji,jj ,jk) & 176 & + zfv_f(ji ,jj,jk) - zfv_f(ji,jj-1,jk) ) * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm) 177 pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - ( zfu_f(ji,jj ,jk) - zfu_f(ji-1,jj,jk) & 178 & + zfv_t(ji,jj+1,jk) - zfv_t(ji ,jj,jk) ) * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm) 177 179 END DO 178 180 END DO 179 181 END DO 180 182 IF( l_trddyn ) THEN ! trends: send trends to trddyn for diagnostic 181 zfu_uw(:,:,:) = ua(:,:,:) - zfu_uw(:,:,:)182 zfv_vw(:,:,:) = va(:,:,:) - zfv_vw(:,:,:)183 zfu_uw(:,:,:) = puu(:,:,:,Krhs) - zfu_uw(:,:,:) 184 zfv_vw(:,:,:) = pvv(:,:,:,Krhs) - zfv_vw(:,:,:) 183 185 CALL trd_dyn( zfu_uw, zfv_vw, jpdyn_keg, kt ) 184 zfu_t(:,:,:) = ua(:,:,:)185 zfv_t(:,:,:) = va(:,:,:)186 zfu_t(:,:,:) = puu(:,:,:,Krhs) 187 zfv_t(:,:,:) = pvv(:,:,:,Krhs) 186 188 ENDIF 187 189 ! ! ==================== ! … … 199 201 DO jj = 2, jpjm1 200 202 DO ji = fs_2, fs_jpim1 201 zfu_uw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * w n(ji,jj,1) + e1e2t(ji+1,jj) * wn(ji+1,jj,1) ) * un(ji,jj,1)202 zfv_vw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * w n(ji,jj,1) + e1e2t(ji,jj+1) * wn(ji,jj+1,1) ) * vn(ji,jj,1)203 zfu_uw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * ww(ji,jj,1) + e1e2t(ji+1,jj) * ww(ji+1,jj,1) ) * puu(ji,jj,1,Kmm) 204 zfv_vw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * ww(ji,jj,1) + e1e2t(ji,jj+1) * ww(ji,jj+1,1) ) * pvv(ji,jj,1,Kmm) 203 205 END DO 204 206 END DO … … 207 209 DO jj = 2, jpj 208 210 DO ji = 2, jpi 209 zfw(ji,jj,jk) = 0.25_wp * e1e2t(ji,jj) * w n(ji,jj,jk)211 zfw(ji,jj,jk) = 0.25_wp * e1e2t(ji,jj) * ww(ji,jj,jk) 210 212 END DO 211 213 END DO 212 214 DO jj = 2, jpjm1 213 215 DO ji = fs_2, fs_jpim1 ! vector opt. 214 zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji+1,jj,jk) ) * ( un(ji,jj,jk) + un(ji,jj,jk-1) )215 zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji,jj,jk-1) )216 zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji+1,jj,jk) ) * ( puu(ji,jj,jk,Kmm) + puu(ji,jj,jk-1,Kmm) ) 217 zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji,jj+1,jk) ) * ( pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk-1,Kmm) ) 216 218 END DO 217 219 END DO … … 220 222 DO jj = 2, jpjm1 221 223 DO ji = fs_2, fs_jpim1 ! vector opt. 222 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zfu_uw(ji,jj,jk) - zfu_uw(ji,jj,jk+1) ) * r1_e1e2u(ji,jj) / e3u_n(ji,jj,jk)223 va(ji,jj,jk) = va(ji,jj,jk) - ( zfv_vw(ji,jj,jk) - zfv_vw(ji,jj,jk+1) ) * r1_e1e2v(ji,jj) / e3v_n(ji,jj,jk)224 puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - ( zfu_uw(ji,jj,jk) - zfu_uw(ji,jj,jk+1) ) * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm) 225 pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - ( zfv_vw(ji,jj,jk) - zfv_vw(ji,jj,jk+1) ) * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm) 224 226 END DO 225 227 END DO … … 227 229 ! 228 230 IF( l_trddyn ) THEN ! save the vertical advection trend for diagnostic 229 zfu_t(:,:,:) = ua(:,:,:) - zfu_t(:,:,:)230 zfv_t(:,:,:) = va(:,:,:) - zfv_t(:,:,:)231 zfu_t(:,:,:) = puu(:,:,:,Krhs) - zfu_t(:,:,:) 232 zfv_t(:,:,:) = pvv(:,:,:,Krhs) - zfv_t(:,:,:) 231 233 CALL trd_dyn( zfu_t, zfv_t, jpdyn_zad, kt ) 232 234 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.