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