- Timestamp:
- 2015-12-16T10:25:22+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90
r5930 r6060 38 38 39 39 !! * Substitutions 40 # include "domzgr_substitute.h90"41 40 # include "vectopt_loop_substitute.h90" 42 41 !!---------------------------------------------------------------------- … … 78 77 !! prevent the appearance of spurious numerical oscillations 79 78 !! 80 !! ** Action : - update (pta) with the now advective tracer trends 81 !! - save the trends 79 !! ** Action : - update pta with the now advective tracer trends 80 !! - send trends to trdtra module for further diagnostcs (l_trdtra=T) 81 !! - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T) 82 82 !! 83 83 !! ** Reference : Leonard (1979, 1991) … … 105 105 IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) ) l_trd = .TRUE. 106 106 ! 107 ! I. Thehorizontal fluxes are computed with the QUICKEST + ULTIMATE scheme107 ! ! horizontal fluxes are computed with the QUICKEST + ULTIMATE scheme 108 108 CALL tra_adv_qck_i( kt, cdtype, p2dt, pun, ptb, ptn, pta, kjpt ) 109 109 CALL tra_adv_qck_j( kt, cdtype, p2dt, pvn, ptb, ptn, pta, kjpt ) 110 110 111 ! II. Thevertical fluxes are computed with the 2nd order centered scheme111 ! ! vertical fluxes are computed with the 2nd order centered scheme 112 112 CALL tra_adv_cen2_k( kt, cdtype, pwn, ptn, pta, kjpt ) 113 113 ! … … 170 170 DO ji = fs_2, fs_jpim1 ! vector opt. 171 171 zdir = 0.5 + SIGN( 0.5, pun(ji,jj,jk) ) ! if pun > 0 : zdir = 1 otherwise zdir = 0 172 zdx = ( zdir * e1t(ji,jj) + ( 1. - zdir ) * e1t(ji+1,jj) ) * e2u(ji,jj) * fse3u(ji,jj,jk)172 zdx = ( zdir * e1t(ji,jj) + ( 1. - zdir ) * e1t(ji+1,jj) ) * e2u(ji,jj) * e3u_n(ji,jj,jk) 173 173 zwx(ji,jj,jk) = ABS( pun(ji,jj,jk) ) * zdt / zdx ! (0<zc_cfl<1 : Courant number on x-direction) 174 174 zfc(ji,jj,jk) = zdir * ptb(ji ,jj,jk,jn) + ( 1. - zdir ) * ptb(ji+1,jj,jk,jn) ! FC in the x-direction for T … … 216 216 DO jj = 2, jpjm1 217 217 DO ji = fs_2, fs_jpim1 ! vector opt. 218 zbtr = 1. / ( e1e2t(ji,jj) * fse3t(ji,jj,jk))218 zbtr = r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 219 219 ! horizontal advective trends 220 220 ztra = - zbtr * ( zwx(ji,jj,jk) - zwx(ji-1,jj,jk) ) … … 224 224 END DO 225 225 END DO 226 ! ! trend diagnostics (contribution of upstream fluxes)226 ! ! trend diagnostics 227 227 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptn(:,:,:,jn) ) 228 228 ! … … 293 293 DO ji = fs_2, fs_jpim1 ! vector opt. 294 294 zdir = 0.5 + SIGN( 0.5, pvn(ji,jj,jk) ) ! if pun > 0 : zdir = 1 otherwise zdir = 0 295 zdx = ( zdir * e2t(ji,jj) + ( 1. - zdir ) * e2t(ji,jj+1) ) * e1v(ji,jj) * fse3v(ji,jj,jk)295 zdx = ( zdir * e2t(ji,jj) + ( 1. - zdir ) * e2t(ji,jj+1) ) * e1v(ji,jj) * e3v_n(ji,jj,jk) 296 296 zwy(ji,jj,jk) = ABS( pvn(ji,jj,jk) ) * zdt / zdx ! (0<zc_cfl<1 : Courant number on x-direction) 297 297 zfc(ji,jj,jk) = zdir * ptb(ji,jj ,jk,jn) + ( 1. - zdir ) * ptb(ji,jj+1,jk,jn) ! FC in the x-direction for T … … 340 340 DO jj = 2, jpjm1 341 341 DO ji = fs_2, fs_jpim1 ! vector opt. 342 zbtr = 1. / ( e1e2t(ji,jj) * fse3t(ji,jj,jk))342 zbtr = r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 343 343 ! horizontal advective trends 344 344 ztra = - zbtr * ( zwy(ji,jj,jk) - zwy(ji,jj-1,jk) ) … … 348 348 END DO 349 349 END DO 350 ! ! trend diagnostics (contribution of upstream fluxes)350 ! ! trend diagnostics 351 351 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptn(:,:,:,jn) ) 352 352 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) … … 381 381 CALL wrk_alloc( jpi,jpj,jpk, zwz ) 382 382 ! 383 ! ! surface & bottom values 384 IF( lk_vvl ) zwz(:,:, 1 ) = 0._wp ! set to zero one for all 385 zwz(:,:,jpk) = 0._wp ! except at the surface in linear free surface 383 zwz(:,:, 1 ) = 0._wp ! surface & bottom values set to zero for all tracers 384 zwz(:,:,jpk) = 0._wp 386 385 ! 387 386 ! ! =========== … … 396 395 END DO 397 396 END DO 398 IF( .NOT.lk_vvl ) THEN!* top value (only in linear free surf. as zwz is multiplied by wmask)397 IF( ln_linssh ) THEN !* top value (only in linear free surf. as zwz is multiplied by wmask) 399 398 IF( ln_isfcav ) THEN ! ice-shelf cavities (top of the ocean) 400 399 DO jj = 1, jpj … … 403 402 END DO 404 403 END DO 405 ELSE ! no ice-shelfcavities (only ocean surface)404 ELSE ! no ocean cavities (only ocean surface) 406 405 zwz(:,:,1) = pwn(:,:,1) * ptn(:,:,1,jn) 407 406 ENDIF … … 412 411 DO ji = fs_2, fs_jpim1 ! vector opt. 413 412 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) - ( zwz(ji,jj,jk) - zwz(ji,jj,jk+1) ) & 414 & / ( e1e2t(ji,jj) * fse3t(ji,jj,jk))415 END DO 416 END DO 417 END DO 418 ! ! S ave the vertical advectivetrends for diagnostic413 & * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 414 END DO 415 END DO 416 END DO 417 ! ! Send trends for diagnostic 419 418 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pwn, ptn(:,:,:,jn) ) 420 419 ! 421 420 END DO 422 421 ! 423 CALL wrk_dealloc( jpi, jpj, jpk,zwz )422 CALL wrk_dealloc( jpi,jpj,jpk, zwz ) 424 423 ! 425 424 END SUBROUTINE tra_adv_cen2_k
Note: See TracChangeset
for help on using the changeset viewer.