- Timestamp:
- 2018-07-26T09:50:51+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynnxt.F90
r9939 r10001 20 20 !! 3.6 ! 2014-04 (G. Madec) add the diagnostic of the time filter trends 21 21 !! 3.7 ! 2015-11 (J. Chanut) Free surface simplification 22 !! 4.0 ! 2018-07 (G. Madec) 1- z-star (s-star) only 23 !! 2- remove dom_vvl_interpol 22 24 !!------------------------------------------------------------------------- 23 25 … … 34 36 USE dynspg_ts ! surface pressure gradient: split-explicit scheme 35 37 USE domvvl ! variable volume 36 USE bdy_oce , ONLY: ln_bdy38 USE bdy_oce , ONLY : ln_bdy 37 39 USE bdydta ! ocean open boundary conditions 38 40 USE bdydyn ! ocean open boundary conditions … … 92 94 !! un,vn now horizontal velocity of next time-step 93 95 !!---------------------------------------------------------------------- 94 INTEGER, INTENT( in) :: kt ! ocean time-step index96 INTEGER, INTENT(in) :: kt ! ocean time-step index 95 97 ! 96 98 INTEGER :: ji, jj, jk ! dummy loop indices … … 100 102 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zue, zve 101 103 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3u_f, ze3v_f, zua, zva 104 REAL(wp), DIMENSION(jpi,jpj) :: z_ssh_h0, zsshu, zsshv 102 105 !!---------------------------------------------------------------------- 103 106 ! … … 212 215 ! => time filter + conservation correction (only at the first level) 213 216 zcoef = rn_atfp * rn_Dt * r1_rho0 214 217 ! 215 218 e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef * ( emp_b(:,:) - emp(:,:) ) * tmask(:,:,1) 216 219 ! 217 220 IF ( ln_rnf ) THEN 218 221 IF( ln_rnf_depth ) THEN … … 228 231 END DO 229 232 ELSE 230 e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef * ( -rnf_b(:,:) + rnf(:,:) )*tmask(:,:,1)233 e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef * ( -rnf_b(:,:) + rnf(:,:) )*tmask(:,:,1) 231 234 ENDIF 232 235 ENDIF 233 236 ! 234 237 IF ( ln_isf ) THEN ! if ice shelf melting 235 238 DO jk = 1, jpkm1 ! Deal with isf separetely, as can be through depth too … … 245 248 ENDIF 246 249 ! 250 ! 247 251 IF( ln_dynadv_vec ) THEN ! Asselin filter applied on velocity 248 ! Before filtered scale factor at (u/v)-points 249 CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 250 CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 252 ! !* ssh at u- and v-points) 253 DO jj = 2, jpjm1 ; DO ji = 2, jpim1 254 zsshu(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji+1,jj ) ) * ssumask(ji,jj) 255 zsshv(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji ,jj+1) ) * ssvmask(ji,jj) 256 END DO ; END DO 257 CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp ) 258 ! 259 ! 260 ! !* e3u and e3v 261 z_ssh_h0(:,:) = zsshu(:,:) * r1_hu_0(:,:) ! u-point 262 DO jk = 1, jpkm1 263 e3u_b (:,:,jk) = e3u_0 (:,:,jk) * ( 1._wp + z_ssh_h0(:,:) * umask(:,:,jk) ) 264 END DO 265 z_ssh_h0(:,:) = zsshv(:,:) * r1_hv_0(:,:) ! v-point 266 DO jk = 1, jpkm1 267 e3v_b (:,:,jk) = e3v_0 (:,:,jk) * ( 1._wp + z_ssh_h0(:,:) * vmask(:,:,jk) ) 268 END DO 269 ! 251 270 DO jk = 1, jpkm1 252 271 DO jj = 1, jpj … … 266 285 ! 267 286 ALLOCATE( ze3u_f(jpi,jpj,jpk) , ze3v_f(jpi,jpj,jpk) ) 268 ! Before filtered scale factor at (u/v)-points stored in ze3u_f, ze3v_f 269 CALL dom_vvl_interpol( e3t_b(:,:,:), ze3u_f, 'U' ) 270 CALL dom_vvl_interpol( e3t_b(:,:,:), ze3v_f, 'V' ) 287 ! 288 ! !* ssh at u- and v-points) 289 DO jj = 2, jpjm1 ; DO ji = 2, jpim1 290 zsshu(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji+1,jj ) ) * ssumask(ji,jj) 291 zsshv(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji ,jj+1) ) * ssvmask(ji,jj) 292 END DO ; END DO 293 CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp ) 294 ! 295 ! 296 ! !* e3u and e3v 297 z_ssh_h0(:,:) = zsshu(:,:) * r1_hu_0(:,:) ! u-point 298 DO jk = 1, jpkm1 299 ze3u_f(:,:,jk) = e3u_0 (:,:,jk) * ( 1._wp + z_ssh_h0(:,:) * umask(:,:,jk) ) 300 END DO 301 z_ssh_h0(:,:) = zsshv(:,:) * r1_hv_0(:,:) ! v-point 302 DO jk = 1, jpkm1 303 ze3u_f(:,:,jk) = e3v_0 (:,:,jk) * ( 1._wp + z_ssh_h0(:,:) * vmask(:,:,jk) ) 304 END DO 305 ! 271 306 DO jk = 1, jpkm1 272 307 DO jj = 1, jpj … … 319 354 ! 320 355 IF(.NOT.ln_linssh ) THEN 321 hu_b(:,:) = e3u_b(:,:,1) * umask(:,:,1) 322 hv_b(:,:) = e3v_b(:,:,1) * vmask(:,:,1) 323 DO jk = 2, jpkm1 324 hu_b(:,:) = hu_b(:,:) + e3u_b(:,:,jk) * umask(:,:,jk) 325 hv_b(:,:) = hv_b(:,:) + e3v_b(:,:,jk) * vmask(:,:,jk) 326 END DO 327 r1_hu_b(:,:) = ssumask(:,:) / ( hu_b(:,:) + 1._wp - ssumask(:,:) ) 356 DO jj = 2, jpjm1 ; DO ji = 2, jpim1 357 zsshu(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji+1,jj ) ) * ssumask(ji,jj) 358 zsshv(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji ,jj+1) ) * ssvmask(ji,jj) 359 END DO ; END DO 360 CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp ) 361 ! 362 hu_b (:,:) = hu_0(:,:) + zsshu(:,:) 363 hv_b (:,:) = hv_0(:,:) + zsshv(:,:) 364 r1_hu_b(:,:) = ssumask(:,:) / ( hu_b(:,:) + 1._wp - ssumask(:,:) ) ! _i mask due to ISF 328 365 r1_hv_b(:,:) = ssvmask(:,:) / ( hv_b(:,:) + 1._wp - ssvmask(:,:) ) 329 366 ENDIF 330 367 ! 368 ! ! 331 369 un_b(:,:) = e3u_a(:,:,1) * un(:,:,1) * umask(:,:,1) 332 370 ub_b(:,:) = e3u_b(:,:,1) * ub(:,:,1) * umask(:,:,1)
Note: See TracChangeset
for help on using the changeset viewer.