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 12065 for NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/DYN/dynspg_ts.F90 – NEMO

Ignore:
Timestamp:
2019-12-05T12:06:36+01:00 (4 years ago)
Author:
smueller
Message:

Synchronizing with /NEMO/trunk@12055 (ticket #2194)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/DYN/dynspg_ts.F90

    r10860 r12065  
    6363   USE diatmb          ! Top,middle,bottom output 
    6464 
     65   USE iom   ! to remove 
     66 
    6567   IMPLICIT NONE 
    6668   PRIVATE 
     
    103105      ! 
    104106      ALLOCATE( wgtbtp1(3*nn_baro), wgtbtp2(3*nn_baro), zwz(jpi,jpj), STAT=ierr(1) ) 
    105       ! 
    106107      IF( ln_dynvor_een .OR. ln_dynvor_eeT )   & 
    107          &     ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , &  
    108          &               ftsw(jpi,jpj) , ftse(jpi,jpj) , STAT=ierr(2) ) 
     108         &     ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , ftsw(jpi,jpj) , ftse(jpi,jpj), STAT=ierr(2)   ) 
    109109         ! 
    110110      ALLOCATE( un_adv(jpi,jpj), vn_adv(jpi,jpj)                    , STAT=ierr(3) ) 
     
    148148      LOGICAL  ::   ll_fw_start           ! =T : forward integration  
    149149      LOGICAL  ::   ll_init               ! =T : special startup of 2d equations 
    150       LOGICAL  ::   ll_tmp1, ll_tmp2      ! local logical variables used in W/D 
    151       INTEGER  ::   ikbu, iktu, noffset   ! local integers 
    152       INTEGER  ::   ikbv, iktv            !   -      - 
    153       REAL(wp) ::   r1_2dt_b, z2dt_bf               ! local scalars 
    154       REAL(wp) ::   zx1, zx2, zu_spg, zhura, z1_hu  !   -      - 
    155       REAL(wp) ::   zy1, zy2, zv_spg, zhvra, z1_hv  !   -      - 
     150      INTEGER  ::   noffset               ! local integers  : time offset for bdy update 
     151      REAL(wp) ::   r1_2dt_b, z1_hu, z1_hv          ! local scalars 
    156152      REAL(wp) ::   za0, za1, za2, za3              !   -      - 
    157       REAL(wp) ::   zmdi, zztmp            , z1_ht  !   -      - 
    158       REAL(wp), DIMENSION(jpi,jpj) :: zsshp2_e, zhf 
    159       REAL(wp), DIMENSION(jpi,jpj) :: zwx, zu_trd, zu_frc, zssh_frc 
    160       REAL(wp), DIMENSION(jpi,jpj) :: zwy, zv_trd, zv_frc, zhdiv 
    161       REAL(wp), DIMENSION(jpi,jpj) :: zsshu_a, zhup2_e, zhust_e, zhtp2_e 
    162       REAL(wp), DIMENSION(jpi,jpj) :: zsshv_a, zhvp2_e, zhvst_e 
     153      REAL(wp) ::   zmdi, zztmp, zldg               !   -      - 
     154      REAL(wp) ::   zhu_bck, zhv_bck, zhdiv         !   -      - 
     155      REAL(wp) ::   zun_save, zvn_save              !   -      - 
     156      REAL(wp), DIMENSION(jpi,jpj) :: zu_trd, zu_frc, zu_spg, zssh_frc 
     157      REAL(wp), DIMENSION(jpi,jpj) :: zv_trd, zv_frc, zv_spg 
     158      REAL(wp), DIMENSION(jpi,jpj) :: zsshu_a, zhup2_e, zhtp2_e 
     159      REAL(wp), DIMENSION(jpi,jpj) :: zsshv_a, zhvp2_e, zsshp2_e 
    163160      REAL(wp), DIMENSION(jpi,jpj) :: zCdU_u, zCdU_v   ! top/bottom stress at u- & v-points 
     161      REAL(wp), DIMENSION(jpi,jpj) :: zhU, zhV         ! fluxes 
    164162      ! 
    165163      REAL(wp) ::   zwdramp                     ! local scalar - only used if ln_wd_dl = .True.  
     
    182180      zwdramp = r_rn_wdmin1               ! simplest ramp  
    183181!     zwdramp = 1._wp / (rn_wdmin2 - rn_wdmin1) ! more general ramp 
    184       !                                         ! reciprocal of baroclinic time step  
    185       IF( kt == nit000 .AND. neuler == 0 ) THEN   ;   z2dt_bf =          rdt 
    186       ELSE                                        ;   z2dt_bf = 2.0_wp * rdt 
    187       ENDIF 
    188       r1_2dt_b = 1.0_wp / z2dt_bf  
     182      !                                         ! inverse of baroclinic time step  
     183      IF( kt == nit000 .AND. neuler == 0 ) THEN   ;   r1_2dt_b = 1._wp / (         rdt ) 
     184      ELSE                                        ;   r1_2dt_b = 1._wp / ( 2._wp * rdt ) 
     185      ENDIF 
    189186      ! 
    190187      ll_init     = ln_bt_av                    ! if no time averaging, then no specific restart  
     
    210207            ll_fw_start =.FALSE. 
    211208         ENDIF 
    212          ! 
    213          ! Set averaging weights and cycle length: 
     209         !                    ! Set averaging weights and cycle length: 
    214210         CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 
    215211         ! 
    216       ENDIF 
    217       ! 
    218       IF( ln_isfcav ) THEN    ! top+bottom friction (ocean cavities) 
    219          DO jj = 2, jpjm1 
    220             DO ji = fs_2, fs_jpim1   ! vector opt. 
    221                zCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) + rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) 
    222                zCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) + rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) 
    223             END DO 
    224          END DO 
    225       ELSE                    ! bottom friction only 
    226          DO jj = 2, jpjm1 
    227             DO ji = fs_2, fs_jpim1   ! vector opt. 
    228                zCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) 
    229                zCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) 
    230             END DO 
    231          END DO 
    232       ENDIF 
    233       ! 
    234       ! Set arrays to remove/compute coriolis trend. 
    235       ! Do it once at kt=nit000 if volume is fixed, else at each long time step. 
    236       ! Note that these arrays are also used during barotropic loop. These are however frozen 
    237       ! although they should be updated in the variable volume case. Not a big approximation. 
    238       ! To remove this approximation, copy lines below inside barotropic loop 
    239       ! and update depths at T-F points (ht and zhf resp.) at each barotropic time step 
    240       ! 
    241       IF( kt == nit000 .OR. .NOT.ln_linssh ) THEN 
    242          ! 
    243          SELECT CASE( nvor_scheme ) 
    244          CASE( np_EEN )                != EEN scheme using e3f (energy & enstrophy scheme) 
    245             SELECT CASE( nn_een_e3f )              !* ff_f/e3 at F-point 
    246             CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
    247                DO jj = 1, jpjm1 
    248                   DO ji = 1, jpim1 
    249                      zwz(ji,jj) =   ( ht_n(ji  ,jj+1) + ht_n(ji+1,jj+1) +                    & 
    250                         &             ht_n(ji  ,jj  ) + ht_n(ji+1,jj  )   ) * 0.25_wp   
    251                      IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) 
    252                   END DO 
    253                END DO 
    254             CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
    255                DO jj = 1, jpjm1 
    256                   DO ji = 1, jpim1 
    257                      zwz(ji,jj) =             (  ht_n  (ji  ,jj+1) + ht_n  (ji+1,jj+1)      & 
    258                         &                      + ht_n  (ji  ,jj  ) + ht_n  (ji+1,jj  )  )   & 
    259                         &       / ( MAX( 1._wp,  ssmask(ji  ,jj+1) + ssmask(ji+1,jj+1)      & 
    260                         &                      + ssmask(ji  ,jj  ) + ssmask(ji+1,jj  )  )   ) 
    261                      IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) 
    262                   END DO 
    263                END DO 
    264             END SELECT 
    265             CALL lbc_lnk( 'dynspg_ts', zwz, 'F', 1._wp ) 
    266             ! 
    267             ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    268             DO jj = 2, jpj 
    269                DO ji = 2, jpi 
    270                   ftne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
    271                   ftnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) 
    272                   ftse(ji,jj) = zwz(ji  ,jj  ) + zwz(ji  ,jj-1) + zwz(ji-1,jj-1) 
    273                   ftsw(ji,jj) = zwz(ji  ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj  ) 
    274                END DO 
    275             END DO 
    276             ! 
    277          CASE( np_EET )                  != EEN scheme using e3t (energy conserving scheme) 
    278             ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    279             DO jj = 2, jpj 
    280                DO ji = 2, jpi 
    281                   z1_ht = ssmask(ji,jj) / ( ht_n(ji,jj) + 1._wp - ssmask(ji,jj) ) 
    282                   ftne(ji,jj) = ( ff_f(ji-1,jj  ) + ff_f(ji  ,jj  ) + ff_f(ji  ,jj-1) ) * z1_ht 
    283                   ftnw(ji,jj) = ( ff_f(ji-1,jj-1) + ff_f(ji-1,jj  ) + ff_f(ji  ,jj  ) ) * z1_ht 
    284                   ftse(ji,jj) = ( ff_f(ji  ,jj  ) + ff_f(ji  ,jj-1) + ff_f(ji-1,jj-1) ) * z1_ht 
    285                   ftsw(ji,jj) = ( ff_f(ji  ,jj-1) + ff_f(ji-1,jj-1) + ff_f(ji-1,jj  ) ) * z1_ht 
    286                END DO 
    287             END DO 
    288             ! 
    289          CASE( np_ENE, np_ENS , np_MIX )  != all other schemes (ENE, ENS, MIX) except ENT ! 
    290             ! 
    291             zwz(:,:) = 0._wp 
    292             zhf(:,:) = 0._wp 
    293              
    294 !!gm  assume 0 in both cases (which is almost surely WRONG ! ) as hvatf has been removed  
    295 !!gm    A priori a better value should be something like : 
    296 !!gm          zhf(i,j) = masked sum of  ht(i,j) , ht(i+1,j) , ht(i,j+1) , (i+1,j+1)  
    297 !!gm                     divided by the sum of the corresponding mask  
    298 !!gm  
    299 !!             
    300             IF( .NOT.ln_sco ) THEN 
    301    
    302    !!gm  agree the JC comment  : this should be done in a much clear way 
    303    
    304    ! JC: It not clear yet what should be the depth at f-points over land in z-coordinate case 
    305    !     Set it to zero for the time being  
    306    !              IF( rn_hmin < 0._wp ) THEN    ;   jk = - INT( rn_hmin )                                      ! from a nb of level 
    307    !              ELSE                          ;   jk = MINLOC( gdepw_0, mask = gdepw_0 > rn_hmin, dim = 1 )  ! from a depth 
    308    !              ENDIF 
    309    !              zhf(:,:) = gdepw_0(:,:,jk+1) 
    310                ! 
    311             ELSE 
    312                ! 
    313                !zhf(:,:) = hbatf(:,:) 
    314                DO jj = 1, jpjm1 
    315                   DO ji = 1, jpim1 
    316                      zhf(ji,jj) =    (   ht_0  (ji,jj  ) + ht_0  (ji+1,jj  )          & 
    317                         &              + ht_0  (ji,jj+1) + ht_0  (ji+1,jj+1)   )      & 
    318                         &       / MAX(   ssmask(ji,jj  ) + ssmask(ji+1,jj  )          & 
    319                         &              + ssmask(ji,jj+1) + ssmask(ji+1,jj+1) , 1._wp  ) 
    320                   END DO 
    321                END DO 
    322             ENDIF 
    323             ! 
    324             DO jj = 1, jpjm1 
    325                zhf(:,jj) = zhf(:,jj) * (1._wp- umask(:,jj,1) * umask(:,jj+1,1)) 
    326             END DO 
    327             ! 
    328             DO jk = 1, jpkm1 
    329                DO jj = 1, jpjm1 
    330                   zhf(:,jj) = zhf(:,jj) + e3f_n(:,jj,jk) * umask(:,jj,jk) * umask(:,jj+1,jk) 
    331                END DO 
    332             END DO 
    333             CALL lbc_lnk( 'dynspg_ts', zhf, 'F', 1._wp ) 
    334             ! JC: TBC. hf should be greater than 0  
    335             DO jj = 1, jpj 
    336                DO ji = 1, jpi 
    337                   IF( zhf(ji,jj) /= 0._wp )   zwz(ji,jj) = 1._wp / zhf(ji,jj) ! zhf is actually hf here but it saves an array 
    338                END DO 
    339             END DO 
    340             zwz(:,:) = ff_f(:,:) * zwz(:,:) 
    341          END SELECT 
    342212      ENDIF 
    343213      ! 
     
    348218         CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 
    349219      ENDIF 
     220      ! 
    350221                           
    351222      ! ----------------------------------------------------------------------------- 
     
    354225      !       
    355226      ! 
    356       !                                   !* e3*d/dt(Ua) (Vertically integrated) 
    357       !                                   ! -------------------------------------------------- 
    358       zu_frc(:,:) = 0._wp 
    359       zv_frc(:,:) = 0._wp 
    360       ! 
    361       DO jk = 1, jpkm1 
    362          zu_frc(:,:) = zu_frc(:,:) + e3u_n(:,:,jk) * ua(:,:,jk) * umask(:,:,jk) 
    363          zv_frc(:,:) = zv_frc(:,:) + e3v_n(:,:,jk) * va(:,:,jk) * vmask(:,:,jk)          
    364       END DO 
    365       ! 
    366       zu_frc(:,:) = zu_frc(:,:) * r1_hu_n(:,:) 
    367       zv_frc(:,:) = zv_frc(:,:) * r1_hv_n(:,:) 
    368       ! 
    369       ! 
    370       !                                   !* baroclinic momentum trend (remove the vertical mean trend) 
    371       DO jk = 1, jpkm1                    ! ----------------------------------------------------------- 
    372          DO jj = 2, jpjm1 
    373             DO ji = fs_2, fs_jpim1   ! vector opt. 
    374                ua(ji,jj,jk) = ua(ji,jj,jk) - zu_frc(ji,jj) * umask(ji,jj,jk) 
    375                va(ji,jj,jk) = va(ji,jj,jk) - zv_frc(ji,jj) * vmask(ji,jj,jk) 
    376             END DO 
    377          END DO 
     227      !                                   !=  zu_frc =  1/H e3*d/dt(Ua)  =!  (Vertical mean of Ua, the 3D trends) 
     228      !                                   !  ---------------------------  ! 
     229      zu_frc(:,:) = SUM( e3u_n(:,:,:) * ua(:,:,:) * umask(:,:,:) , DIM=3 ) * r1_hu_n(:,:) 
     230      zv_frc(:,:) = SUM( e3v_n(:,:,:) * va(:,:,:) * vmask(:,:,:) , DIM=3 ) * r1_hv_n(:,:) 
     231      ! 
     232      ! 
     233      !                                   !=  Ua => baroclinic trend  =!   (remove its vertical mean) 
     234      DO jk = 1, jpkm1                    !  ------------------------  ! 
     235         ua(:,:,jk) = ( ua(:,:,jk) - zu_frc(:,:) ) * umask(:,:,jk) 
     236         va(:,:,jk) = ( va(:,:,jk) - zv_frc(:,:) ) * vmask(:,:,jk) 
    378237      END DO 
    379238       
     
    381240!!gm  Is it correct to do so ?   I think so... 
    382241       
    383        
    384       !                                   !* barotropic Coriolis trends (vorticity scheme dependent) 
    385       !                                   ! -------------------------------------------------------- 
    386       ! 
    387       zwx(:,:) = un_b(:,:) * hu_n(:,:) * e2u(:,:)        ! now fluxes  
    388       zwy(:,:) = vn_b(:,:) * hv_n(:,:) * e1v(:,:) 
    389       ! 
    390       SELECT CASE( nvor_scheme ) 
    391       CASE( np_ENT )                ! enstrophy conserving scheme (f-point) 
    392          DO jj = 2, jpjm1 
    393             DO ji = 2, jpim1   ! vector opt. 
    394                zu_trd(ji,jj) = + r1_4 * r1_e1e2u(ji,jj) * r1_hu_n(ji,jj)                    & 
    395                   &               * (  e1e2t(ji+1,jj)*ht_n(ji+1,jj)*ff_t(ji+1,jj) * ( vn_b(ji+1,jj) + vn_b(ji+1,jj-1) )   & 
    396                   &                  + e1e2t(ji  ,jj)*ht_n(ji  ,jj)*ff_t(ji  ,jj) * ( vn_b(ji  ,jj) + vn_b(ji  ,jj-1) )   ) 
    397                   ! 
    398                zv_trd(ji,jj) = - r1_4 * r1_e1e2v(ji,jj) * r1_hv_n(ji,jj)                    & 
    399                   &               * (  e1e2t(ji,jj+1)*ht_n(ji,jj+1)*ff_t(ji,jj+1) * ( un_b(ji,jj+1) + un_b(ji-1,jj+1) )   &  
    400                   &                  + e1e2t(ji,jj  )*ht_n(ji,jj  )*ff_t(ji,jj  ) * ( un_b(ji,jj  ) + un_b(ji-1,jj  ) )   )  
    401             END DO   
    402          END DO   
    403          !          
    404       CASE( np_ENE , np_MIX )        ! energy conserving scheme (t-point) ENE or MIX 
    405          DO jj = 2, jpjm1 
    406             DO ji = fs_2, fs_jpim1   ! vector opt. 
    407                zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) * r1_e1u(ji,jj) 
    408                zy2 = ( zwy(ji,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
    409                zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) * r1_e2v(ji,jj) 
    410                zx2 = ( zwx(ji  ,jj) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    411                ! energy conserving formulation for planetary vorticity term 
    412                zu_trd(ji,jj) =   r1_4 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
    413                zv_trd(ji,jj) = - r1_4 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 ) 
    414             END DO 
    415          END DO 
    416          ! 
    417       CASE( np_ENS )                ! enstrophy conserving scheme (f-point) 
    418          DO jj = 2, jpjm1 
    419             DO ji = fs_2, fs_jpim1   ! vector opt. 
    420                zy1 =   r1_8 * ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) & 
    421                  &            + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
    422                zx1 = - r1_8 * ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) & 
    423                  &            + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    424                zu_trd(ji,jj)  = zy1 * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
    425                zv_trd(ji,jj)  = zx1 * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
    426             END DO 
    427          END DO 
    428          ! 
    429       CASE( np_EET , np_EEN )      ! energy & enstrophy scheme (using e3t or e3f)          
    430          DO jj = 2, jpjm1 
    431             DO ji = fs_2, fs_jpim1   ! vector opt. 
    432                zu_trd(ji,jj) = + r1_12 * r1_e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  ) & 
    433                 &                                         + ftnw(ji+1,jj) * zwy(ji+1,jj  ) & 
    434                 &                                         + ftse(ji,jj  ) * zwy(ji  ,jj-1) & 
    435                 &                                         + ftsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
    436                zv_trd(ji,jj) = - r1_12 * r1_e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1) & 
    437                 &                                         + ftse(ji,jj+1) * zwx(ji  ,jj+1) & 
    438                 &                                         + ftnw(ji,jj  ) * zwx(ji-1,jj  ) & 
    439                 &                                         + ftne(ji,jj  ) * zwx(ji  ,jj  ) ) 
    440             END DO 
    441          END DO 
    442          ! 
    443       END SELECT 
    444       ! 
    445       !                                   !* Right-Hand-Side of the barotropic momentum equation 
    446       !                                   ! ---------------------------------------------------- 
    447       IF( .NOT.ln_linssh ) THEN                 ! Variable volume : remove surface pressure gradient 
    448          IF( ln_wd_il ) THEN                        ! Calculating and applying W/D gravity filters 
     242      !                                   !=  remove 2D Coriolis and pressure gradient trends  =! 
     243      !                                   !  -------------------------------------------------  ! 
     244      ! 
     245      IF( kt == nit000 .OR. .NOT. ln_linssh )   CALL dyn_cor_2D_init   ! Set zwz, the barotropic Coriolis force coefficient 
     246      !       ! recompute zwz = f/depth  at every time step for (.NOT.ln_linssh) as the water colomn height changes 
     247      ! 
     248      !                                         !* 2D Coriolis trends 
     249      zhU(:,:) = un_b(:,:) * hu_n(:,:) * e2u(:,:)        ! now fluxes  
     250      zhV(:,:) = vn_b(:,:) * hv_n(:,:) * e1v(:,:)        ! NB: FULL domain : put a value in last row and column 
     251      ! 
     252      CALL dyn_cor_2d( hu_n, hv_n, un_b, vn_b, zhU, zhV,  &   ! <<== in 
     253         &                               zu_trd, zv_trd   )   ! ==>> out 
     254      ! 
     255      IF( .NOT.ln_linssh ) THEN                 !* surface pressure gradient   (variable volume only) 
     256         ! 
     257         IF( ln_wd_il ) THEN                       ! W/D : limiter applied to spgspg 
     258            CALL wad_spg( sshn, zcpx, zcpy )          ! Calculating W/D gravity filters, zcpx and zcpy 
    449259            DO jj = 2, jpjm1 
    450                DO ji = 2, jpim1  
    451                   ll_tmp1 = MIN(  sshn(ji,jj)               ,  sshn(ji+1,jj) ) >                & 
    452                      &      MAX( -ht_0(ji,jj)               , -ht_0(ji+1,jj) ) .AND.            & 
    453                      &      MAX(  sshn(ji,jj) + ht_0(ji,jj) ,  sshn(ji+1,jj) + ht_0(ji+1,jj) )  & 
    454                      &                                                         > rn_wdmin1 + rn_wdmin2 
    455                   ll_tmp2 = ( ABS( sshn(ji+1,jj)            -  sshn(ji  ,jj))  > 1.E-12 ).AND.( & 
    456                      &      MAX(   sshn(ji,jj)              ,  sshn(ji+1,jj) ) >                & 
    457                      &      MAX(  -ht_0(ji,jj)              , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
    458                   IF(ll_tmp1) THEN 
    459                      zcpx(ji,jj) = 1.0_wp 
    460                   ELSEIF(ll_tmp2) THEN 
    461                      ! no worries about  sshn(ji+1,jj) -  sshn(ji  ,jj) = 0, it won't happen ! here 
    462                      zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_0(ji+1,jj) - sshn(ji,jj) - ht_0(ji,jj)) & 
    463                                  &    / (sshn(ji+1,jj) - sshn(ji  ,jj)) ) 
    464                      zcpx(ji,jj) = max(min( zcpx(ji,jj) , 1.0_wp),0.0_wp) 
    465                   ELSE 
    466                      zcpx(ji,jj) = 0._wp 
    467                   ENDIF 
    468                   ! 
    469                   ll_tmp1 = MIN(  sshn(ji,jj)               ,  sshn(ji,jj+1) ) >                & 
    470                      &      MAX( -ht_0(ji,jj)               , -ht_0(ji,jj+1) ) .AND.            & 
    471                      &      MAX(  sshn(ji,jj) + ht_0(ji,jj) ,  sshn(ji,jj+1) + ht_0(ji,jj+1) )  & 
    472                      &                                                       > rn_wdmin1 + rn_wdmin2 
    473                   ll_tmp2 = ( ABS( sshn(ji,jj)              -  sshn(ji,jj+1))  > 1.E-12 ).AND.( & 
    474                      &      MAX(   sshn(ji,jj)              ,  sshn(ji,jj+1) ) >                & 
    475                      &      MAX(  -ht_0(ji,jj)              , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
    476    
    477                   IF(ll_tmp1) THEN 
    478                      zcpy(ji,jj) = 1.0_wp 
    479                   ELSE IF(ll_tmp2) THEN 
    480                      ! no worries about  sshn(ji,jj+1) -  sshn(ji,jj  ) = 0, it won't happen ! here 
    481                      zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_0(ji,jj+1) - sshn(ji,jj) - ht_0(ji,jj)) & 
    482                         &             / (sshn(ji,jj+1) - sshn(ji,jj  )) ) 
    483                      zcpy(ji,jj) = MAX(  0._wp , MIN( zcpy(ji,jj) , 1.0_wp )  ) 
    484                   ELSE 
    485                      zcpy(ji,jj) = 0._wp 
    486                   ENDIF 
    487                END DO 
    488             END DO 
    489             ! 
    490             DO jj = 2, jpjm1 
    491                DO ji = 2, jpim1 
     260               DO ji = 2, jpim1                ! SPG with the application of W/D gravity filters 
    492261                  zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( sshn(ji+1,jj  ) - sshn(ji  ,jj ) )   & 
    493262                     &                          * r1_e1u(ji,jj) * zcpx(ji,jj)  * wdrampu(ji,jj)  !jth 
     
    496265               END DO 
    497266            END DO 
    498             ! 
    499          ELSE 
    500             ! 
     267         ELSE                                      ! now suface pressure gradient 
    501268            DO jj = 2, jpjm1 
    502269               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    516283      END DO  
    517284      ! 
    518       !                                         ! Add bottom stress contribution from baroclinic velocities:       
    519       IF (ln_bt_fw) THEN 
    520          DO jj = 2, jpjm1                           
    521             DO ji = fs_2, fs_jpim1   ! vector opt. 
    522                ikbu = mbku(ji,jj)        
    523                ikbv = mbkv(ji,jj)     
    524                zwx(ji,jj) = un(ji,jj,ikbu) - un_b(ji,jj) ! NOW bottom baroclinic velocities 
    525                zwy(ji,jj) = vn(ji,jj,ikbv) - vn_b(ji,jj) 
    526             END DO 
    527          END DO 
    528       ELSE 
    529          DO jj = 2, jpjm1 
    530             DO ji = fs_2, fs_jpim1   ! vector opt. 
    531                ikbu = mbku(ji,jj)        
    532                ikbv = mbkv(ji,jj)     
    533                zwx(ji,jj) = ub(ji,jj,ikbu) - ub_b(ji,jj) ! BEFORE bottom baroclinic velocities 
    534                zwy(ji,jj) = vb(ji,jj,ikbv) - vb_b(ji,jj) 
    535             END DO 
    536          END DO 
    537       ENDIF 
    538       ! 
    539       ! Note that the "unclipped" bottom friction parameter is used even with explicit drag 
    540       IF( ln_wd_il ) THEN 
    541          zztmp = -1._wp / rdtbt 
    542          DO jj = 2, jpjm1 
    543             DO ji = fs_2, fs_jpim1   ! vector opt. 
    544                zu_frc(ji,jj) = zu_frc(ji,jj) + &  
    545                & MAX(r1_hu_n(ji,jj) * r1_2 * ( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ), zztmp ) * zwx(ji,jj) *  wdrampu(ji,jj) 
    546                zv_frc(ji,jj) = zv_frc(ji,jj) + &  
    547                & MAX(r1_hv_n(ji,jj) * r1_2 * ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ), zztmp ) * zwy(ji,jj) *  wdrampv(ji,jj) 
    548             END DO 
    549          END DO 
    550       ELSE 
    551          DO jj = 2, jpjm1 
    552             DO ji = fs_2, fs_jpim1   ! vector opt. 
    553                zu_frc(ji,jj) = zu_frc(ji,jj) + r1_hu_n(ji,jj) * r1_2 * ( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * zwx(ji,jj) 
    554                zv_frc(ji,jj) = zv_frc(ji,jj) + r1_hv_n(ji,jj) * r1_2 * ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * zwy(ji,jj) 
    555             END DO 
    556          END DO 
    557       END IF 
    558       ! 
    559       IF( ln_isfcav ) THEN       ! Add TOP stress contribution from baroclinic velocities:       
    560          IF( ln_bt_fw ) THEN 
    561             DO jj = 2, jpjm1 
     285      !                                   !=  Add bottom stress contribution from baroclinic velocities  =! 
     286      !                                   !  -----------------------------------------------------------  ! 
     287      CALL dyn_drg_init( zu_frc, zv_frc,  zCdU_u, zCdU_v )      ! also provide the barotropic drag coefficients 
     288      ! 
     289      !                                   !=  Add atmospheric pressure forcing  =! 
     290      !                                   !  ----------------------------------  ! 
     291      IF( ln_apr_dyn ) THEN 
     292         IF( ln_bt_fw ) THEN                          ! FORWARD integration: use kt+1/2 pressure (NOW+1/2) 
     293            DO jj = 2, jpjm1               
    562294               DO ji = fs_2, fs_jpim1   ! vector opt. 
    563                   iktu = miku(ji,jj) 
    564                   iktv = mikv(ji,jj) 
    565                   zwx(ji,jj) = un(ji,jj,iktu) - un_b(ji,jj) ! NOW top baroclinic velocities 
    566                   zwy(ji,jj) = vn(ji,jj,iktv) - vn_b(ji,jj) 
    567                END DO 
    568             END DO 
    569          ELSE 
    570             DO jj = 2, jpjm1 
     295                  zu_frc(ji,jj) = zu_frc(ji,jj) + grav * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj) ) * r1_e1u(ji,jj) 
     296                  zv_frc(ji,jj) = zv_frc(ji,jj) + grav * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj) ) * r1_e2v(ji,jj) 
     297               END DO 
     298            END DO 
     299         ELSE                                         ! CENTRED integration: use kt-1/2 + kt+1/2 pressure (NOW) 
     300            zztmp = grav * r1_2 
     301            DO jj = 2, jpjm1               
    571302               DO ji = fs_2, fs_jpim1   ! vector opt. 
    572                   iktu = miku(ji,jj) 
    573                   iktv = mikv(ji,jj) 
    574                   zwx(ji,jj) = ub(ji,jj,iktu) - ub_b(ji,jj) ! BEFORE top baroclinic velocities 
    575                   zwy(ji,jj) = vb(ji,jj,iktv) - vb_b(ji,jj) 
    576                END DO 
    577             END DO 
    578          ENDIF 
    579          ! 
    580          ! Note that the "unclipped" top friction parameter is used even with explicit drag 
    581          DO jj = 2, jpjm1               
    582             DO ji = fs_2, fs_jpim1   ! vector opt. 
    583                zu_frc(ji,jj) = zu_frc(ji,jj) + r1_hu_n(ji,jj) * r1_2 * ( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * zwx(ji,jj) 
    584                zv_frc(ji,jj) = zv_frc(ji,jj) + r1_hv_n(ji,jj) * r1_2 * ( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * zwy(ji,jj) 
    585             END DO 
    586          END DO 
    587       ENDIF 
    588       !        
     303                  zu_frc(ji,jj) = zu_frc(ji,jj) + zztmp * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj)  & 
     304                       &                                   + ssh_ibb(ji+1,jj  ) - ssh_ibb(ji,jj)  ) * r1_e1u(ji,jj) 
     305                  zv_frc(ji,jj) = zv_frc(ji,jj) + zztmp * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj)  & 
     306                       &                                   + ssh_ibb(ji  ,jj+1) - ssh_ibb(ji,jj)  ) * r1_e2v(ji,jj) 
     307               END DO 
     308            END DO 
     309         ENDIF  
     310      ENDIF 
     311      ! 
     312      !                                   !=  Add atmospheric pressure forcing  =! 
     313      !                                   !  ----------------------------------  ! 
    589314      IF( ln_bt_fw ) THEN                        ! Add wind forcing 
    590315         DO jj = 2, jpjm1 
     
    604329      ENDIF   
    605330      ! 
    606       IF( ln_apr_dyn ) THEN                     ! Add atm pressure forcing 
    607          IF( ln_bt_fw ) THEN 
    608             DO jj = 2, jpjm1               
    609                DO ji = fs_2, fs_jpim1   ! vector opt. 
    610                   zu_spg =  grav * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj) ) * r1_e1u(ji,jj) 
    611                   zv_spg =  grav * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj) ) * r1_e2v(ji,jj) 
    612                   zu_frc(ji,jj) = zu_frc(ji,jj) + zu_spg 
    613                   zv_frc(ji,jj) = zv_frc(ji,jj) + zv_spg 
    614                END DO 
    615             END DO 
    616          ELSE 
    617             zztmp = grav * r1_2 
    618             DO jj = 2, jpjm1               
    619                DO ji = fs_2, fs_jpim1   ! vector opt. 
    620                   zu_spg = zztmp * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj)    & 
    621                       &             + ssh_ibb(ji+1,jj  ) - ssh_ibb(ji,jj)  ) * r1_e1u(ji,jj) 
    622                   zv_spg = zztmp * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj)    & 
    623                       &             + ssh_ibb(ji  ,jj+1) - ssh_ibb(ji,jj)  ) * r1_e2v(ji,jj) 
    624                   zu_frc(ji,jj) = zu_frc(ji,jj) + zu_spg 
    625                   zv_frc(ji,jj) = zv_frc(ji,jj) + zv_spg 
    626                END DO 
    627             END DO 
    628          ENDIF  
    629       ENDIF 
    630       !                                   !* Right-Hand-Side of the barotropic ssh equation 
    631       !                                   ! ----------------------------------------------- 
    632       !                                         ! Surface net water flux and rivers 
    633       IF (ln_bt_fw) THEN 
    634          zssh_frc(:,:) = r1_rau0 * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) 
    635       ELSE 
     331      !              !----------------! 
     332      !              !==  sssh_frc  ==!   Right-Hand-Side of the barotropic ssh equation   (over the FULL domain) 
     333      !              !----------------! 
     334      !                                   !=  Net water flux forcing applied to a water column  =! 
     335      !                                   ! ---------------------------------------------------  ! 
     336      IF (ln_bt_fw) THEN                          ! FORWARD integration: use kt+1/2 fluxes (NOW+1/2) 
     337         zssh_frc(:,:) = r1_rau0 * ( emp(:,:)             - rnf(:,:)              + fwfisf(:,:)                  ) 
     338      ELSE                                        ! CENTRED integration: use kt-1/2 + kt+1/2 fluxes (NOW) 
    636339         zztmp = r1_rau0 * r1_2 
    637          zssh_frc(:,:) = zztmp * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:)   & 
    638                 &                 + fwfisf(:,:) + fwfisf_b(:,:)                     ) 
    639       ENDIF 
    640       ! 
    641       IF( ln_sdw ) THEN                         ! Stokes drift divergence added if necessary 
     340         zssh_frc(:,:) = zztmp * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:) + fwfisf(:,:) + fwfisf_b(:,:)  ) 
     341      ENDIF 
     342      !                                   !=  Add Stokes drift divergence  =!   (if exist) 
     343      IF( ln_sdw ) THEN                   !  -----------------------------  ! 
    642344         zssh_frc(:,:) = zssh_frc(:,:) + div_sd(:,:) 
    643345      ENDIF 
    644346      ! 
    645347#if defined key_asminc 
    646       !                                         ! Include the IAU weighted SSH increment 
     348      !                                   !=  Add the IAU weighted SSH increment  =! 
     349      !                                   !  ------------------------------------  ! 
    647350      IF( lk_asminc .AND. ln_sshinc .AND. ln_asmiau ) THEN 
    648351         zssh_frc(:,:) = zssh_frc(:,:) - ssh_iau(:,:) 
    649352      ENDIF 
    650353#endif 
    651       !                                   !* Fill boundary data arrays for AGRIF 
     354      !                                   != Fill boundary data arrays for AGRIF 
    652355      !                                   ! ------------------------------------ 
    653356#if defined key_agrif 
     
    671374         vb_e   (:,:) = 0._wp 
    672375      ENDIF 
    673  
     376      ! 
     377      IF( ln_linssh ) THEN    ! mid-step ocean depth is fixed (hup2_e=hu_n=hu_0) 
     378         zhup2_e(:,:) = hu_n(:,:) 
     379         zhvp2_e(:,:) = hv_n(:,:) 
     380         zhtp2_e(:,:) = ht_n(:,:) 
     381      ENDIF 
    674382      ! 
    675383      IF (ln_bt_fw) THEN                  ! FORWARD integration: start from NOW fields                     
     
    693401      ENDIF 
    694402      ! 
    695       ! 
    696       ! 
    697403      ! Initialize sums: 
    698404      ua_b  (:,:) = 0._wp       ! After barotropic velocities (or transport if flux form)           
     
    714420         ! 
    715421         l_full_nf_update = jn == icycle   ! false: disable full North fold update (performances) for jn = 1 to icycle-1 
    716          !                                                !  ------------------ 
    717          !                                                !* Update the forcing (BDY and tides) 
    718          !                                                !  ------------------ 
    719          ! Update only tidal forcing at open boundaries 
    720          IF( ln_bdy      .AND. ln_tide )   CALL bdy_dta_tides( kt, kit=jn, time_offset= noffset+1 ) 
     422         ! 
     423         !                    !==  Update the forcing ==! (BDY and tides) 
     424         ! 
     425         IF( ln_bdy      .AND. ln_tide )   CALL bdy_dta_tides( kt, kit=jn, kt_offset= noffset+1 ) 
    721426         ! Update tide potential at the beginning of current time substep 
    722427         IF( ln_tide_pot .AND. ln_tide ) THEN 
     
    725430         END IF 
    726431         ! 
    727          ! Set extrapolation coefficients for predictor step: 
     432         !                    !==  extrapolation at mid-step  ==!   (jn+1/2) 
     433         ! 
     434         !                       !* Set extrapolation coefficients for predictor step: 
    728435         IF ((jn<3).AND.ll_init) THEN      ! Forward            
    729436           za1 = 1._wp                                           
     
    735442           za3 =  0.281105_wp              ! za3 = bet 
    736443         ENDIF 
    737  
    738          ! Extrapolate barotropic velocities at step jit+0.5: 
     444         ! 
     445         !                       !* Extrapolate barotropic velocities at mid-step (jn+1/2) 
     446         !--        m+1/2               m                m-1           m-2       --! 
     447         !--       u      = (3/2+beta) u   -(1/2+2beta) u      + beta u          --! 
     448         !-------------------------------------------------------------------------! 
    739449         ua_e(:,:) = za1 * un_e(:,:) + za2 * ub_e(:,:) + za3 * ubb_e(:,:) 
    740450         va_e(:,:) = za1 * vn_e(:,:) + za2 * vb_e(:,:) + za3 * vbb_e(:,:) 
     
    743453            !                                             !  ------------------ 
    744454            ! Extrapolate Sea Level at step jit+0.5: 
     455            !--         m+1/2                 m                  m-1             m-2       --! 
     456            !--      ssh      = (3/2+beta) ssh   -(1/2+2beta) ssh      + beta ssh          --! 
     457            !--------------------------------------------------------------------------------! 
    745458            zsshp2_e(:,:) = za1 * sshn_e(:,:)  + za2 * sshb_e(:,:) + za3 * sshbb_e(:,:) 
    746459             
    747             ! set wetting & drying mask at tracer points for this barotropic sub-step  
    748             IF ( ln_wd_dl ) THEN  
    749                ! 
    750                IF ( ln_wd_dl_rmp ) THEN  
    751                   DO jj = 1, jpj                                  
    752                      DO ji = 1, jpi   ! vector opt.   
    753                         IF ( zsshp2_e(ji,jj) + ht_0(ji,jj) >  2._wp * rn_wdmin1 ) THEN  
    754 !                        IF ( zsshp2_e(ji,jj) + ht_0(ji,jj) >  rn_wdmin2 ) THEN  
    755                            ztwdmask(ji,jj) = 1._wp 
    756                         ELSE IF ( zsshp2_e(ji,jj) + ht_0(ji,jj) >  rn_wdmin1 ) THEN 
    757                            ztwdmask(ji,jj) = (tanh(50._wp*( ( zsshp2_e(ji,jj) + ht_0(ji,jj) -  rn_wdmin1 )*r_rn_wdmin1)) )  
    758                         ELSE  
    759                            ztwdmask(ji,jj) = 0._wp 
    760                         END IF 
    761                      END DO 
    762                   END DO 
    763                ELSE 
    764                   DO jj = 1, jpj                                  
    765                      DO ji = 1, jpi   ! vector opt.   
    766                         IF ( zsshp2_e(ji,jj) + ht_0(ji,jj) >  rn_wdmin1 ) THEN  
    767                            ztwdmask(ji,jj) = 1._wp 
    768                         ELSE  
    769                            ztwdmask(ji,jj) = 0._wp 
    770                         ENDIF 
    771                      END DO 
    772                   END DO 
    773                ENDIF  
    774                ! 
    775             ENDIF  
     460            ! set wetting & drying mask at tracer points for this barotropic mid-step 
     461            IF( ln_wd_dl )   CALL wad_tmsk( zsshp2_e, ztwdmask ) 
    776462            ! 
    777             DO jj = 2, jpjm1                                    ! Sea Surface Height at u- & v-points 
    778                DO ji = 2, fs_jpim1   ! Vector opt. 
    779                   zwx(ji,jj) = r1_2 * ssumask(ji,jj)  * r1_e1e2u(ji,jj)     & 
    780                      &              * ( e1e2t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
    781                      &              +   e1e2t(ji+1,jj) * zsshp2_e(ji+1,jj) ) 
    782                   zwy(ji,jj) = r1_2 * ssvmask(ji,jj)  * r1_e1e2v(ji,jj)     & 
    783                      &              * ( e1e2t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
    784                      &              +   e1e2t(ji,jj+1) * zsshp2_e(ji,jj+1) ) 
    785                END DO 
    786             END DO 
    787             CALL lbc_lnk_multi( 'dynspg_ts', zwx, 'U', 1._wp, zwy, 'V', 1._wp ) 
     463            !                          ! ocean t-depth at mid-step 
     464            zhtp2_e(:,:) = ht_0(:,:) + zsshp2_e(:,:) 
    788465            ! 
    789             zhup2_e(:,:) = hu_0(:,:) + zwx(:,:)                ! Ocean depth at U- and V-points 
    790             zhvp2_e(:,:) = hv_0(:,:) + zwy(:,:) 
    791             zhtp2_e(:,:) = ht_0(:,:) + zsshp2_e(:,:) 
    792          ELSE 
    793             zhup2_e(:,:) = hu_n(:,:) 
    794             zhvp2_e(:,:) = hv_n(:,:) 
    795             zhtp2_e(:,:) = ht_n(:,:) 
    796          ENDIF 
    797          !                                                !* after ssh 
    798          !                                                !  ----------- 
    799          ! 
    800          ! Enforce volume conservation at open boundaries: 
     466            !                          ! ocean u- and v-depth at mid-step   (separate DO-loops remove the need of a lbc_lnk) 
     467            DO jj = 1, jpj 
     468               DO ji = 1, jpim1   ! not jpi-column 
     469                  zhup2_e(ji,jj) = hu_0(ji,jj) + r1_2 * r1_e1e2u(ji,jj)                        & 
     470                       &                              * (  e1e2t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
     471                       &                                 + e1e2t(ji+1,jj) * zsshp2_e(ji+1,jj)  ) * ssumask(ji,jj) 
     472               END DO 
     473            END DO 
     474            DO jj = 1, jpjm1        ! not jpj-row 
     475               DO ji = 1, jpi 
     476                  zhvp2_e(ji,jj) = hv_0(ji,jj) + r1_2 * r1_e1e2v(ji,jj)                        & 
     477                       &                              * (  e1e2t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
     478                       &                                 + e1e2t(ji,jj+1) * zsshp2_e(ji,jj+1)  ) * ssvmask(ji,jj) 
     479               END DO 
     480            END DO 
     481            ! 
     482         ENDIF 
     483         ! 
     484         !                    !==  after SSH  ==!   (jn+1) 
     485         ! 
     486         !                             ! update (ua_e,va_e) to enforce volume conservation at open boundaries 
     487         !                             ! values of zhup2_e and zhvp2_e on the halo are not needed in bdy_vol2d 
    801488         IF( ln_bdy .AND. ln_vol ) CALL bdy_vol2d( kt, jn, ua_e, va_e, zhup2_e, zhvp2_e ) 
    802489         ! 
    803          zwx(:,:) = e2u(:,:) * ua_e(:,:) * zhup2_e(:,:)         ! fluxes at jn+0.5 
    804          zwy(:,:) = e1v(:,:) * va_e(:,:) * zhvp2_e(:,:) 
     490         !                             ! resulting flux at mid-step (not over the full domain) 
     491         zhU(1:jpim1,1:jpj  ) = e2u(1:jpim1,1:jpj  ) * ua_e(1:jpim1,1:jpj  ) * zhup2_e(1:jpim1,1:jpj  )   ! not jpi-column 
     492         zhV(1:jpi  ,1:jpjm1) = e1v(1:jpi  ,1:jpjm1) * va_e(1:jpi  ,1:jpjm1) * zhvp2_e(1:jpi  ,1:jpjm1)   ! not jpj-row 
    805493         ! 
    806494#if defined key_agrif 
     
    809497            IF((nbondi == -1).OR.(nbondi == 2)) THEN 
    810498               DO jj = 1, jpj 
    811                   zwx(2:nbghostcells+1,jj) = ubdy_w(1:nbghostcells,jj) * e2u(2:nbghostcells+1,jj) 
    812                   zwy(2:nbghostcells+1,jj) = vbdy_w(1:nbghostcells,jj) * e1v(2:nbghostcells+1,jj) 
     499                  zhU(2:nbghostcells+1,jj) = ubdy_w(1:nbghostcells,jj) * e2u(2:nbghostcells+1,jj) 
     500                  zhV(2:nbghostcells+1,jj) = vbdy_w(1:nbghostcells,jj) * e1v(2:nbghostcells+1,jj) 
    813501               END DO 
    814502            ENDIF 
    815503            IF((nbondi ==  1).OR.(nbondi == 2)) THEN 
    816504               DO jj=1,jpj 
    817                   zwx(nlci-nbghostcells-1:nlci-2,jj) = ubdy_e(1:nbghostcells,jj) * e2u(nlci-nbghostcells-1:nlci-2,jj) 
    818                   zwy(nlci-nbghostcells  :nlci-1,jj) = vbdy_e(1:nbghostcells,jj) * e1v(nlci-nbghostcells  :nlci-1,jj) 
     505                  zhU(nlci-nbghostcells-1:nlci-2,jj) = ubdy_e(1:nbghostcells,jj) * e2u(nlci-nbghostcells-1:nlci-2,jj) 
     506                  zhV(nlci-nbghostcells  :nlci-1,jj) = vbdy_e(1:nbghostcells,jj) * e1v(nlci-nbghostcells  :nlci-1,jj) 
    819507               END DO 
    820508            ENDIF 
    821509            IF((nbondj == -1).OR.(nbondj == 2)) THEN 
    822510               DO ji=1,jpi 
    823                   zwy(ji,2:nbghostcells+1) = vbdy_s(ji,1:nbghostcells) * e1v(ji,2:nbghostcells+1) 
    824                   zwx(ji,2:nbghostcells+1) = ubdy_s(ji,1:nbghostcells) * e2u(ji,2:nbghostcells+1) 
     511                  zhV(ji,2:nbghostcells+1) = vbdy_s(ji,1:nbghostcells) * e1v(ji,2:nbghostcells+1) 
     512                  zhU(ji,2:nbghostcells+1) = ubdy_s(ji,1:nbghostcells) * e2u(ji,2:nbghostcells+1) 
    825513               END DO 
    826514            ENDIF 
    827515            IF((nbondj ==  1).OR.(nbondj == 2)) THEN 
    828516               DO ji=1,jpi 
    829                   zwy(ji,nlcj-nbghostcells-1:nlcj-2) = vbdy_n(ji,1:nbghostcells) * e1v(ji,nlcj-nbghostcells-1:nlcj-2) 
    830                   zwx(ji,nlcj-nbghostcells  :nlcj-1) = ubdy_n(ji,1:nbghostcells) * e2u(ji,nlcj-nbghostcells  :nlcj-1) 
     517                  zhV(ji,nlcj-nbghostcells-1:nlcj-2) = vbdy_n(ji,1:nbghostcells) * e1v(ji,nlcj-nbghostcells-1:nlcj-2) 
     518                  zhU(ji,nlcj-nbghostcells  :nlcj-1) = ubdy_n(ji,1:nbghostcells) * e2u(ji,nlcj-nbghostcells  :nlcj-1) 
    831519               END DO 
    832520            ENDIF 
    833521         ENDIF 
    834522#endif 
    835          IF( ln_wd_il )   CALL wad_lmt_bt(zwx, zwy, sshn_e, zssh_frc, rdtbt) 
    836  
    837          IF ( ln_wd_dl ) THEN  
    838             ! 
    839             ! un_e and vn_e are set to zero at faces where the direction of the flow is from dry cells  
    840             ! 
    841             DO jj = 1, jpjm1                                  
    842                DO ji = 1, jpim1    
    843                   IF ( zwx(ji,jj) > 0.0 ) THEN  
    844                      zuwdmask(ji, jj) = ztwdmask(ji  ,jj)  
    845                   ELSE  
    846                      zuwdmask(ji, jj) = ztwdmask(ji+1,jj)   
    847                   END IF  
    848                   zwx(ji, jj) = zuwdmask(ji,jj)*zwx(ji, jj) 
    849                   un_e(ji,jj) = zuwdmask(ji,jj)*un_e(ji,jj) 
    850  
    851                   IF ( zwy(ji,jj) > 0.0 ) THEN 
    852                      zvwdmask(ji, jj) = ztwdmask(ji, jj  ) 
    853                   ELSE  
    854                      zvwdmask(ji, jj) = ztwdmask(ji, jj+1)   
    855                   END IF  
    856                   zwy(ji, jj) = zvwdmask(ji,jj)*zwy(ji,jj)  
    857                   vn_e(ji,jj) = zvwdmask(ji,jj)*vn_e(ji,jj) 
    858                END DO 
    859             END DO 
     523         IF( ln_wd_il )   CALL wad_lmt_bt(zhU, zhV, sshn_e, zssh_frc, rdtbt)    !!gm wad_lmt_bt use of lbc_lnk on zhU, zhV 
     524 
     525         IF( ln_wd_dl ) THEN           ! un_e and vn_e are set to zero at faces where  
     526            !                          ! the direction of the flow is from dry cells 
     527            CALL wad_Umsk( ztwdmask, zhU, zhV, un_e, vn_e, zuwdmask, zvwdmask )   ! not jpi colomn for U, not jpj row for V 
    860528            ! 
    861529         ENDIF     
    862           
    863          ! Sum over sub-time-steps to compute advective velocities 
    864          za2 = wgtbtp2(jn) 
    865          un_adv(:,:) = un_adv(:,:) + za2 * zwx(:,:) * r1_e2u(:,:) 
    866          vn_adv(:,:) = vn_adv(:,:) + za2 * zwy(:,:) * r1_e1v(:,:) 
    867           
    868          ! sum over sub-time-steps to decide which baroclinic velocities to set to zero (zuwdav2 is only used when ln_wd_dl_bc = True)  
     530         ! 
     531         ! 
     532         !     Compute Sea Level at step jit+1 
     533         !--           m+1        m                               m+1/2          --! 
     534         !--        ssh    =  ssh   - delta_t' * [ frc + div( flux      ) ]      --! 
     535         !-------------------------------------------------------------------------! 
     536         DO jj = 2, jpjm1        ! INNER domain                              
     537            DO ji = 2, jpim1 
     538               zhdiv = (   zhU(ji,jj) - zhU(ji-1,jj) + zhV(ji,jj) - zhV(ji,jj-1)   ) * r1_e1e2t(ji,jj) 
     539               ssha_e(ji,jj) = (  sshn_e(ji,jj) - rdtbt * ( zssh_frc(ji,jj) + zhdiv )  ) * ssmask(ji,jj) 
     540            END DO 
     541         END DO 
     542         ! 
     543         CALL lbc_lnk_multi( 'dynspg_ts', ssha_e, 'T', 1._wp,  zhU, 'U', -1._wp,  zhV, 'V', -1._wp ) 
     544         ! 
     545         !                             ! Sum over sub-time-steps to compute advective velocities 
     546         za2 = wgtbtp2(jn)             ! zhU, zhV hold fluxes extrapolated at jn+0.5 
     547         un_adv(:,:) = un_adv(:,:) + za2 * zhU(:,:) * r1_e2u(:,:) 
     548         vn_adv(:,:) = vn_adv(:,:) + za2 * zhV(:,:) * r1_e1v(:,:) 
     549         ! sum over sub-time-steps to decide which baroclinic velocities to set to zero (zuwdav2 is only used when ln_wd_dl_bc=True)  
    869550         IF ( ln_wd_dl_bc ) THEN 
    870             zuwdav2(:,:) = zuwdav2(:,:) + za2 * zuwdmask(:,:) 
    871             zvwdav2(:,:) = zvwdav2(:,:) + za2 * zvwdmask(:,:) 
    872          END IF  
    873  
    874          ! Set next sea level: 
    875          DO jj = 2, jpjm1                                  
    876             DO ji = fs_2, fs_jpim1   ! vector opt. 
    877                zhdiv(ji,jj) = (   zwx(ji,jj) - zwx(ji-1,jj)   & 
    878                   &             + zwy(ji,jj) - zwy(ji,jj-1)   ) * r1_e1e2t(ji,jj) 
    879             END DO 
    880          END DO 
    881          ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) )  ) * ssmask(:,:) 
    882           
    883          CALL lbc_lnk( 'dynspg_ts', ssha_e, 'T',  1._wp ) 
    884  
     551            zuwdav2(1:jpim1,1:jpj  ) = zuwdav2(1:jpim1,1:jpj  ) + za2 * zuwdmask(1:jpim1,1:jpj  )   ! not jpi-column 
     552            zvwdav2(1:jpi  ,1:jpjm1) = zvwdav2(1:jpi  ,1:jpjm1) + za2 * zvwdmask(1:jpi  ,1:jpjm1)   ! not jpj-row 
     553         END IF 
     554         ! 
    885555         ! Duplicate sea level across open boundaries (this is only cosmetic if linssh=T) 
    886556         IF( ln_bdy )   CALL bdy_ssh( ssha_e ) 
     
    891561         ! Sea Surface Height at u-,v-points (vvl case only) 
    892562         IF( .NOT.ln_linssh ) THEN                                 
    893             DO jj = 2, jpjm1 
     563            DO jj = 2, jpjm1   ! INNER domain, will be extended to whole domain later 
    894564               DO ji = 2, jpim1      ! NO Vector Opt. 
    895565                  zsshu_a(ji,jj) = r1_2 * ssumask(ji,jj) * r1_e1e2u(ji,jj)    & 
     
    901571               END DO 
    902572            END DO 
    903             CALL lbc_lnk_multi( 'dynspg_ts', zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) 
    904573         ENDIF    
    905          !                                  
    906          ! Half-step back interpolation of SSH for surface pressure computation: 
    907          !---------------------------------------------------------------------- 
    908          IF ((jn==1).AND.ll_init) THEN 
    909            za0=1._wp                        ! Forward-backward 
    910            za1=0._wp                            
    911            za2=0._wp 
    912            za3=0._wp 
    913          ELSEIF ((jn==2).AND.ll_init) THEN  ! AB2-AM3 Coefficients; bet=0 ; gam=-1/6 ; eps=1/12 
    914            za0= 1.0833333333333_wp          ! za0 = 1-gam-eps 
    915            za1=-0.1666666666666_wp          ! za1 = gam 
    916            za2= 0.0833333333333_wp          ! za2 = eps 
    917            za3= 0._wp               
    918          ELSE                               ! AB3-AM4 Coefficients; bet=0.281105 ; eps=0.013 ; gam=0.0880  
    919             IF (rn_bt_alpha==0._wp) THEN 
    920                za0=0.614_wp                 ! za0 = 1/2 +   gam + 2*eps 
    921                za1=0.285_wp                 ! za1 = 1/2 - 2*gam - 3*eps 
    922                za2=0.088_wp                 ! za2 = gam 
    923                za3=0.013_wp                 ! za3 = eps 
    924             ELSE 
    925                zepsilon = 0.00976186_wp - 0.13451357_wp * rn_bt_alpha 
    926                zgamma = 0.08344500_wp - 0.51358400_wp * rn_bt_alpha 
    927                za0 = 0.5_wp + zgamma + 2._wp * rn_bt_alpha + 2._wp * zepsilon 
    928                za1 = 1._wp - za0 - zgamma - zepsilon 
    929                za2 = zgamma 
    930                za3 = zepsilon 
    931             ENDIF  
    932          ENDIF 
    933          ! 
     574         !          
     575         ! Half-step back interpolation of SSH for surface pressure computation at step jit+1/2 
     576         !--            m+1/2           m+1              m               m-1              m-2     --! 
     577         !--        ssh'    =  za0 * ssh     +  za1 * ssh   +  za2 * ssh      +  za3 * ssh        --! 
     578         !------------------------------------------------------------------------------------------! 
     579         CALL ts_bck_interp( jn, ll_init, za0, za1, za2, za3 )   ! coeficients of the interpolation 
    934580         zsshp2_e(:,:) = za0 *  ssha_e(:,:) + za1 *  sshn_e (:,:)   & 
    935581            &          + za2 *  sshb_e(:,:) + za3 *  sshbb_e(:,:) 
    936           
    937          IF( ln_wd_il ) THEN                   ! Calculating and applying W/D gravity filters 
    938            DO jj = 2, jpjm1 
    939               DO ji = 2, jpim1  
    940                 ll_tmp1 = MIN( zsshp2_e(ji,jj)               , zsshp2_e(ji+1,jj) ) >                & 
    941                      &    MAX(    -ht_0(ji,jj)               ,    -ht_0(ji+1,jj) ) .AND.            & 
    942                      &    MAX( zsshp2_e(ji,jj) + ht_0(ji,jj) , zsshp2_e(ji+1,jj) + ht_0(ji+1,jj) ) & 
    943                      &                                                             > rn_wdmin1 + rn_wdmin2 
    944                 ll_tmp2 = (ABS(zsshp2_e(ji,jj)               - zsshp2_e(ji+1,jj))  > 1.E-12 ).AND.( & 
    945                      &    MAX( zsshp2_e(ji,jj)               , zsshp2_e(ji+1,jj) ) >                & 
    946                      &    MAX(    -ht_0(ji,jj)               ,    -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
    947     
    948                 IF(ll_tmp1) THEN 
    949                   zcpx(ji,jj) = 1.0_wp 
    950                 ELSE IF(ll_tmp2) THEN 
    951                   ! no worries about  zsshp2_e(ji+1,jj) - zsshp2_e(ji  ,jj) = 0, it won't happen ! here 
    952                   zcpx(ji,jj) = ABS( (zsshp2_e(ji+1,jj) +     ht_0(ji+1,jj) - zsshp2_e(ji,jj) - ht_0(ji,jj)) & 
    953                               &    / (zsshp2_e(ji+1,jj) - zsshp2_e(ji  ,jj)) ) 
    954                 ELSE 
    955                   zcpx(ji,jj) = 0._wp 
    956                 ENDIF 
    957                 ! 
    958                 ll_tmp1 = MIN( zsshp2_e(ji,jj)               , zsshp2_e(ji,jj+1) ) >                & 
    959                      &    MAX(    -ht_0(ji,jj)               ,    -ht_0(ji,jj+1) ) .AND.            & 
    960                      &    MAX( zsshp2_e(ji,jj) + ht_0(ji,jj) , zsshp2_e(ji,jj+1) + ht_0(ji,jj+1) ) & 
    961                      &                                                             > rn_wdmin1 + rn_wdmin2 
    962                 ll_tmp2 = (ABS(zsshp2_e(ji,jj)               - zsshp2_e(ji,jj+1))  > 1.E-12 ).AND.( & 
    963                      &    MAX( zsshp2_e(ji,jj)               , zsshp2_e(ji,jj+1) ) >                & 
    964                      &    MAX(    -ht_0(ji,jj)               ,    -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
    965     
    966                 IF(ll_tmp1) THEN 
    967                   zcpy(ji,jj) = 1.0_wp 
    968                 ELSEIF(ll_tmp2) THEN 
    969                   ! no worries about  zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj  ) = 0, it won't happen ! here 
    970                   zcpy(ji,jj) = ABS( (zsshp2_e(ji,jj+1) +     ht_0(ji,jj+1) - zsshp2_e(ji,jj) - ht_0(ji,jj)) & 
    971                               &    / (zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj  )) ) 
    972                 ELSE 
    973                   zcpy(ji,jj) = 0._wp 
    974                 ENDIF 
    975               END DO 
    976            END DO 
    977          ENDIF 
    978          ! 
    979          ! Compute associated depths at U and V points: 
    980          IF( .NOT.ln_linssh  .AND. .NOT.ln_dynadv_vec ) THEN     !* Vector form 
    981             !                                         
    982             DO jj = 2, jpjm1                             
    983                DO ji = 2, jpim1 
    984                   zx1 = r1_2 * ssumask(ji  ,jj) *  r1_e1e2u(ji  ,jj)    & 
    985                      &      * ( e1e2t(ji  ,jj  ) * zsshp2_e(ji  ,jj)    & 
    986                      &      +   e1e2t(ji+1,jj  ) * zsshp2_e(ji+1,jj  ) ) 
    987                   zy1 = r1_2 * ssvmask(ji  ,jj) *  r1_e1e2v(ji  ,jj  )  & 
    988                      &       * ( e1e2t(ji ,jj  ) * zsshp2_e(ji  ,jj  )  & 
    989                      &       +   e1e2t(ji ,jj+1) * zsshp2_e(ji  ,jj+1) ) 
    990                   zhust_e(ji,jj) = hu_0(ji,jj) + zx1  
    991                   zhvst_e(ji,jj) = hv_0(ji,jj) + zy1 
    992                END DO 
    993             END DO 
    994             ! 
     582         ! 
     583         !                             ! Surface pressure gradient 
     584         zldg = ( 1._wp - rn_scal_load ) * grav    ! local factor 
     585         DO jj = 2, jpjm1                             
     586            DO ji = 2, jpim1 
     587               zu_spg(ji,jj) = - zldg * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u(ji,jj) 
     588               zv_spg(ji,jj) = - zldg * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) * r1_e2v(ji,jj) 
     589            END DO 
     590         END DO 
     591         IF( ln_wd_il ) THEN        ! W/D : gravity filters applied on pressure gradient 
     592            CALL wad_spg( zsshp2_e, zcpx, zcpy )   ! Calculating W/D gravity filters 
     593            zu_spg(2:jpim1,2:jpjm1) = zu_spg(2:jpim1,2:jpjm1) * zcpx(2:jpim1,2:jpjm1) 
     594            zv_spg(2:jpim1,2:jpjm1) = zv_spg(2:jpim1,2:jpjm1) * zcpy(2:jpim1,2:jpjm1) 
    995595         ENDIF 
    996596         ! 
     
    998598         ! zwz array below or triads normally depend on sea level with ln_linssh=F and should be updated 
    999599         ! at each time step. We however keep them constant here for optimization. 
    1000          ! Recall that zwx and zwy arrays hold fluxes at this stage: 
    1001          ! zwx(:,:) = e2u(:,:) * ua_e(:,:) * zhup2_e(:,:)   ! fluxes at jn+0.5 
    1002          ! zwy(:,:) = e1v(:,:) * va_e(:,:) * zhvp2_e(:,:) 
    1003          ! 
    1004          SELECT CASE( nvor_scheme ) 
    1005          CASE( np_ENT )             ! energy conserving scheme (t-point) 
    1006          DO jj = 2, jpjm1 
    1007             DO ji = 2, jpim1   ! vector opt. 
    1008  
    1009                z1_hu = ssumask(ji,jj) / ( zhup2_e(ji,jj) + 1._wp - ssumask(ji,jj) ) 
    1010                z1_hv = ssvmask(ji,jj) / ( zhvp2_e(ji,jj) + 1._wp - ssvmask(ji,jj) ) 
    1011              
    1012                zu_trd(ji,jj) = + r1_4 * r1_e1e2u(ji,jj) * z1_hu                   & 
    1013                   &               * (  e1e2t(ji+1,jj)*zhtp2_e(ji+1,jj)*ff_t(ji+1,jj) * ( va_e(ji+1,jj) + va_e(ji+1,jj-1) )   & 
    1014                   &                  + e1e2t(ji  ,jj)*zhtp2_e(ji  ,jj)*ff_t(ji  ,jj) * ( va_e(ji  ,jj) + va_e(ji  ,jj-1) )   ) 
    1015                   ! 
    1016                zv_trd(ji,jj) = - r1_4 * r1_e1e2v(ji,jj) * z1_hv                    & 
    1017                   &               * (  e1e2t(ji,jj+1)*zhtp2_e(ji,jj+1)*ff_t(ji,jj+1) * ( ua_e(ji,jj+1) + ua_e(ji-1,jj+1) )   &  
    1018                   &                  + e1e2t(ji,jj  )*zhtp2_e(ji,jj  )*ff_t(ji,jj  ) * ( ua_e(ji,jj  ) + ua_e(ji-1,jj  ) )   )  
    1019             END DO   
    1020          END DO   
    1021          !          
    1022          CASE( np_ENE, np_MIX )     ! energy conserving scheme (f-point) 
    1023             DO jj = 2, jpjm1 
    1024                DO ji = fs_2, fs_jpim1   ! vector opt. 
    1025                   zy1 = ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) ) * r1_e1u(ji,jj) 
    1026                   zy2 = ( zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
    1027                   zx1 = ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) ) * r1_e2v(ji,jj) 
    1028                   zx2 = ( zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    1029                   zu_trd(ji,jj) = r1_4 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
    1030                   zv_trd(ji,jj) =-r1_4 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 ) 
    1031                END DO 
    1032             END DO 
    1033             ! 
    1034          CASE( np_ENS )             ! enstrophy conserving scheme (f-point) 
    1035             DO jj = 2, jpjm1 
    1036                DO ji = fs_2, fs_jpim1   ! vector opt. 
    1037                   zy1 =   r1_8 * ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1) & 
    1038                    &             + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) * r1_e1u(ji,jj) 
    1039                   zx1 = - r1_8 * ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1) & 
    1040                    &             + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    1041                   zu_trd(ji,jj)  = zy1 * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
    1042                   zv_trd(ji,jj)  = zx1 * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
    1043                END DO 
    1044             END DO 
    1045             ! 
    1046          CASE( np_EET , np_EEN )   ! energy & enstrophy scheme (using e3t or e3f) 
    1047             DO jj = 2, jpjm1 
    1048                DO ji = fs_2, fs_jpim1   ! vector opt. 
    1049                   zu_trd(ji,jj) = + r1_12 * r1_e1u(ji,jj) * (  ftne(ji,jj  ) * zwy(ji  ,jj  )  & 
    1050                      &                                       + ftnw(ji+1,jj) * zwy(ji+1,jj  )  & 
    1051                      &                                       + ftse(ji,jj  ) * zwy(ji  ,jj-1)  &  
    1052                      &                                       + ftsw(ji+1,jj) * zwy(ji+1,jj-1)  ) 
    1053                   zv_trd(ji,jj) = - r1_12 * r1_e2v(ji,jj) * (  ftsw(ji,jj+1) * zwx(ji-1,jj+1)  &  
    1054                      &                                       + ftse(ji,jj+1) * zwx(ji  ,jj+1)  & 
    1055                      &                                       + ftnw(ji,jj  ) * zwx(ji-1,jj  )  &  
    1056                      &                                       + ftne(ji,jj  ) * zwx(ji  ,jj  )  ) 
    1057                END DO 
    1058             END DO 
    1059             !  
    1060          END SELECT 
     600         ! Recall that zhU and zhV hold fluxes at jn+0.5 (extrapolated not backward interpolated) 
     601         CALL dyn_cor_2d( zhup2_e, zhvp2_e, ua_e, va_e, zhU, zhV,    zu_trd, zv_trd   ) 
    1061602         ! 
    1062603         ! Add tidal astronomical forcing if defined 
     
    1064605            DO jj = 2, jpjm1 
    1065606               DO ji = fs_2, fs_jpim1   ! vector opt. 
    1066                   zu_spg = grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) * r1_e1u(ji,jj) 
    1067                   zv_spg = grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) * r1_e2v(ji,jj) 
    1068                   zu_trd(ji,jj) = zu_trd(ji,jj) + zu_spg 
    1069                   zv_trd(ji,jj) = zv_trd(ji,jj) + zv_spg 
     607                  zu_trd(ji,jj) = zu_trd(ji,jj) + grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) * r1_e1u(ji,jj) 
     608                  zv_trd(ji,jj) = zv_trd(ji,jj) + grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) * r1_e2v(ji,jj) 
    1070609               END DO 
    1071610            END DO 
     
    1081620               END DO 
    1082621            END DO 
    1083          ENDIF  
    1084          ! 
    1085          ! Surface pressure trend: 
    1086          IF( ln_wd_il ) THEN 
    1087            DO jj = 2, jpjm1 
    1088               DO ji = 2, jpim1  
    1089                  ! Add surface pressure gradient 
    1090                  zu_spg = - grav * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u(ji,jj) 
    1091                  zv_spg = - grav * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) * r1_e2v(ji,jj) 
    1092                  zwx(ji,jj) = (1._wp - rn_scal_load) * zu_spg * zcpx(ji,jj)  
    1093                  zwy(ji,jj) = (1._wp - rn_scal_load) * zv_spg * zcpy(ji,jj) 
    1094               END DO 
    1095            END DO 
    1096          ELSE 
    1097            DO jj = 2, jpjm1 
    1098               DO ji = fs_2, fs_jpim1   ! vector opt. 
    1099                  ! Add surface pressure gradient 
    1100                  zu_spg = - grav * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u(ji,jj) 
    1101                  zv_spg = - grav * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) * r1_e2v(ji,jj) 
    1102                  zwx(ji,jj) = (1._wp - rn_scal_load) * zu_spg 
    1103                  zwy(ji,jj) = (1._wp - rn_scal_load) * zv_spg 
    1104               END DO 
    1105            END DO 
    1106          END IF 
    1107  
     622         ENDIF 
    1108623         ! 
    1109624         ! Set next velocities: 
     625         !     Compute barotropic speeds at step jit+1    (h : total height of the water colomn) 
     626         !--                              VECTOR FORM 
     627         !--   m+1                 m               /                                                       m+1/2           \    --! 
     628         !--  u     =             u   + delta_t' * \         (1-r)*g * grad_x( ssh') -         f * k vect u      +     frc /    --! 
     629         !--                                                                                                                    --! 
     630         !--                             FLUX FORM                                                                              --! 
     631         !--  m+1   __1__  /  m    m               /  m+1/2                             m+1/2              m+1/2    n      \ \  --! 
     632         !-- u    =   m+1 |  h  * u   + delta_t' * \ h     * (1-r)*g * grad_x( ssh') - h     * f * k vect u      + h * frc /  | --! 
     633         !--         h     \                                                                                                 /  --! 
     634         !------------------------------------------------------------------------------------------------------------------------! 
    1110635         IF( ln_dynadv_vec .OR. ln_linssh ) THEN      !* Vector form 
    1111636            DO jj = 2, jpjm1 
    1112637               DO ji = fs_2, fs_jpim1   ! vector opt. 
    1113638                  ua_e(ji,jj) = (                                 un_e(ji,jj)   &  
    1114                             &     + rdtbt * (                      zwx(ji,jj)   & 
     639                            &     + rdtbt * (                   zu_spg(ji,jj)   & 
    1115640                            &                                 + zu_trd(ji,jj)   & 
    1116641                            &                                 + zu_frc(ji,jj) ) &  
     
    1118643 
    1119644                  va_e(ji,jj) = (                                 vn_e(ji,jj)   & 
    1120                             &     + rdtbt * (                      zwy(ji,jj)   & 
     645                            &     + rdtbt * (                   zv_spg(ji,jj)   & 
    1121646                            &                                 + zv_trd(ji,jj)   & 
    1122647                            &                                 + zv_frc(ji,jj) ) & 
    1123648                            &   ) * ssvmask(ji,jj) 
    1124   
    1125649               END DO 
    1126650            END DO 
     
    1128652         ELSE                           !* Flux form 
    1129653            DO jj = 2, jpjm1 
    1130                DO ji = fs_2, fs_jpim1   ! vector opt. 
    1131  
    1132                   zhura = hu_0(ji,jj) + zsshu_a(ji,jj) 
    1133                   zhvra = hv_0(ji,jj) + zsshv_a(ji,jj) 
    1134  
    1135                   zhura = ssumask(ji,jj)/(zhura + 1._wp - ssumask(ji,jj)) 
    1136                   zhvra = ssvmask(ji,jj)/(zhvra + 1._wp - ssvmask(ji,jj)) 
    1137  
    1138                   ua_e(ji,jj) = (                hu_e(ji,jj)  *   un_e(ji,jj)   &  
    1139                             &     + rdtbt * ( zhust_e(ji,jj)  *    zwx(ji,jj)   &  
    1140                             &               + zhup2_e(ji,jj)  * zu_trd(ji,jj)   & 
    1141                             &               +    hu_n(ji,jj)  * zu_frc(ji,jj) ) & 
    1142                             &   ) * zhura 
    1143  
    1144                   va_e(ji,jj) = (                hv_e(ji,jj)  *   vn_e(ji,jj)   & 
    1145                             &     + rdtbt * ( zhvst_e(ji,jj)  *    zwy(ji,jj)   & 
    1146                             &               + zhvp2_e(ji,jj)  * zv_trd(ji,jj)   & 
    1147                             &               +    hv_n(ji,jj)  * zv_frc(ji,jj) ) & 
    1148                             &   ) * zhvra 
     654               DO ji = 2, jpim1 
     655                  !                    ! hu_e, hv_e hold depth at jn,  zhup2_e, zhvp2_e hold extrapolated depth at jn+1/2 
     656                  !                    ! backward interpolated depth used in spg terms at jn+1/2 
     657                  zhu_bck = hu_0(ji,jj) + r1_2*r1_e1e2u(ji,jj) * (  e1e2t(ji  ,jj) * zsshp2_e(ji  ,jj)    & 
     658                       &                                          + e1e2t(ji+1,jj) * zsshp2_e(ji+1,jj)  ) * ssumask(ji,jj) 
     659                  zhv_bck = hv_0(ji,jj) + r1_2*r1_e1e2v(ji,jj) * (  e1e2t(ji,jj  ) * zsshp2_e(ji,jj  )    & 
     660                       &                                          + e1e2t(ji,jj+1) * zsshp2_e(ji,jj+1)  ) * ssvmask(ji,jj) 
     661                  !                    ! inverse depth at jn+1 
     662                  z1_hu = ssumask(ji,jj) / ( hu_0(ji,jj) + zsshu_a(ji,jj) + 1._wp - ssumask(ji,jj) ) 
     663                  z1_hv = ssvmask(ji,jj) / ( hv_0(ji,jj) + zsshv_a(ji,jj) + 1._wp - ssvmask(ji,jj) ) 
     664                  ! 
     665                  ua_e(ji,jj) = (               hu_e  (ji,jj) *   un_e (ji,jj)      &  
     666                       &            + rdtbt * (  zhu_bck        * zu_spg (ji,jj)  &   ! 
     667                       &                       + zhup2_e(ji,jj) * zu_trd (ji,jj)  &   ! 
     668                       &                       +  hu_n  (ji,jj) * zu_frc (ji,jj)  )   ) * z1_hu 
     669                  ! 
     670                  va_e(ji,jj) = (               hv_e  (ji,jj) *   vn_e (ji,jj)      & 
     671                       &            + rdtbt * (  zhv_bck        * zv_spg (ji,jj)  &   ! 
     672                       &                       + zhvp2_e(ji,jj) * zv_trd (ji,jj)  &   ! 
     673                       &                       +  hv_n  (ji,jj) * zv_frc (ji,jj)  )   ) * z1_hv 
    1149674               END DO 
    1150675            END DO 
     
    1159684            END DO 
    1160685         ENDIF 
    1161  
    1162           
    1163          IF( .NOT.ln_linssh ) THEN                     !* Update ocean depth (variable volume case only) 
    1164             hu_e (:,:) = hu_0(:,:) + zsshu_a(:,:) 
    1165             hv_e (:,:) = hv_0(:,:) + zsshv_a(:,:) 
    1166             hur_e(:,:) = ssumask(:,:) / ( hu_e(:,:) + 1._wp - ssumask(:,:) ) 
    1167             hvr_e(:,:) = ssvmask(:,:) / ( hv_e(:,:) + 1._wp - ssvmask(:,:) ) 
    1168             ! 
    1169          ENDIF 
    1170          !                                             !* domain lateral boundary 
    1171          CALL lbc_lnk_multi( 'dynspg_ts', ua_e, 'U', -1._wp, va_e , 'V', -1._wp ) 
     686        
     687         IF( .NOT.ln_linssh ) THEN   !* Update ocean depth (variable volume case only) 
     688            hu_e (2:jpim1,2:jpjm1) = hu_0(2:jpim1,2:jpjm1) + zsshu_a(2:jpim1,2:jpjm1) 
     689            hur_e(2:jpim1,2:jpjm1) = ssumask(2:jpim1,2:jpjm1) / ( hu_e(2:jpim1,2:jpjm1) + 1._wp - ssumask(2:jpim1,2:jpjm1) ) 
     690            hv_e (2:jpim1,2:jpjm1) = hv_0(2:jpim1,2:jpjm1) + zsshv_a(2:jpim1,2:jpjm1) 
     691            hvr_e(2:jpim1,2:jpjm1) = ssvmask(2:jpim1,2:jpjm1) / ( hv_e(2:jpim1,2:jpjm1) + 1._wp - ssvmask(2:jpim1,2:jpjm1) ) 
     692            CALL lbc_lnk_multi( 'dynspg_ts', ua_e , 'U', -1._wp, va_e , 'V', -1._wp  & 
     693                 &                         , hu_e , 'U', -1._wp, hv_e , 'V', -1._wp  & 
     694                 &                         , hur_e, 'U', -1._wp, hvr_e, 'V', -1._wp  ) 
     695         ELSE 
     696            CALL lbc_lnk_multi( 'dynspg_ts', ua_e , 'U', -1._wp, va_e , 'V', -1._wp  ) 
     697         ENDIF 
     698         ! 
    1172699         ! 
    1173700         !                                                 ! open boundaries 
     
    1217744      ! Set advection velocity correction: 
    1218745      IF (ln_bt_fw) THEN 
    1219          zwx(:,:) = un_adv(:,:) 
    1220          zwy(:,:) = vn_adv(:,:) 
    1221746         IF( .NOT.( kt == nit000 .AND. neuler==0 ) ) THEN 
    1222             un_adv(:,:) = r1_2 * ( ub2_b(:,:) + zwx(:,:) - atfp * un_bf(:,:) ) 
    1223             vn_adv(:,:) = r1_2 * ( vb2_b(:,:) + zwy(:,:) - atfp * vn_bf(:,:) ) 
    1224             ! 
    1225             ! Update corrective fluxes for next time step: 
    1226             un_bf(:,:)  = atfp * un_bf(:,:) + (zwx(:,:) - ub2_b(:,:)) 
    1227             vn_bf(:,:)  = atfp * vn_bf(:,:) + (zwy(:,:) - vb2_b(:,:)) 
     747            DO jj = 1, jpj 
     748               DO ji = 1, jpi 
     749                  zun_save = un_adv(ji,jj) 
     750                  zvn_save = vn_adv(ji,jj) 
     751                  !                          ! apply the previously computed correction  
     752                  un_adv(ji,jj) = r1_2 * ( ub2_b(ji,jj) + zun_save - atfp * un_bf(ji,jj) ) 
     753                  vn_adv(ji,jj) = r1_2 * ( vb2_b(ji,jj) + zvn_save - atfp * vn_bf(ji,jj) ) 
     754                  !                          ! Update corrective fluxes for next time step 
     755                  un_bf(ji,jj)  = atfp * un_bf(ji,jj) + ( zun_save - ub2_b(ji,jj) ) 
     756                  vn_bf(ji,jj)  = atfp * vn_bf(ji,jj) + ( zvn_save - vb2_b(ji,jj) ) 
     757                  !                          ! Save integrated transport for next computation 
     758                  ub2_b(ji,jj) = zun_save 
     759                  vb2_b(ji,jj) = zvn_save 
     760               END DO 
     761            END DO 
    1228762         ELSE 
    1229             un_bf(:,:) = 0._wp 
    1230             vn_bf(:,:) = 0._wp  
    1231          END IF          
    1232          ! Save integrated transport for next computation 
    1233          ub2_b(:,:) = zwx(:,:) 
    1234          vb2_b(:,:) = zwy(:,:) 
     763            un_bf(:,:) = 0._wp            ! corrective fluxes for next time step set to zero 
     764            vn_bf(:,:) = 0._wp 
     765            ub2_b(:,:) = un_adv(:,:)      ! Save integrated transport for next computation 
     766            vb2_b(:,:) = vn_adv(:,:) 
     767         END IF 
    1235768      ENDIF 
    1236769 
     
    1274807 
    1275808      IF ( ln_wd_dl .and. ln_wd_dl_bc) THEN  
     809         ! need to set lbc here because not done prior time averaging 
     810         CALL lbc_lnk_multi( 'dynspg_ts', zuwdav2, 'U', 1._wp, zvwdav2, 'V', 1._wp) 
    1276811         DO jk = 1, jpkm1 
    1277812            un(:,:,jk) = ( un_adv(:,:)*r1_hu_n(:,:) & 
     
    14771012      REAL(wp) ::   zxr2, zyr2, zcmax   ! local scalar 
    14781013      REAL(wp), DIMENSION(jpi,jpj) ::   zcu 
     1014      INTEGER  :: inum 
    14791015      !!---------------------------------------------------------------------- 
    14801016      ! 
     
    15831119   END SUBROUTINE dyn_spg_ts_init 
    15841120 
     1121    
     1122   SUBROUTINE dyn_cor_2d_init 
     1123      !!--------------------------------------------------------------------- 
     1124      !!                   ***  ROUTINE dyn_cor_2d_init  *** 
     1125      !! 
     1126      !! ** Purpose : Set time splitting options 
     1127      !! Set arrays to remove/compute coriolis trend. 
     1128      !! Do it once during initialization if volume is fixed, else at each long time step. 
     1129      !! Note that these arrays are also used during barotropic loop. These are however frozen 
     1130      !! although they should be updated in the variable volume case. Not a big approximation. 
     1131      !! To remove this approximation, copy lines below inside barotropic loop 
     1132      !! and update depths at T-F points (ht and zhf resp.) at each barotropic time step 
     1133      !! 
     1134      !! Compute zwz = f / ( height of the water colomn ) 
     1135      !!---------------------------------------------------------------------- 
     1136      INTEGER  ::   ji ,jj, jk              ! dummy loop indices 
     1137      REAL(wp) ::   z1_ht 
     1138      REAL(wp), DIMENSION(jpi,jpj) :: zhf 
     1139      !!---------------------------------------------------------------------- 
     1140      ! 
     1141      SELECT CASE( nvor_scheme ) 
     1142      CASE( np_EEN )                != EEN scheme using e3f (energy & enstrophy scheme) 
     1143         SELECT CASE( nn_een_e3f )              !* ff_f/e3 at F-point 
     1144         CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
     1145            DO jj = 1, jpjm1 
     1146               DO ji = 1, jpim1 
     1147                  zwz(ji,jj) =   ( ht_n(ji  ,jj+1) + ht_n(ji+1,jj+1) +                    & 
     1148                       &             ht_n(ji  ,jj  ) + ht_n(ji+1,jj  )   ) * 0.25_wp   
     1149                  IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) 
     1150               END DO 
     1151            END DO 
     1152         CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
     1153            DO jj = 1, jpjm1 
     1154               DO ji = 1, jpim1 
     1155                  zwz(ji,jj) =             (  ht_n  (ji  ,jj+1) + ht_n  (ji+1,jj+1)      & 
     1156                       &                      + ht_n  (ji  ,jj  ) + ht_n  (ji+1,jj  )  )   & 
     1157                       &       / ( MAX( 1._wp,  ssmask(ji  ,jj+1) + ssmask(ji+1,jj+1)      & 
     1158                       &                      + ssmask(ji  ,jj  ) + ssmask(ji+1,jj  )  )   ) 
     1159                  IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) 
     1160               END DO 
     1161            END DO 
     1162         END SELECT 
     1163         CALL lbc_lnk( 'dynspg_ts', zwz, 'F', 1._wp ) 
     1164         ! 
     1165         ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
     1166         DO jj = 2, jpj 
     1167            DO ji = 2, jpi 
     1168               ftne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
     1169               ftnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) 
     1170               ftse(ji,jj) = zwz(ji  ,jj  ) + zwz(ji  ,jj-1) + zwz(ji-1,jj-1) 
     1171               ftsw(ji,jj) = zwz(ji  ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj  ) 
     1172            END DO 
     1173         END DO 
     1174         ! 
     1175      CASE( np_EET )                  != EEN scheme using e3t (energy conserving scheme) 
     1176         ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
     1177         DO jj = 2, jpj 
     1178            DO ji = 2, jpi 
     1179               z1_ht = ssmask(ji,jj) / ( ht_n(ji,jj) + 1._wp - ssmask(ji,jj) ) 
     1180               ftne(ji,jj) = ( ff_f(ji-1,jj  ) + ff_f(ji  ,jj  ) + ff_f(ji  ,jj-1) ) * z1_ht 
     1181               ftnw(ji,jj) = ( ff_f(ji-1,jj-1) + ff_f(ji-1,jj  ) + ff_f(ji  ,jj  ) ) * z1_ht 
     1182               ftse(ji,jj) = ( ff_f(ji  ,jj  ) + ff_f(ji  ,jj-1) + ff_f(ji-1,jj-1) ) * z1_ht 
     1183               ftsw(ji,jj) = ( ff_f(ji  ,jj-1) + ff_f(ji-1,jj-1) + ff_f(ji-1,jj  ) ) * z1_ht 
     1184            END DO 
     1185         END DO 
     1186         ! 
     1187      CASE( np_ENE, np_ENS , np_MIX )  != all other schemes (ENE, ENS, MIX) except ENT ! 
     1188         ! 
     1189         zwz(:,:) = 0._wp 
     1190         zhf(:,:) = 0._wp 
     1191          
     1192         !!gm  assume 0 in both cases (which is almost surely WRONG ! ) as hvatf has been removed  
     1193!!gm    A priori a better value should be something like : 
     1194!!gm          zhf(i,j) = masked sum of  ht(i,j) , ht(i+1,j) , ht(i,j+1) , (i+1,j+1)  
     1195!!gm                     divided by the sum of the corresponding mask  
     1196!!gm  
     1197!!             
     1198         IF( .NOT.ln_sco ) THEN 
     1199   
     1200   !!gm  agree the JC comment  : this should be done in a much clear way 
     1201   
     1202   ! JC: It not clear yet what should be the depth at f-points over land in z-coordinate case 
     1203   !     Set it to zero for the time being  
     1204   !              IF( rn_hmin < 0._wp ) THEN    ;   jk = - INT( rn_hmin )                                      ! from a nb of level 
     1205   !              ELSE                          ;   jk = MINLOC( gdepw_0, mask = gdepw_0 > rn_hmin, dim = 1 )  ! from a depth 
     1206   !              ENDIF 
     1207   !              zhf(:,:) = gdepw_0(:,:,jk+1) 
     1208            ! 
     1209         ELSE 
     1210            ! 
     1211            !zhf(:,:) = hbatf(:,:) 
     1212            DO jj = 1, jpjm1 
     1213               DO ji = 1, jpim1 
     1214                  zhf(ji,jj) =    (   ht_0  (ji,jj  ) + ht_0  (ji+1,jj  )          & 
     1215                       &            + ht_0  (ji,jj+1) + ht_0  (ji+1,jj+1)   )      & 
     1216                       &     / MAX(   ssmask(ji,jj  ) + ssmask(ji+1,jj  )          & 
     1217                       &            + ssmask(ji,jj+1) + ssmask(ji+1,jj+1) , 1._wp  ) 
     1218               END DO 
     1219            END DO 
     1220         ENDIF 
     1221         ! 
     1222         DO jj = 1, jpjm1 
     1223            zhf(:,jj) = zhf(:,jj) * (1._wp- umask(:,jj,1) * umask(:,jj+1,1)) 
     1224         END DO 
     1225         ! 
     1226         DO jk = 1, jpkm1 
     1227            DO jj = 1, jpjm1 
     1228               zhf(:,jj) = zhf(:,jj) + e3f_n(:,jj,jk) * umask(:,jj,jk) * umask(:,jj+1,jk) 
     1229            END DO 
     1230         END DO 
     1231         CALL lbc_lnk( 'dynspg_ts', zhf, 'F', 1._wp ) 
     1232         ! JC: TBC. hf should be greater than 0  
     1233         DO jj = 1, jpj 
     1234            DO ji = 1, jpi 
     1235               IF( zhf(ji,jj) /= 0._wp )   zwz(ji,jj) = 1._wp / zhf(ji,jj) 
     1236            END DO 
     1237         END DO 
     1238         zwz(:,:) = ff_f(:,:) * zwz(:,:) 
     1239      END SELECT 
     1240       
     1241   END SUBROUTINE dyn_cor_2d_init 
     1242 
     1243 
     1244 
     1245   SUBROUTINE dyn_cor_2d( hu_n, hv_n, un_b, vn_b, zhU, zhV,    zu_trd, zv_trd   ) 
     1246      !!--------------------------------------------------------------------- 
     1247      !!                   ***  ROUTINE dyn_cor_2d  *** 
     1248      !! 
     1249      !! ** Purpose : Compute u and v coriolis trends 
     1250      !!---------------------------------------------------------------------- 
     1251      INTEGER  ::   ji ,jj                             ! dummy loop indices 
     1252      REAL(wp) ::   zx1, zx2, zy1, zy2, z1_hu, z1_hv   !   -      - 
     1253      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: hu_n, hv_n, un_b, vn_b, zhU, zhV 
     1254      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: zu_trd, zv_trd 
     1255      !!---------------------------------------------------------------------- 
     1256      SELECT CASE( nvor_scheme ) 
     1257      CASE( np_ENT )                ! enstrophy conserving scheme (f-point) 
     1258         DO jj = 2, jpjm1 
     1259            DO ji = 2, jpim1 
     1260               z1_hu = ssumask(ji,jj) / ( hu_n(ji,jj) + 1._wp - ssumask(ji,jj) ) 
     1261               z1_hv = ssvmask(ji,jj) / ( hv_n(ji,jj) + 1._wp - ssvmask(ji,jj) ) 
     1262               zu_trd(ji,jj) = + r1_4 * r1_e1e2u(ji,jj) * z1_hu                    & 
     1263                  &               * (  e1e2t(ji+1,jj)*ht_n(ji+1,jj)*ff_t(ji+1,jj) * ( vn_b(ji+1,jj) + vn_b(ji+1,jj-1) )   & 
     1264                  &                  + e1e2t(ji  ,jj)*ht_n(ji  ,jj)*ff_t(ji  ,jj) * ( vn_b(ji  ,jj) + vn_b(ji  ,jj-1) )   ) 
     1265                  ! 
     1266               zv_trd(ji,jj) = - r1_4 * r1_e1e2v(ji,jj) * z1_hv                    & 
     1267                  &               * (  e1e2t(ji,jj+1)*ht_n(ji,jj+1)*ff_t(ji,jj+1) * ( un_b(ji,jj+1) + un_b(ji-1,jj+1) )   &  
     1268                  &                  + e1e2t(ji,jj  )*ht_n(ji,jj  )*ff_t(ji,jj  ) * ( un_b(ji,jj  ) + un_b(ji-1,jj  ) )   )  
     1269            END DO   
     1270         END DO   
     1271         !          
     1272      CASE( np_ENE , np_MIX )        ! energy conserving scheme (t-point) ENE or MIX 
     1273         DO jj = 2, jpjm1 
     1274            DO ji = fs_2, fs_jpim1   ! vector opt. 
     1275               zy1 = ( zhV(ji,jj-1) + zhV(ji+1,jj-1) ) * r1_e1u(ji,jj) 
     1276               zy2 = ( zhV(ji,jj  ) + zhV(ji+1,jj  ) ) * r1_e1u(ji,jj) 
     1277               zx1 = ( zhU(ji-1,jj) + zhU(ji-1,jj+1) ) * r1_e2v(ji,jj) 
     1278               zx2 = ( zhU(ji  ,jj) + zhU(ji  ,jj+1) ) * r1_e2v(ji,jj) 
     1279               ! energy conserving formulation for planetary vorticity term 
     1280               zu_trd(ji,jj) =   r1_4 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
     1281               zv_trd(ji,jj) = - r1_4 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 ) 
     1282            END DO 
     1283         END DO 
     1284         ! 
     1285      CASE( np_ENS )                ! enstrophy conserving scheme (f-point) 
     1286         DO jj = 2, jpjm1 
     1287            DO ji = fs_2, fs_jpim1   ! vector opt. 
     1288               zy1 =   r1_8 * ( zhV(ji  ,jj-1) + zhV(ji+1,jj-1) & 
     1289                 &            + zhV(ji  ,jj  ) + zhV(ji+1,jj  ) ) * r1_e1u(ji,jj) 
     1290               zx1 = - r1_8 * ( zhU(ji-1,jj  ) + zhU(ji-1,jj+1) & 
     1291                 &            + zhU(ji  ,jj  ) + zhU(ji  ,jj+1) ) * r1_e2v(ji,jj) 
     1292               zu_trd(ji,jj)  = zy1 * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
     1293               zv_trd(ji,jj)  = zx1 * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
     1294            END DO 
     1295         END DO 
     1296         ! 
     1297      CASE( np_EET , np_EEN )      ! energy & enstrophy scheme (using e3t or e3f)          
     1298         DO jj = 2, jpjm1 
     1299            DO ji = fs_2, fs_jpim1   ! vector opt. 
     1300               zu_trd(ji,jj) = + r1_12 * r1_e1u(ji,jj) * (  ftne(ji,jj  ) * zhV(ji  ,jj  ) & 
     1301                &                                         + ftnw(ji+1,jj) * zhV(ji+1,jj  ) & 
     1302                &                                         + ftse(ji,jj  ) * zhV(ji  ,jj-1) & 
     1303                &                                         + ftsw(ji+1,jj) * zhV(ji+1,jj-1) ) 
     1304               zv_trd(ji,jj) = - r1_12 * r1_e2v(ji,jj) * (  ftsw(ji,jj+1) * zhU(ji-1,jj+1) & 
     1305                &                                         + ftse(ji,jj+1) * zhU(ji  ,jj+1) & 
     1306                &                                         + ftnw(ji,jj  ) * zhU(ji-1,jj  ) & 
     1307                &                                         + ftne(ji,jj  ) * zhU(ji  ,jj  ) ) 
     1308            END DO 
     1309         END DO 
     1310         ! 
     1311      END SELECT 
     1312      ! 
     1313   END SUBROUTINE dyn_cor_2D 
     1314 
     1315 
     1316   SUBROUTINE wad_tmsk( pssh, ptmsk ) 
     1317      !!---------------------------------------------------------------------- 
     1318      !!                  ***  ROUTINE wad_lmt  *** 
     1319      !!                     
     1320      !! ** Purpose :   set wetting & drying mask at tracer points  
     1321      !!              for the current barotropic sub-step  
     1322      !! 
     1323      !! ** Method  :   ???  
     1324      !! 
     1325      !! ** Action  :  ptmsk : wetting & drying t-mask 
     1326      !!---------------------------------------------------------------------- 
     1327      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::   pssh    ! 
     1328      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::   ptmsk   ! 
     1329      ! 
     1330      INTEGER  ::   ji, jj   ! dummy loop indices 
     1331      !!---------------------------------------------------------------------- 
     1332      ! 
     1333      IF( ln_wd_dl_rmp ) THEN      
     1334         DO jj = 1, jpj 
     1335            DO ji = 1, jpi                     
     1336               IF    ( pssh(ji,jj) + ht_0(ji,jj) >  2._wp * rn_wdmin1 ) THEN  
     1337                  !           IF    ( pssh(ji,jj) + ht_0(ji,jj) >          rn_wdmin2 ) THEN  
     1338                  ptmsk(ji,jj) = 1._wp 
     1339               ELSEIF( pssh(ji,jj) + ht_0(ji,jj) >          rn_wdmin1 ) THEN 
     1340                  ptmsk(ji,jj) = TANH( 50._wp*( ( pssh(ji,jj) + ht_0(ji,jj) -  rn_wdmin1 )*r_rn_wdmin1) ) 
     1341               ELSE  
     1342                  ptmsk(ji,jj) = 0._wp 
     1343               ENDIF 
     1344            END DO 
     1345         END DO 
     1346      ELSE   
     1347         DO jj = 1, jpj 
     1348            DO ji = 1, jpi                               
     1349               IF ( pssh(ji,jj) + ht_0(ji,jj) >  rn_wdmin1 ) THEN   ;   ptmsk(ji,jj) = 1._wp 
     1350               ELSE                                                 ;   ptmsk(ji,jj) = 0._wp 
     1351               ENDIF 
     1352            END DO 
     1353         END DO 
     1354      ENDIF 
     1355      ! 
     1356   END SUBROUTINE wad_tmsk 
     1357 
     1358 
     1359   SUBROUTINE wad_Umsk( pTmsk, phU, phV, pu, pv, pUmsk, pVmsk ) 
     1360      !!---------------------------------------------------------------------- 
     1361      !!                  ***  ROUTINE wad_lmt  *** 
     1362      !!                     
     1363      !! ** Purpose :   set wetting & drying mask at tracer points  
     1364      !!              for the current barotropic sub-step  
     1365      !! 
     1366      !! ** Method  :   ???  
     1367      !! 
     1368      !! ** Action  :  ptmsk : wetting & drying t-mask 
     1369      !!---------------------------------------------------------------------- 
     1370      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::   pTmsk              ! W & D t-mask 
     1371      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   phU, phV, pu, pv   ! ocean velocities and transports 
     1372      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   pUmsk, pVmsk       ! W & D u- and v-mask 
     1373      ! 
     1374      INTEGER  ::   ji, jj   ! dummy loop indices 
     1375      !!---------------------------------------------------------------------- 
     1376      ! 
     1377      DO jj = 1, jpj 
     1378         DO ji = 1, jpim1   ! not jpi-column 
     1379            IF ( phU(ji,jj) > 0._wp ) THEN   ;   pUmsk(ji,jj) = pTmsk(ji  ,jj)  
     1380            ELSE                             ;   pUmsk(ji,jj) = pTmsk(ji+1,jj)   
     1381            ENDIF 
     1382            phU(ji,jj) = pUmsk(ji,jj)*phU(ji,jj) 
     1383            pu (ji,jj) = pUmsk(ji,jj)*pu (ji,jj) 
     1384         END DO 
     1385      END DO 
     1386      ! 
     1387      DO jj = 1, jpjm1   ! not jpj-row 
     1388         DO ji = 1, jpi 
     1389            IF ( phV(ji,jj) > 0._wp ) THEN   ;   pVmsk(ji,jj) = pTmsk(ji,jj  ) 
     1390            ELSE                             ;   pVmsk(ji,jj) = pTmsk(ji,jj+1)   
     1391            ENDIF 
     1392            phV(ji,jj) = pVmsk(ji,jj)*phV(ji,jj)  
     1393            pv (ji,jj) = pVmsk(ji,jj)*pv (ji,jj) 
     1394         END DO 
     1395      END DO 
     1396      ! 
     1397   END SUBROUTINE wad_Umsk 
     1398 
     1399 
     1400   SUBROUTINE wad_spg( sshn, zcpx, zcpy ) 
     1401      !!--------------------------------------------------------------------- 
     1402      !!                   ***  ROUTINE  wad_sp  *** 
     1403      !! 
     1404      !! ** Purpose :  
     1405      !!---------------------------------------------------------------------- 
     1406      INTEGER  ::   ji ,jj               ! dummy loop indices 
     1407      LOGICAL  ::   ll_tmp1, ll_tmp2 
     1408      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: sshn 
     1409      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: zcpx, zcpy 
     1410      !!---------------------------------------------------------------------- 
     1411      DO jj = 2, jpjm1 
     1412         DO ji = 2, jpim1  
     1413            ll_tmp1 = MIN(  sshn(ji,jj)               ,  sshn(ji+1,jj) ) >                & 
     1414                 &      MAX( -ht_0(ji,jj)               , -ht_0(ji+1,jj) ) .AND.            & 
     1415                 &      MAX(  sshn(ji,jj) + ht_0(ji,jj) ,  sshn(ji+1,jj) + ht_0(ji+1,jj) )  & 
     1416                 &                                                         > rn_wdmin1 + rn_wdmin2 
     1417            ll_tmp2 = ( ABS( sshn(ji+1,jj)            -  sshn(ji  ,jj))  > 1.E-12 ).AND.( & 
     1418                 &      MAX(   sshn(ji,jj)              ,  sshn(ji+1,jj) ) >                & 
     1419                 &      MAX(  -ht_0(ji,jj)              , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 
     1420            IF(ll_tmp1) THEN 
     1421               zcpx(ji,jj) = 1.0_wp 
     1422            ELSEIF(ll_tmp2) THEN 
     1423               ! no worries about  sshn(ji+1,jj) -  sshn(ji  ,jj) = 0, it won't happen ! here 
     1424               zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_0(ji+1,jj) - sshn(ji,jj) - ht_0(ji,jj)) & 
     1425                    &    / (sshn(ji+1,jj) - sshn(ji  ,jj)) ) 
     1426               zcpx(ji,jj) = max(min( zcpx(ji,jj) , 1.0_wp),0.0_wp) 
     1427            ELSE 
     1428               zcpx(ji,jj) = 0._wp 
     1429            ENDIF 
     1430            ! 
     1431            ll_tmp1 = MIN(  sshn(ji,jj)               ,  sshn(ji,jj+1) ) >                & 
     1432                 &      MAX( -ht_0(ji,jj)               , -ht_0(ji,jj+1) ) .AND.            & 
     1433                 &      MAX(  sshn(ji,jj) + ht_0(ji,jj) ,  sshn(ji,jj+1) + ht_0(ji,jj+1) )  & 
     1434                 &                                                       > rn_wdmin1 + rn_wdmin2 
     1435            ll_tmp2 = ( ABS( sshn(ji,jj)              -  sshn(ji,jj+1))  > 1.E-12 ).AND.( & 
     1436                 &      MAX(   sshn(ji,jj)              ,  sshn(ji,jj+1) ) >                & 
     1437                 &      MAX(  -ht_0(ji,jj)              , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 
     1438             
     1439            IF(ll_tmp1) THEN 
     1440               zcpy(ji,jj) = 1.0_wp 
     1441            ELSE IF(ll_tmp2) THEN 
     1442               ! no worries about  sshn(ji,jj+1) -  sshn(ji,jj  ) = 0, it won't happen ! here 
     1443               zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_0(ji,jj+1) - sshn(ji,jj) - ht_0(ji,jj)) & 
     1444                    &             / (sshn(ji,jj+1) - sshn(ji,jj  )) ) 
     1445               zcpy(ji,jj) = MAX(  0._wp , MIN( zcpy(ji,jj) , 1.0_wp )  ) 
     1446            ELSE 
     1447               zcpy(ji,jj) = 0._wp 
     1448            ENDIF 
     1449         END DO 
     1450      END DO 
     1451             
     1452   END SUBROUTINE wad_spg 
     1453      
     1454 
     1455 
     1456   SUBROUTINE dyn_drg_init( pu_RHSi, pv_RHSi, pCdU_u, pCdU_v ) 
     1457      !!---------------------------------------------------------------------- 
     1458      !!                  ***  ROUTINE dyn_drg_init  *** 
     1459      !!                     
     1460      !! ** Purpose : - add the baroclinic top/bottom drag contribution to  
     1461      !!              the baroclinic part of the barotropic RHS 
     1462      !!              - compute the barotropic drag coefficients 
     1463      !! 
     1464      !! ** Method  :   computation done over the INNER domain only  
     1465      !!---------------------------------------------------------------------- 
     1466      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   pu_RHSi, pv_RHSi   ! baroclinic part of the barotropic RHS 
     1467      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::   pCdU_u , pCdU_v    ! barotropic drag coefficients 
     1468      ! 
     1469      INTEGER  ::   ji, jj   ! dummy loop indices 
     1470      INTEGER  ::   ikbu, ikbv, iktu, iktv 
     1471      REAL(wp) ::   zztmp 
     1472      REAL(wp), DIMENSION(jpi,jpj) ::   zu_i, zv_i 
     1473      !!---------------------------------------------------------------------- 
     1474      ! 
     1475      !                    !==  Set the barotropic drag coef.  ==! 
     1476      ! 
     1477      IF( ln_isfcav ) THEN          ! top+bottom friction (ocean cavities) 
     1478          
     1479         DO jj = 2, jpjm1 
     1480            DO ji = 2, jpim1     ! INNER domain 
     1481               pCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) + rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) 
     1482               pCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) + rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) 
     1483            END DO 
     1484         END DO 
     1485      ELSE                          ! bottom friction only 
     1486         DO jj = 2, jpjm1 
     1487            DO ji = 2, jpim1  ! INNER domain 
     1488               pCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) 
     1489               pCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) 
     1490            END DO 
     1491         END DO 
     1492      ENDIF 
     1493      ! 
     1494      !                    !==  BOTTOM stress contribution from baroclinic velocities  ==! 
     1495      ! 
     1496      IF( ln_bt_fw ) THEN                 ! FORWARD integration: use NOW bottom baroclinic velocities 
     1497          
     1498         DO jj = 2, jpjm1 
     1499            DO ji = 2, jpim1  ! INNER domain 
     1500               ikbu = mbku(ji,jj)        
     1501               ikbv = mbkv(ji,jj)     
     1502               zu_i(ji,jj) = un(ji,jj,ikbu) - un_b(ji,jj) 
     1503               zv_i(ji,jj) = vn(ji,jj,ikbv) - vn_b(ji,jj) 
     1504            END DO 
     1505         END DO 
     1506      ELSE                                ! CENTRED integration: use BEFORE bottom baroclinic velocities 
     1507          
     1508         DO jj = 2, jpjm1 
     1509            DO ji = 2, jpim1   ! INNER domain 
     1510               ikbu = mbku(ji,jj)        
     1511               ikbv = mbkv(ji,jj)     
     1512               zu_i(ji,jj) = ub(ji,jj,ikbu) - ub_b(ji,jj) 
     1513               zv_i(ji,jj) = vb(ji,jj,ikbv) - vb_b(ji,jj) 
     1514            END DO 
     1515         END DO 
     1516      ENDIF 
     1517      ! 
     1518      IF( ln_wd_il ) THEN      ! W/D : use the "clipped" bottom friction   !!gm   explain WHY, please ! 
     1519         zztmp = -1._wp / rdtbt 
     1520         DO jj = 2, jpjm1 
     1521            DO ji = 2, jpim1    ! INNER domain 
     1522               pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + zu_i(ji,jj) *  wdrampu(ji,jj) * MAX(                                 &  
     1523                    &                              r1_hu_n(ji,jj) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) , zztmp  ) 
     1524               pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + zv_i(ji,jj) *  wdrampv(ji,jj) * MAX(                                 &  
     1525                    &                              r1_hv_n(ji,jj) * r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) , zztmp  ) 
     1526            END DO 
     1527         END DO 
     1528      ELSE                    ! use "unclipped" drag (even if explicit friction is used in 3D calculation) 
     1529          
     1530         DO jj = 2, jpjm1 
     1531            DO ji = 2, jpim1    ! INNER domain 
     1532               pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + r1_hu_n(ji,jj) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * zu_i(ji,jj) 
     1533               pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + r1_hv_n(ji,jj) * r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * zv_i(ji,jj) 
     1534            END DO 
     1535         END DO 
     1536      END IF 
     1537      ! 
     1538      !                    !==  TOP stress contribution from baroclinic velocities  ==!   (no W/D case) 
     1539      ! 
     1540      IF( ln_isfcav ) THEN 
     1541         ! 
     1542         IF( ln_bt_fw ) THEN                ! FORWARD integration: use NOW top baroclinic velocity 
     1543             
     1544            DO jj = 2, jpjm1 
     1545               DO ji = 2, jpim1   ! INNER domain 
     1546                  iktu = miku(ji,jj) 
     1547                  iktv = mikv(ji,jj) 
     1548                  zu_i(ji,jj) = un(ji,jj,iktu) - un_b(ji,jj) 
     1549                  zv_i(ji,jj) = vn(ji,jj,iktv) - vn_b(ji,jj) 
     1550               END DO 
     1551            END DO 
     1552         ELSE                                ! CENTRED integration: use BEFORE top baroclinic velocity 
     1553             
     1554            DO jj = 2, jpjm1 
     1555               DO ji = 2, jpim1      ! INNER domain 
     1556                  iktu = miku(ji,jj) 
     1557                  iktv = mikv(ji,jj) 
     1558                  zu_i(ji,jj) = ub(ji,jj,iktu) - ub_b(ji,jj) 
     1559                  zv_i(ji,jj) = vb(ji,jj,iktv) - vb_b(ji,jj) 
     1560               END DO 
     1561            END DO 
     1562         ENDIF 
     1563         ! 
     1564         !                    ! use "unclipped" top drag (even if explicit friction is used in 3D calculation) 
     1565          
     1566         DO jj = 2, jpjm1 
     1567            DO ji = 2, jpim1    ! INNER domain 
     1568               pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + r1_hu_n(ji,jj) * r1_2*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * zu_i(ji,jj) 
     1569               pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + r1_hv_n(ji,jj) * r1_2*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * zv_i(ji,jj) 
     1570            END DO 
     1571         END DO 
     1572         ! 
     1573      ENDIF 
     1574      ! 
     1575   END SUBROUTINE dyn_drg_init 
     1576 
     1577   SUBROUTINE ts_bck_interp( jn, ll_init,       &   ! <== in 
     1578      &                      za0, za1, za2, za3 )   ! ==> out 
     1579      !!---------------------------------------------------------------------- 
     1580      INTEGER ,INTENT(in   ) ::   jn                   ! index of sub time step 
     1581      LOGICAL ,INTENT(in   ) ::   ll_init              ! 
     1582      REAL(wp),INTENT(  out) ::   za0, za1, za2, za3   ! Half-step back interpolation coefficient 
     1583      ! 
     1584      REAL(wp) ::   zepsilon, zgamma                   !   -      - 
     1585      !!---------------------------------------------------------------------- 
     1586      !                             ! set Half-step back interpolation coefficient 
     1587      IF    ( jn==1 .AND. ll_init ) THEN   !* Forward-backward 
     1588         za0 = 1._wp                         
     1589         za1 = 0._wp                            
     1590         za2 = 0._wp 
     1591         za3 = 0._wp 
     1592      ELSEIF( jn==2 .AND. ll_init ) THEN   !* AB2-AM3 Coefficients; bet=0 ; gam=-1/6 ; eps=1/12 
     1593         za0 = 1.0833333333333_wp                 ! za0 = 1-gam-eps 
     1594         za1 =-0.1666666666666_wp                 ! za1 = gam 
     1595         za2 = 0.0833333333333_wp                 ! za2 = eps 
     1596         za3 = 0._wp               
     1597      ELSE                                 !* AB3-AM4 Coefficients; bet=0.281105 ; eps=0.013 ; gam=0.0880  
     1598         IF( rn_bt_alpha == 0._wp ) THEN      ! Time diffusion   
     1599            za0 = 0.614_wp                        ! za0 = 1/2 +   gam + 2*eps 
     1600            za1 = 0.285_wp                        ! za1 = 1/2 - 2*gam - 3*eps 
     1601            za2 = 0.088_wp                        ! za2 = gam 
     1602            za3 = 0.013_wp                        ! za3 = eps 
     1603         ELSE                                 ! no time diffusion 
     1604            zepsilon = 0.00976186_wp - 0.13451357_wp * rn_bt_alpha 
     1605            zgamma   = 0.08344500_wp - 0.51358400_wp * rn_bt_alpha 
     1606            za0 = 0.5_wp + zgamma + 2._wp * rn_bt_alpha + 2._wp * zepsilon 
     1607            za1 = 1._wp - za0 - zgamma - zepsilon 
     1608            za2 = zgamma 
     1609            za3 = zepsilon 
     1610         ENDIF  
     1611      ENDIF 
     1612   END SUBROUTINE ts_bck_interp 
     1613 
     1614 
    15851615   !!====================================================================== 
    15861616END MODULE dynspg_ts 
Note: See TracChangeset for help on using the changeset viewer.