New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 10001 for NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynnxt.F90 – NEMO

Ignore:
Timestamp:
2018-07-26T09:50:51+02:00 (6 years ago)
Author:
gm
Message:

#1911 (ENHANCE-04): RK3 branch - step I.1 and I.2 (see wiki page)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynnxt.F90

    r9939 r10001  
    2020   !!            3.6  !  2014-04  (G. Madec) add the diagnostic of the time filter trends 
    2121   !!            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   
    2224   !!------------------------------------------------------------------------- 
    2325   
     
    3436   USE dynspg_ts      ! surface pressure gradient: split-explicit scheme 
    3537   USE domvvl         ! variable volume 
    36    USE bdy_oce   , ONLY: ln_bdy 
     38   USE bdy_oce , ONLY : ln_bdy 
    3739   USE bdydta         ! ocean open boundary conditions 
    3840   USE bdydyn         ! ocean open boundary conditions 
     
    9294      !!               un,vn   now horizontal velocity of next time-step 
    9395      !!---------------------------------------------------------------------- 
    94       INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     96      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    9597      ! 
    9698      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    100102      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zue, zve 
    101103      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ze3u_f, ze3v_f, zua, zva  
     104      REAL(wp), DIMENSION(jpi,jpj) ::   z_ssh_h0, zsshu, zsshv 
    102105      !!---------------------------------------------------------------------- 
    103106      ! 
     
    212215            !    => time filter + conservation correction (only at the first level) 
    213216            zcoef = rn_atfp * rn_Dt * r1_rho0 
    214  
     217            ! 
    215218            e3t_b(:,:,1) = e3t_b(:,:,1) - zcoef * ( emp_b(:,:) - emp(:,:) ) * tmask(:,:,1) 
    216  
     219            ! 
    217220            IF ( ln_rnf ) THEN 
    218221               IF( ln_rnf_depth ) THEN 
     
    228231                  END DO 
    229232               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) 
    231234               ENDIF 
    232235            ENDIF 
    233  
     236            ! 
    234237            IF ( ln_isf ) THEN   ! if ice shelf melting 
    235238               DO jk = 1, jpkm1 ! Deal with isf separetely, as can be through depth too 
     
    245248            ENDIF 
    246249            ! 
     250            ! 
    247251            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               ! 
    251270               DO jk = 1, jpkm1 
    252271                  DO jj = 1, jpj 
     
    266285               ! 
    267286               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               ! 
    271306               DO jk = 1, jpkm1 
    272307                  DO jj = 1, jpj 
     
    319354      ! 
    320355      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 
    328365         r1_hv_b(:,:) = ssvmask(:,:) / ( hv_b(:,:) + 1._wp - ssvmask(:,:) ) 
    329366      ENDIF 
    330367      ! 
     368      !                                   !  
    331369      un_b(:,:) = e3u_a(:,:,1) * un(:,:,1) * umask(:,:,1) 
    332370      ub_b(:,:) = e3u_b(:,:,1) * ub(:,:,1) * umask(:,:,1) 
Note: See TracChangeset for help on using the changeset viewer.