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 13540 for NEMO/branches/2020/r12377_ticket2386/src/OCE/DYN/dynspg_ts.F90 – NEMO

Ignore:
Timestamp:
2020-09-29T12:41:06+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2386: update to latest trunk

Location:
NEMO/branches/2020/r12377_ticket2386
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/r12377_ticket2386

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
        88 
        99# SETTE 
        10 ^/utils/CI/sette@HEAD         sette 
         10^/utils/CI/sette@13507        sette 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/DYN/dynspg_ts.F90

    r12511 r13540  
    8787   !! * Substitutions 
    8888#  include "do_loop_substitute.h90" 
     89#  include "domzgr_substitute.h90" 
    8990   !!---------------------------------------------------------------------- 
    9091   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    161162      REAL(wp), DIMENSION(jpi,jpj) :: zCdU_u, zCdU_v   ! top/bottom stress at u- & v-points 
    162163      REAL(wp), DIMENSION(jpi,jpj) :: zhU, zhV         ! fluxes 
     164      REAL(wp), DIMENSION(jpi, jpj, jpk) :: ze3u, ze3v 
    163165      ! 
    164166      REAL(wp) ::   zwdramp                     ! local scalar - only used if ln_wd_dl = .True.  
     
    227229      !                                   !=  zu_frc =  1/H e3*d/dt(Ua)  =!  (Vertical mean of Ua, the 3D trends) 
    228230      !                                   !  ---------------------------  ! 
    229       zu_frc(:,:) = SUM( e3u(:,:,:,Kmm) * uu(:,:,:,Krhs) * umask(:,:,:) , DIM=3 ) * r1_hu(:,:,Kmm) 
    230       zv_frc(:,:) = SUM( e3v(:,:,:,Kmm) * vv(:,:,:,Krhs) * vmask(:,:,:) , DIM=3 ) * r1_hv(:,:,Kmm) 
     231      DO jk = 1 , jpk 
     232         ze3u(:,:,jk) = e3u(:,:,jk,Kmm) 
     233         ze3v(:,:,jk) = e3v(:,:,jk,Kmm) 
     234      END DO 
     235      ! 
     236      zu_frc(:,:) = SUM( ze3u(:,:,:) * uu(:,:,:,Krhs) * umask(:,:,:) , DIM=3 ) * r1_hu(:,:,Kmm) 
     237      zv_frc(:,:) = SUM( ze3v(:,:,:) * vv(:,:,:,Krhs) * vmask(:,:,:) , DIM=3 ) * r1_hv(:,:,Kmm) 
    231238      ! 
    232239      ! 
     
    250257      zhV(:,:) = pvv_b(:,:,Kmm) * hv(:,:,Kmm) * e1v(:,:)        ! NB: FULL domain : put a value in last row and column 
    251258      ! 
    252       CALL dyn_cor_2d( hu(:,:,Kmm), hv(:,:,Kmm), puu_b(:,:,Kmm), pvv_b(:,:,Kmm), zhU, zhV,  &   ! <<== in 
     259      CALL dyn_cor_2d( ht(:,:), hu(:,:,Kmm), hv(:,:,Kmm), puu_b(:,:,Kmm), pvv_b(:,:,Kmm), zhU, zhV,  &   ! <<== in 
    253260         &                                                                     zu_trd, zv_trd   )   ! ==>> out 
    254261      ! 
     
    257264         IF( ln_wd_il ) THEN                       ! W/D : limiter applied to spgspg 
    258265            CALL wad_spg( pssh(:,:,Kmm), zcpx, zcpy )          ! Calculating W/D gravity filters, zcpx and zcpy 
    259             DO_2D_00_00 
     266            DO_2D( 0, 0, 0, 0 )                                ! SPG with the application of W/D gravity filters 
    260267               zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( pssh(ji+1,jj  ,Kmm) - pssh(ji  ,jj ,Kmm) )   & 
    261268                  &                          * r1_e1u(ji,jj) * zcpx(ji,jj)  * wdrampu(ji,jj)  !jth 
     
    264271            END_2D 
    265272         ELSE                                      ! now suface pressure gradient 
    266             DO_2D_00_00 
     273            DO_2D( 0, 0, 0, 0 ) 
    267274               zu_trd(ji,jj) = zu_trd(ji,jj) - grav * (  pssh(ji+1,jj  ,Kmm) - pssh(ji  ,jj  ,Kmm)  ) * r1_e1u(ji,jj) 
    268275               zv_trd(ji,jj) = zv_trd(ji,jj) - grav * (  pssh(ji  ,jj+1,Kmm) - pssh(ji  ,jj  ,Kmm)  ) * r1_e2v(ji,jj)  
     
    272279      ENDIF 
    273280      ! 
    274       DO_2D_00_00 
     281      DO_2D( 0, 0, 0, 0 )                          ! Remove coriolis term (and possibly spg) from barotropic trend 
    275282          zu_frc(ji,jj) = zu_frc(ji,jj) - zu_trd(ji,jj) * ssumask(ji,jj) 
    276283          zv_frc(ji,jj) = zv_frc(ji,jj) - zv_trd(ji,jj) * ssvmask(ji,jj) 
     
    284291      IF( ln_apr_dyn ) THEN 
    285292         IF( ln_bt_fw ) THEN                          ! FORWARD integration: use kt+1/2 pressure (NOW+1/2) 
    286             DO_2D_00_00 
     293            DO_2D( 0, 0, 0, 0 ) 
    287294               zu_frc(ji,jj) = zu_frc(ji,jj) + grav * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj) ) * r1_e1u(ji,jj) 
    288295               zv_frc(ji,jj) = zv_frc(ji,jj) + grav * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj) ) * r1_e2v(ji,jj) 
     
    290297         ELSE                                         ! CENTRED integration: use kt-1/2 + kt+1/2 pressure (NOW) 
    291298            zztmp = grav * r1_2 
    292             DO_2D_00_00 
     299            DO_2D( 0, 0, 0, 0 ) 
    293300               zu_frc(ji,jj) = zu_frc(ji,jj) + zztmp * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj)  & 
    294301                    &                                   + ssh_ibb(ji+1,jj  ) - ssh_ibb(ji,jj)  ) * r1_e1u(ji,jj) 
     
    302309      !                                   !  ----------------------------------  ! 
    303310      IF( ln_bt_fw ) THEN                        ! Add wind forcing 
    304          DO_2D_00_00 
     311         DO_2D( 0, 0, 0, 0 ) 
    305312            zu_frc(ji,jj) =  zu_frc(ji,jj) + r1_rho0 * utau(ji,jj) * r1_hu(ji,jj,Kmm) 
    306313            zv_frc(ji,jj) =  zv_frc(ji,jj) + r1_rho0 * vtau(ji,jj) * r1_hv(ji,jj,Kmm) 
     
    308315      ELSE 
    309316         zztmp = r1_rho0 * r1_2 
    310          DO_2D_00_00 
     317         DO_2D( 0, 0, 0, 0 ) 
    311318            zu_frc(ji,jj) =  zu_frc(ji,jj) + zztmp * ( utau_b(ji,jj) + utau(ji,jj) ) * r1_hu(ji,jj,Kmm) 
    312319            zv_frc(ji,jj) =  zv_frc(ji,jj) + zztmp * ( vtau_b(ji,jj) + vtau(ji,jj) ) * r1_hv(ji,jj,Kmm) 
     
    468475            ! 
    469476            !                          ! ocean u- and v-depth at mid-step   (separate DO-loops remove the need of a lbc_lnk) 
    470             DO_2D_11_10 
     477            DO_2D( 1, 1, 1, 0 )   ! not jpi-column 
    471478               zhup2_e(ji,jj) = hu_0(ji,jj) + r1_2 * r1_e1e2u(ji,jj)                        & 
    472479                    &                              * (  e1e2t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
    473480                    &                                 + e1e2t(ji+1,jj) * zsshp2_e(ji+1,jj)  ) * ssumask(ji,jj) 
    474481            END_2D 
    475             DO_2D_10_11 
     482            DO_2D( 1, 0, 1, 1 )   ! not jpj-row 
    476483               zhvp2_e(ji,jj) = hv_0(ji,jj) + r1_2 * r1_e1e2v(ji,jj)                        & 
    477484                    &                              * (  e1e2t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
     
    508515         !--        ssh    =  ssh   - delta_t' * [ frc + div( flux      ) ]      --! 
    509516         !-------------------------------------------------------------------------! 
    510          DO_2D_00_00 
     517         DO_2D( 0, 0, 0, 0 ) 
    511518            zhdiv = (   zhU(ji,jj) - zhU(ji-1,jj) + zhV(ji,jj) - zhV(ji,jj-1)   ) * r1_e1e2t(ji,jj) 
    512519            ssha_e(ji,jj) = (  sshn_e(ji,jj) - rDt_e * ( zssh_frc(ji,jj) + zhdiv )  ) * ssmask(ji,jj) 
     
    514521         ! 
    515522         CALL lbc_lnk_multi( 'dynspg_ts', ssha_e, 'T', 1._wp,  zhU, 'U', -1._wp,  zhV, 'V', -1._wp ) 
     523         ! 
     524         ! Duplicate sea level across open boundaries (this is only cosmetic if linssh=T) 
     525         IF( ln_bdy )   CALL bdy_ssh( ssha_e ) 
     526#if defined key_agrif 
     527         IF( .NOT.Agrif_Root() )   CALL agrif_ssh_ts( jn ) 
     528#endif 
    516529         ! 
    517530         !                             ! Sum over sub-time-steps to compute advective velocities 
     
    525538         END IF 
    526539         ! 
    527          ! Duplicate sea level across open boundaries (this is only cosmetic if linssh=T) 
    528          IF( ln_bdy )   CALL bdy_ssh( ssha_e ) 
    529 #if defined key_agrif 
    530          IF( .NOT.Agrif_Root() )   CALL agrif_ssh_ts( jn ) 
    531 #endif 
    532540         !   
    533541         ! Sea Surface Height at u-,v-points (vvl case only) 
    534542         IF( .NOT.ln_linssh ) THEN                                 
    535             DO_2D_00_00 
     543            DO_2D( 0, 0, 0, 0 ) 
    536544               zsshu_a(ji,jj) = r1_2 * ssumask(ji,jj) * r1_e1e2u(ji,jj)    & 
    537545                  &              * ( e1e2t(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
     
    553561         !                             ! Surface pressure gradient 
    554562         zldg = ( 1._wp - rn_scal_load ) * grav    ! local factor 
    555          DO_2D_00_00 
     563         DO_2D( 0, 0, 0, 0 ) 
    556564            zu_spg(ji,jj) = - zldg * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u(ji,jj) 
    557565            zv_spg(ji,jj) = - zldg * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) * r1_e2v(ji,jj) 
     
    567575         ! at each time step. We however keep them constant here for optimization. 
    568576         ! Recall that zhU and zhV hold fluxes at jn+0.5 (extrapolated not backward interpolated) 
    569          CALL dyn_cor_2d( zhup2_e, zhvp2_e, ua_e, va_e, zhU, zhV,    zu_trd, zv_trd   ) 
     577         CALL dyn_cor_2d( zhtp2_e, zhup2_e, zhvp2_e, ua_e, va_e, zhU, zhV,    zu_trd, zv_trd   ) 
    570578         ! 
    571579         ! Add tidal astronomical forcing if defined 
    572580         IF ( ln_tide .AND. ln_tide_pot ) THEN 
    573             DO_2D_00_00 
     581            DO_2D( 0, 0, 0, 0 ) 
    574582               zu_trd(ji,jj) = zu_trd(ji,jj) + grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) * r1_e1u(ji,jj) 
    575583               zv_trd(ji,jj) = zv_trd(ji,jj) + grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) * r1_e2v(ji,jj) 
     
    580588!jth do implicitly instead 
    581589         IF ( .NOT. ll_wd ) THEN ! Revert to explicit for bit comparison tests in non wad runs 
    582             DO_2D_00_00 
     590            DO_2D( 0, 0, 0, 0 ) 
    583591               zu_trd(ji,jj) = zu_trd(ji,jj) + zCdU_u(ji,jj) * un_e(ji,jj) * hur_e(ji,jj) 
    584592               zv_trd(ji,jj) = zv_trd(ji,jj) + zCdU_v(ji,jj) * vn_e(ji,jj) * hvr_e(ji,jj) 
     
    598606         !------------------------------------------------------------------------------------------------------------------------! 
    599607         IF( ln_dynadv_vec .OR. ln_linssh ) THEN      !* Vector form 
    600             DO_2D_00_00 
     608            DO_2D( 0, 0, 0, 0 ) 
    601609               ua_e(ji,jj) = (                                 un_e(ji,jj)   &  
    602610                         &     + rDt_e * (                   zu_spg(ji,jj)   & 
     
    613621            ! 
    614622         ELSE                           !* Flux form 
    615             DO_2D_00_00 
     623            DO_2D( 0, 0, 0, 0 ) 
    616624               !                    ! hu_e, hv_e hold depth at jn,  zhup2_e, zhvp2_e hold extrapolated depth at jn+1/2 
    617625               !                    ! backward interpolated depth used in spg terms at jn+1/2 
     
    637645!jth implicit bottom friction: 
    638646         IF ( ll_wd ) THEN ! revert to explicit for bit comparison tests in non wad runs 
    639             DO_2D_00_00 
     647            DO_2D( 0, 0, 0, 0 ) 
    640648                  ua_e(ji,jj) =  ua_e(ji,jj) /(1.0 -   rDt_e * zCdU_u(ji,jj) * hur_e(ji,jj)) 
    641649                  va_e(ji,jj) =  va_e(ji,jj) /(1.0 -   rDt_e * zCdU_v(ji,jj) * hvr_e(ji,jj)) 
     
    643651         ENDIF 
    644652        
    645          IF( .NOT.ln_linssh ) THEN   !* Update ocean depth (variable volume case only) 
     653         IF( .NOT.ln_linssh ) THEN !* Update ocean depth (variable volume case only) 
    646654            hu_e (2:jpim1,2:jpjm1) = hu_0(2:jpim1,2:jpjm1) + zsshu_a(2:jpim1,2:jpjm1) 
    647655            hur_e(2:jpim1,2:jpjm1) = ssumask(2:jpim1,2:jpjm1) / ( hu_e(2:jpim1,2:jpjm1) + 1._wp - ssumask(2:jpim1,2:jpjm1) ) 
    648656            hv_e (2:jpim1,2:jpjm1) = hv_0(2:jpim1,2:jpjm1) + zsshv_a(2:jpim1,2:jpjm1) 
    649657            hvr_e(2:jpim1,2:jpjm1) = ssvmask(2:jpim1,2:jpjm1) / ( hv_e(2:jpim1,2:jpjm1) + 1._wp - ssvmask(2:jpim1,2:jpjm1) ) 
     658         ENDIF 
     659         ! 
     660         IF( .NOT.ln_linssh ) THEN   !* Update ocean depth (variable volume case only) 
    650661            CALL lbc_lnk_multi( 'dynspg_ts', ua_e , 'U', -1._wp, va_e , 'V', -1._wp  & 
    651662                 &                         , hu_e , 'U',  1._wp, hv_e , 'V',  1._wp  & 
     
    654665            CALL lbc_lnk_multi( 'dynspg_ts', ua_e , 'U', -1._wp, va_e , 'V', -1._wp  ) 
    655666         ENDIF 
    656          ! 
    657          ! 
    658667         !                                                 ! open boundaries 
    659668         IF( ln_bdy )   CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e ) 
     
    703712      IF (ln_bt_fw) THEN 
    704713         IF( .NOT.( kt == nit000 .AND. l_1st_euler ) ) THEN 
    705             DO_2D_11_11 
     714            DO_2D( 1, 1, 1, 1 ) 
    706715               zun_save = un_adv(ji,jj) 
    707716               zvn_save = vn_adv(ji,jj) 
     
    734743      ELSE 
    735744         ! At this stage, pssh(:,:,:,Krhs) has been corrected: compute new depths at velocity points 
    736          DO_2D_10_10 
     745         DO_2D( 1, 0, 1, 0 ) 
    737746            zsshu_a(ji,jj) = r1_2 * ssumask(ji,jj)  * r1_e1e2u(ji,jj) & 
    738747               &              * ( e1e2t(ji  ,jj) * pssh(ji  ,jj,Kaa)      & 
     
    891900         !                                   ! --------------- 
    892901         IF( ln_rstart .AND. ln_bt_fw .AND. (.NOT.l_1st_euler) ) THEN    !* Read the restart file 
    893             CALL iom_get( numror, jpdom_autoglo, 'ub2_b'  , ub2_b  (:,:), ldxios = lrxios )    
    894             CALL iom_get( numror, jpdom_autoglo, 'vb2_b'  , vb2_b  (:,:), ldxios = lrxios )  
    895             CALL iom_get( numror, jpdom_autoglo, 'un_bf'  , un_bf  (:,:), ldxios = lrxios )    
    896             CALL iom_get( numror, jpdom_autoglo, 'vn_bf'  , vn_bf  (:,:), ldxios = lrxios )  
     902            CALL iom_get( numror, jpdom_auto, 'ub2_b'  , ub2_b  (:,:), cd_type = 'U', psgn = -1._wp, ldxios = lrxios )    
     903            CALL iom_get( numror, jpdom_auto, 'vb2_b'  , vb2_b  (:,:), cd_type = 'V', psgn = -1._wp, ldxios = lrxios )  
     904            CALL iom_get( numror, jpdom_auto, 'un_bf'  , un_bf  (:,:), cd_type = 'U', psgn = -1._wp, ldxios = lrxios )    
     905            CALL iom_get( numror, jpdom_auto, 'vn_bf'  , vn_bf  (:,:), cd_type = 'V', psgn = -1._wp, ldxios = lrxios )  
    897906            IF( .NOT.ln_bt_av ) THEN 
    898                CALL iom_get( numror, jpdom_autoglo, 'sshbb_e'  , sshbb_e(:,:), ldxios = lrxios )    
    899                CALL iom_get( numror, jpdom_autoglo, 'ubb_e'    ,   ubb_e(:,:), ldxios = lrxios )    
    900                CALL iom_get( numror, jpdom_autoglo, 'vbb_e'    ,   vbb_e(:,:), ldxios = lrxios ) 
    901                CALL iom_get( numror, jpdom_autoglo, 'sshb_e'   ,  sshb_e(:,:), ldxios = lrxios )  
    902                CALL iom_get( numror, jpdom_autoglo, 'ub_e'     ,    ub_e(:,:), ldxios = lrxios )    
    903                CALL iom_get( numror, jpdom_autoglo, 'vb_e'     ,    vb_e(:,:), ldxios = lrxios ) 
     907               CALL iom_get( numror, jpdom_auto, 'sshbb_e'  , sshbb_e(:,:), cd_type = 'T', psgn =  1._wp, ldxios = lrxios )    
     908               CALL iom_get( numror, jpdom_auto, 'ubb_e'    ,   ubb_e(:,:), cd_type = 'U', psgn = -1._wp, ldxios = lrxios )    
     909               CALL iom_get( numror, jpdom_auto, 'vbb_e'    ,   vbb_e(:,:), cd_type = 'V', psgn = -1._wp, ldxios = lrxios ) 
     910               CALL iom_get( numror, jpdom_auto, 'sshb_e'   ,  sshb_e(:,:), cd_type = 'T', psgn =  1._wp, ldxios = lrxios )  
     911               CALL iom_get( numror, jpdom_auto, 'ub_e'     ,    ub_e(:,:), cd_type = 'U', psgn = -1._wp, ldxios = lrxios )    
     912               CALL iom_get( numror, jpdom_auto, 'vb_e'     ,    vb_e(:,:), cd_type = 'V', psgn = -1._wp, ldxios = lrxios ) 
    904913            ENDIF 
    905914#if defined key_agrif 
    906915            ! Read time integrated fluxes 
    907916            IF ( .NOT.Agrif_Root() ) THEN 
    908                CALL iom_get( numror, jpdom_autoglo, 'ub2_i_b'  , ub2_i_b(:,:), ldxios = lrxios )    
    909                CALL iom_get( numror, jpdom_autoglo, 'vb2_i_b'  , vb2_i_b(:,:), ldxios = lrxios ) 
     917               CALL iom_get( numror, jpdom_auto, 'ub2_i_b'  , ub2_i_b(:,:), cd_type = 'U', psgn = -1._wp, ldxios = lrxios )    
     918               CALL iom_get( numror, jpdom_auto, 'vb2_i_b'  , vb2_i_b(:,:), cd_type = 'V', psgn = -1._wp, ldxios = lrxios ) 
    910919            ENDIF 
    911920#endif 
     
    966975      ! Max courant number for ext. grav. waves 
    967976      ! 
    968       DO_2D_11_11 
     977      DO_2D( 0, 0, 0, 0 ) 
    969978         zxr2 = r1_e1t(ji,jj) * r1_e1t(ji,jj) 
    970979         zyr2 = r1_e2t(ji,jj) * r1_e2t(ji,jj) 
     
    972981      END_2D 
    973982      ! 
    974       zcmax = MAXVAL( zcu(:,:) ) 
     983      zcmax = MAXVAL( zcu(Nis0:Nie0,Njs0:Nje0) ) 
    975984      CALL mpp_max( 'dynspg_ts', zcmax ) 
    976985 
     
    10881097      ! 
    10891098      SELECT CASE( nvor_scheme ) 
    1090       CASE( np_EEN )                != EEN scheme using e3f (energy & enstrophy scheme) 
     1099      CASE( np_EEN )                != EEN scheme using e3f energy & enstrophy scheme 
    10911100         SELECT CASE( nn_een_e3f )              !* ff_f/e3 at F-point 
    10921101         CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
    1093             DO_2D_10_10 
     1102            DO_2D( 1, 0, 1, 0 ) 
    10941103               zwz(ji,jj) =   ( ht(ji  ,jj+1) + ht(ji+1,jj+1) +                    & 
    10951104                    &           ht(ji  ,jj  ) + ht(ji+1,jj  )   ) * 0.25_wp   
     
    10971106            END_2D 
    10981107         CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
    1099             DO_2D_10_10 
     1108            DO_2D( 1, 0, 1, 0 ) 
    11001109               zwz(ji,jj) =             (  ht  (ji  ,jj+1) + ht  (ji+1,jj+1)      & 
    11011110                    &                    + ht  (ji  ,jj  ) + ht  (ji+1,jj  )  )   & 
     
    11081117         ! 
    11091118         ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    1110          DO_2D_01_01 
     1119         DO_2D( 0, 1, 0, 1 ) 
    11111120            ftne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
    11121121            ftnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) 
     
    11151124         END_2D 
    11161125         ! 
    1117       CASE( np_EET )                  != EEN scheme using e3t (energy conserving scheme) 
     1126      CASE( np_EET )                  != EEN scheme using e3t energy conserving scheme 
    11181127         ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    1119          DO_2D_01_01 
     1128         DO_2D( 0, 1, 0, 1 ) 
    11201129            z1_ht = ssmask(ji,jj) / ( ht(ji,jj) + 1._wp - ssmask(ji,jj) ) 
    11211130            ftne(ji,jj) = ( ff_f(ji-1,jj  ) + ff_f(ji  ,jj  ) + ff_f(ji  ,jj-1) ) * z1_ht 
     
    11501159            ! 
    11511160            !zhf(:,:) = hbatf(:,:) 
    1152             DO_2D_10_10 
     1161            DO_2D( 1, 0, 1, 0 ) 
    11531162               zhf(ji,jj) =    (   ht_0  (ji,jj  ) + ht_0  (ji+1,jj  )          & 
    11541163                    &            + ht_0  (ji,jj+1) + ht_0  (ji+1,jj+1)   )      & 
     
    11691178         CALL lbc_lnk( 'dynspg_ts', zhf, 'F', 1._wp ) 
    11701179         ! JC: TBC. hf should be greater than 0  
    1171          DO_2D_11_11 
     1180         DO_2D( 1, 1, 1, 1 ) 
    11721181            IF( zhf(ji,jj) /= 0._wp )   zwz(ji,jj) = 1._wp / zhf(ji,jj) 
    11731182         END_2D 
     
    11791188 
    11801189 
    1181    SUBROUTINE dyn_cor_2d( phu, phv, punb, pvnb, zhU, zhV,    zu_trd, zv_trd   ) 
     1190   SUBROUTINE dyn_cor_2d( pht, phu, phv, punb, pvnb, zhU, zhV,    zu_trd, zv_trd   ) 
    11821191      !!--------------------------------------------------------------------- 
    11831192      !!                   ***  ROUTINE dyn_cor_2d  *** 
     
    11871196      INTEGER  ::   ji ,jj                             ! dummy loop indices 
    11881197      REAL(wp) ::   zx1, zx2, zy1, zy2, z1_hu, z1_hv   !   -      - 
    1189       REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: phu, phv, punb, pvnb, zhU, zhV 
     1198      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: pht, phu, phv, punb, pvnb, zhU, zhV 
    11901199      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: zu_trd, zv_trd 
    11911200      !!---------------------------------------------------------------------- 
    11921201      SELECT CASE( nvor_scheme ) 
    11931202      CASE( np_ENT )                ! enstrophy conserving scheme (f-point) 
    1194          DO_2D_00_00 
     1203         DO_2D( 0, 0, 0, 0 ) 
    11951204            z1_hu = ssumask(ji,jj) / ( phu(ji,jj) + 1._wp - ssumask(ji,jj) ) 
    11961205            z1_hv = ssvmask(ji,jj) / ( phv(ji,jj) + 1._wp - ssvmask(ji,jj) ) 
    11971206            zu_trd(ji,jj) = + r1_4 * r1_e1e2u(ji,jj) * z1_hu                    & 
    1198                &               * (  e1e2t(ji+1,jj)*ht(ji+1,jj)*ff_t(ji+1,jj) * ( pvnb(ji+1,jj) + pvnb(ji+1,jj-1) )   & 
    1199                &                  + e1e2t(ji  ,jj)*ht(ji  ,jj)*ff_t(ji  ,jj) * ( pvnb(ji  ,jj) + pvnb(ji  ,jj-1) )   ) 
     1207               &               * (  e1e2t(ji+1,jj)*pht(ji+1,jj)*ff_t(ji+1,jj) * ( pvnb(ji+1,jj) + pvnb(ji+1,jj-1) )   & 
     1208               &                  + e1e2t(ji  ,jj)*pht(ji  ,jj)*ff_t(ji  ,jj) * ( pvnb(ji  ,jj) + pvnb(ji  ,jj-1) )   ) 
    12001209               ! 
    12011210            zv_trd(ji,jj) = - r1_4 * r1_e1e2v(ji,jj) * z1_hv                    & 
    1202                &               * (  e1e2t(ji,jj+1)*ht(ji,jj+1)*ff_t(ji,jj+1) * ( punb(ji,jj+1) + punb(ji-1,jj+1) )   &  
    1203                &                  + e1e2t(ji,jj  )*ht(ji,jj  )*ff_t(ji,jj  ) * ( punb(ji,jj  ) + punb(ji-1,jj  ) )   )  
     1211               &               * (  e1e2t(ji,jj+1)*pht(ji,jj+1)*ff_t(ji,jj+1) * ( punb(ji,jj+1) + punb(ji-1,jj+1) )   &  
     1212               &                  + e1e2t(ji,jj  )*pht(ji,jj  )*ff_t(ji,jj  ) * ( punb(ji,jj  ) + punb(ji-1,jj  ) )   )  
    12041213         END_2D 
    12051214         !          
    12061215      CASE( np_ENE , np_MIX )        ! energy conserving scheme (t-point) ENE or MIX 
    1207          DO_2D_00_00 
     1216         DO_2D( 0, 0, 0, 0 ) 
    12081217            zy1 = ( zhV(ji,jj-1) + zhV(ji+1,jj-1) ) * r1_e1u(ji,jj) 
    12091218            zy2 = ( zhV(ji,jj  ) + zhV(ji+1,jj  ) ) * r1_e1u(ji,jj) 
     
    12161225         ! 
    12171226      CASE( np_ENS )                ! enstrophy conserving scheme (f-point) 
    1218          DO_2D_00_00 
     1227         DO_2D( 0, 0, 0, 0 ) 
    12191228            zy1 =   r1_8 * ( zhV(ji  ,jj-1) + zhV(ji+1,jj-1) & 
    12201229              &            + zhV(ji  ,jj  ) + zhV(ji+1,jj  ) ) * r1_e1u(ji,jj) 
     
    12261235         ! 
    12271236      CASE( np_EET , np_EEN )      ! energy & enstrophy scheme (using e3t or e3f)          
    1228          DO_2D_00_00 
     1237         DO_2D( 0, 0, 0, 0 ) 
    12291238            zu_trd(ji,jj) = + r1_12 * r1_e1u(ji,jj) * (  ftne(ji,jj  ) * zhV(ji  ,jj  ) & 
    12301239             &                                         + ftnw(ji+1,jj) * zhV(ji+1,jj  ) & 
     
    12601269      ! 
    12611270      IF( ln_wd_dl_rmp ) THEN      
    1262          DO_2D_11_11 
     1271         DO_2D( 1, 1, 1, 1 ) 
    12631272            IF    ( pssh(ji,jj) + ht_0(ji,jj) >  2._wp * rn_wdmin1 ) THEN  
    12641273               !           IF    ( pssh(ji,jj) + ht_0(ji,jj) >          rn_wdmin2 ) THEN  
     
    12711280         END_2D 
    12721281      ELSE   
    1273          DO_2D_11_11 
     1282         DO_2D( 1, 1, 1, 1 ) 
    12741283            IF ( pssh(ji,jj) + ht_0(ji,jj) >  rn_wdmin1 ) THEN   ;   ptmsk(ji,jj) = 1._wp 
    12751284            ELSE                                                 ;   ptmsk(ji,jj) = 0._wp 
     
    12991308      !!---------------------------------------------------------------------- 
    13001309      ! 
    1301       DO_2D_11_10 
     1310      DO_2D( 1, 1, 1, 0 )   ! not jpi-column 
    13021311         IF ( phU(ji,jj) > 0._wp ) THEN   ;   pUmsk(ji,jj) = pTmsk(ji  ,jj)  
    13031312         ELSE                             ;   pUmsk(ji,jj) = pTmsk(ji+1,jj)   
     
    13071316      END_2D 
    13081317      ! 
    1309       DO_2D_10_11 
     1318      DO_2D( 1, 0, 1, 1 )   ! not jpj-row 
    13101319         IF ( phV(ji,jj) > 0._wp ) THEN   ;   pVmsk(ji,jj) = pTmsk(ji,jj  ) 
    13111320         ELSE                             ;   pVmsk(ji,jj) = pTmsk(ji,jj+1)   
     
    13291338      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: zcpx, zcpy 
    13301339      !!---------------------------------------------------------------------- 
    1331       DO_2D_00_00 
     1340      DO_2D( 0, 0, 0, 0 ) 
    13321341         ll_tmp1 = MIN(  pshn(ji,jj)               ,  pshn(ji+1,jj) ) >                & 
    13331342              &      MAX( -ht_0(ji,jj)               , -ht_0(ji+1,jj) ) .AND.            & 
     
    13961405      !                    !==  Set the barotropic drag coef.  ==! 
    13971406      ! 
    1398       IF( ln_isfcav ) THEN          ! top+bottom friction (ocean cavities) 
     1407      IF( ln_isfcav.OR.ln_drgice_imp ) THEN          ! top+bottom friction (ocean cavities) 
    13991408          
    1400          DO_2D_00_00 
     1409         DO_2D( 0, 0, 0, 0 ) 
    14011410            pCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) + rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) 
    14021411            pCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) + rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) 
    14031412         END_2D 
    14041413      ELSE                          ! bottom friction only 
    1405          DO_2D_00_00 
     1414         DO_2D( 0, 0, 0, 0 ) 
    14061415            pCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) 
    14071416            pCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) 
     
    14131422      IF( ln_bt_fw ) THEN                 ! FORWARD integration: use NOW bottom baroclinic velocities 
    14141423          
    1415          DO_2D_00_00 
     1424         DO_2D( 0, 0, 0, 0 ) 
    14161425            ikbu = mbku(ji,jj)        
    14171426            ikbv = mbkv(ji,jj)     
     
    14211430      ELSE                                ! CENTRED integration: use BEFORE bottom baroclinic velocities 
    14221431          
    1423          DO_2D_00_00 
     1432         DO_2D( 0, 0, 0, 0 ) 
    14241433            ikbu = mbku(ji,jj)        
    14251434            ikbv = mbkv(ji,jj)     
     
    14311440      IF( ln_wd_il ) THEN      ! W/D : use the "clipped" bottom friction   !!gm   explain WHY, please ! 
    14321441         zztmp = -1._wp / rDt_e 
    1433          DO_2D_00_00 
     1442         DO_2D( 0, 0, 0, 0 ) 
    14341443            pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + zu_i(ji,jj) *  wdrampu(ji,jj) * MAX(                                 &  
    14351444                 &                              r1_hu(ji,jj,Kmm) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) , zztmp  ) 
     
    14391448      ELSE                    ! use "unclipped" drag (even if explicit friction is used in 3D calculation) 
    14401449          
    1441          DO_2D_00_00 
     1450         DO_2D( 0, 0, 0, 0 ) 
    14421451            pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + r1_hu(ji,jj,Kmm) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * zu_i(ji,jj) 
    14431452            pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + r1_hv(ji,jj,Kmm) * r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * zv_i(ji,jj) 
     
    14471456      !                    !==  TOP stress contribution from baroclinic velocities  ==!   (no W/D case) 
    14481457      ! 
    1449       IF( ln_isfcav ) THEN 
     1458      IF( ln_isfcav.OR.ln_drgice_imp ) THEN 
    14501459         ! 
    14511460         IF( ln_bt_fw ) THEN                ! FORWARD integration: use NOW top baroclinic velocity 
    14521461             
    1453             DO_2D_00_00 
     1462            DO_2D( 0, 0, 0, 0 ) 
    14541463               iktu = miku(ji,jj) 
    14551464               iktv = mikv(ji,jj) 
     
    14591468         ELSE                                ! CENTRED integration: use BEFORE top baroclinic velocity 
    14601469             
    1461             DO_2D_00_00 
     1470            DO_2D( 0, 0, 0, 0 ) 
    14621471               iktu = miku(ji,jj) 
    14631472               iktv = mikv(ji,jj) 
     
    14691478         !                    ! use "unclipped" top drag (even if explicit friction is used in 3D calculation) 
    14701479          
    1471          DO_2D_00_00 
     1480         DO_2D( 0, 0, 0, 0 ) 
    14721481            pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + r1_hu(ji,jj,Kmm) * r1_2*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * zu_i(ji,jj) 
    14731482            pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + r1_hv(ji,jj,Kmm) * r1_2*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * zv_i(ji,jj) 
Note: See TracChangeset for help on using the changeset viewer.