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 11380 for NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_DYN_optimization/src/OCE/DYN/dynspg_ts.F90 – NEMO

Ignore:
Timestamp:
2019-07-31T15:56:02+02:00 (5 years ago)
Author:
girrmann
Message:

dev_r10984_HPC-13 : adding extra halos in dyn_spg_ts is now possible, only works with a single halo when used with tide or bdy, see #2308

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_DYN_optimization/src/OCE/DYN/dynspg_ts.F90

    r11372 r11380  
    6464   USE diatmb          ! Top,middle,bottom output 
    6565 
    66    USE iom   ! to remove 
    6766 
    6867   IMPLICIT NONE 
     
    7877   REAL(wp),SAVE :: rdtbt       ! Barotropic time step 
    7978   ! 
    80    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)   ::   wgtbtp1, wgtbtp2   ! 1st & 2nd weights used in time filtering of barotropic fields 
    81    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zwz                ! ff_f/h at F points 
    82    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ftnw, ftne         ! triad of coriolis parameter 
    83    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ftsw, ftse         ! (only used with een vorticity scheme) 
     79   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:)   ::  wgtbtp1, wgtbtp2   ! 1st & 2nd weights used in time filtering of barotropic fields 
     80   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  zwz                ! ff_f/h at F points 
     81   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftnw, ftne         ! triad of coriolis parameter 
     82   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftsw, ftse         ! (only used with een vorticity scheme) 
     83 
     84   !! Arrays at barotropic time step:                   ! befbefore! before !  now   ! after  ! 
     85   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ubb_e  ,  ub_e  ,  un_e  , ua_e   !: u-external velocity 
     86   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   vbb_e  ,  vb_e  ,  vn_e  , va_e   !: v-external velocity 
     87   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshbb_e,  sshb_e,  sshn_e, ssha_e !: external ssh 
     88   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::                              hu_e   !: external u-depth 
     89   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::                              hv_e   !: external v-depth 
     90   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::                              hur_e  !: inverse of u-depth 
     91   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::                              hvr_e  !: inverse of v-depth 
     92   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_b  , vb2_b          !: Half step fluxes (ln_bt_fw=T) 
     93   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_bf  , vn_bf          !: Asselin filtered half step fluxes (ln_bt_fw=T) 
     94 
     95   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ht_0_xtd    , hu_0_xtd    , hv_0_xtd 
     96   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::                 hu_n_xtd    , hv_n_xtd 
     97   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   r1_e1e2t_xtd, r1_e1e2u_xtd, r1_e1e2v_xtd 
     98   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   e1e2t_xtd 
     99   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   e2u_xtd   , e1v_xtd 
     100   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   r1_e1u_xtd, r1_e2v_xtd 
     101   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ssmask_xtd, ssumask_xtd, ssvmask_xtd 
     102   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ff_t_xtd   ! used in ENT scheme 
     103 
     104#if defined key_agrif 
     105   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_i_b, vb2_i_b         !: Half step time integrated fluxes  
     106#endif 
    84107 
    85108   REAL(wp) ::   r1_12 = 1._wp / 12._wp   ! local ratios 
     
    101124      !!                  ***  routine dyn_spg_ts_alloc  *** 
    102125      !!---------------------------------------------------------------------- 
    103       INTEGER :: ierr(3) 
     126      INTEGER :: ierr(6) 
     127      INTEGER :: idbi, idei, idbj, idej   ! lower/upper bounds of extended arrays 
    104128      !!---------------------------------------------------------------------- 
    105129      ierr(:) = 0 
    106       ! 
    107       ALLOCATE( wgtbtp1(3*nn_baro), wgtbtp2(3*nn_baro), zwz(jpi,jpj), STAT=ierr(1) ) 
    108       IF( ln_dynvor_een .OR. ln_dynvor_eeT )   & 
    109          &     ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , ftsw(jpi,jpj) , ftse(jpi,jpj), STAT=ierr(2)   ) 
     130      idbi = 1   - nn_hlts   ;   idbj = 1   - nn_hlts 
     131      idei = jpi + nn_hlts   ;   idej = jpj + nn_hlts 
     132      ! 
     133      ALLOCATE( wgtbtp1(3*nn_baro), wgtbtp2(3*nn_baro), zwz(idbi:idei,idbj:idej), STAT=ierr(1) ) 
     134      IF( ln_dynvor_een .OR. ln_dynvor_eeT ) THEN 
     135         ALLOCATE( ftnw(idbi:idei,idbj:idej) , ftne(idbi:idei,idbj:idej) , ftsw(idbi:idei,idbj:idej) , ftse(idbi:idei,idbj:idej) & 
     136         &                                      , STAT=ierr(2) ) 
     137      ELSEIF( ln_dynvor_enT ) THEN 
     138         ALLOCATE( ff_t_xtd(idbi:idei,idbj:idej), STAT=ierr(2) ) 
     139      END IF 
    110140         ! 
    111141      ALLOCATE( un_adv(jpi,jpj), vn_adv(jpi,jpj)                    , STAT=ierr(3) ) 
     142      ALLOCATE( ssha_e(idbi:idei,idbj:idej), sshn_e(idbi:idei,idbj:idej), sshb_e(idbi:idei,idbj:idej), sshbb_e(idbi:idei,idbj:idej) & 
     143         &      , ua_e(idbi:idei,idbj:idej),   un_e(idbi:idei,idbj:idej),   ub_e(idbi:idei,idbj:idej),   ubb_e(idbi:idei,idbj:idej) & 
     144         &      , va_e(idbi:idei,idbj:idej),   vn_e(idbi:idei,idbj:idej),   vb_e(idbi:idei,idbj:idej),   vbb_e(idbi:idei,idbj:idej) & 
     145         &      , hu_e(idbi:idei,idbj:idej),  hur_e(idbi:idei,idbj:idej),   hv_e(idbi:idei,idbj:idej),   hvr_e(idbi:idei,idbj:idej) & 
     146         &      , STAT=ierr(4) ) 
     147         ! 
     148      ALLOCATE( ub2_b(jpi,jpj), vb2_b(jpi,jpj), un_bf(jpi,jpj), vn_bf(jpi,jpj)     , STAT=ierr(5) ) 
     149 
     150#if defined key_agrif 
     151      ALLOCATE( ub2_i_b(jpi,jpj), vb2_i_b(jpi,jpj)                                  , STAT=ierr(5) ) 
     152#endif 
     153      ALLOCATE( ht_0_xtd    (idbi:idei,idbj:idej), hu_0_xtd    (idbi:idei,idbj:idej), hv_0_xtd    (idbi:idei,idbj:idej) & 
     154         &    , r1_e1e2t_xtd(idbi:idei,idbj:idej), r1_e1e2u_xtd(idbi:idei,idbj:idej), r1_e1e2v_xtd(idbi:idei,idbj:idej) & 
     155         &    , ssmask_xtd  (idbi:idei,idbj:idej), ssumask_xtd (idbi:idei,idbj:idej), ssvmask_xtd (idbi:idei,idbj:idej) & 
     156         &    , e1e2t_xtd   (idbi:idei,idbj:idej), e2u_xtd     (idbi:idei,idbj:idej), e1v_xtd     (idbi:idei,idbj:idej) & 
     157         &    , r1_e1u_xtd  (idbi:idei,idbj:idej), r1_e2v_xtd  (idbi:idei,idbj:idej)                                    & 
     158         &    , STAT=ierr(6) ) 
    112159      ! 
    113160      dyn_spg_ts_alloc = MAXVAL( ierr(:) ) 
     
    146193      INTEGER, INTENT(in)  ::   kt   ! ocean time-step index 
    147194      ! 
    148       INTEGER  ::   ji, jj, jk, jn        ! dummy loop indices 
     195      INTEGER  ::   ji, jj, jk, jm        ! dummy loop indices 
    149196      LOGICAL  ::   ll_fw_start           ! =T : forward integration  
    150197      LOGICAL  ::   ll_init               ! =T : special startup of 2d equations 
     
    155202      REAL(wp) ::   zhu_bck, zhv_bck, zhdiv         !   -      - 
    156203      REAL(wp) ::   zun_save, zvn_save              !   -      - 
    157       REAL(wp), DIMENSION(jpi,jpj) :: zu_trd, zu_frc, zu_spg, zssh_frc 
    158       REAL(wp), DIMENSION(jpi,jpj) :: zv_trd, zv_frc, zv_spg 
    159       REAL(wp), DIMENSION(jpi,jpj) :: zsshu_a, zhup2_e, zhtp2_e 
    160       REAL(wp), DIMENSION(jpi,jpj) :: zsshv_a, zhvp2_e, zsshp2_e 
    161       REAL(wp), DIMENSION(jpi,jpj) :: zCdU_u, zCdU_v   ! top/bottom stress at u- & v-points 
    162       REAL(wp), DIMENSION(jpi,jpj) :: zhU, zhV         ! fluxes 
     204      ! 
     205      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zu_trd, zssh_frc 
     206      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zv_trd 
     207      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zhU   , zhV 
     208      ! 
     209      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: hu_n_xtd, hv_n_xtd 
     210      ! 
     211      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zu_spg , zv_spg 
     212      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zu_frc , zv_frc 
     213      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zsshu_a, zhup2_e, zhtp2_e 
     214      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zsshv_a, zhvp2_e, zsshp2_e 
     215      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zCdU_u , zCdU_v   ! top/bottom stress at u- & v-points 
     216 
    163217      ! 
    164218      REAL(wp) ::   zwdramp                     ! local scalar - only used if ln_wd_dl = .True.  
     
    170224      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ztwdmask, zuwdmask, zvwdmask ! ROMS wetting and drying masks at t,u,v points 
    171225      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zuwdav2, zvwdav2    ! averages over the sub-steps of zuwdmask and zvwdmask 
    172       !!---------------------------------------------------------------------- 
    173       ! 
     226 
     227 
     228      INTEGER  :: idbi, idei, idbj, idej   ! lower/upper bounds of extended arrays 
     229      INTEGER  :: ixtd                     ! number of halos over which the solution is currently correct 
     230      INTEGER  :: ibi, iei, ibj, iej       ! lower and upper bounds over which the solution is currently correct 
     231      !!---------------------------------------------------------------------- 
     232      ! 
     233 
     234 
    174235      IF( ln_wd_il ) ALLOCATE( zcpx(jpi,jpj), zcpy(jpi,jpj) ) 
    175236      !                                         !* Allocate temporary arrays 
    176       IF( ln_wd_dl ) ALLOCATE( ztwdmask(jpi,jpj), zuwdmask(jpi,jpj), zvwdmask(jpi,jpj), zuwdav2(jpi,jpj), zvwdav2(jpi,jpj)) 
     237      IF( ln_wd_dl ) ALLOCATE( ztwdmask(jpi,jpj), zuwdmask(jpi,jpj), zvwdmask(jpi,jpj), zuwdav2(jpi,jpj), zvwdav2(jpi,jpj) ) 
     238       
     239      idbi = 1   - nn_hlts   ;   idbj = 1   - nn_hlts 
     240      idei = jpi + nn_hlts   ;   idej = jpj + nn_hlts 
     241      !                                  ! allocate local arrays 
     242      ALLOCATE( zu_spg  (idbi:idei,idbj:idej), zv_spg  (idbi:idei,idbj:idej)  & 
     243         &    , zsshu_a (idbi:idei,idbj:idej), zsshv_a (idbi:idei,idbj:idej)  & 
     244         &    , zhup2_e (idbi:idei,idbj:idej), zhvp2_e (idbi:idei,idbj:idej)  & 
     245         &    ,  zCdU_u (idbi:idei,idbj:idej), zCdU_v  (idbi:idei,idbj:idej)  & 
     246         &    , zhtp2_e (idbi:idei,idbj:idej), zsshp2_e(idbi:idei,idbj:idej)  &  
     247         &    , zu_trd  (idbi:idei,idbj:idej), zu_frc  (idbi:idei,idbj:idej)  & 
     248         &    , zv_trd  (idbi:idei,idbj:idej), zv_frc  (idbi:idei,idbj:idej)  & 
     249         &    , zhU     (idbi:idei,idbj:idej), zhV     (idbi:idei,idbj:idej)  & 
     250         &    , zssh_frc(idbi:idei,idbj:idej)                                 ) 
     251      !                                  ! allocate redundant arrays 
     252      ALLOCATE( hu_n_xtd(idbi:idei,idbj:idej), hv_n_xtd(idbi:idei,idbj:idej)  ) 
    177253      ! 
    178254      zmdi=1.e+20                               !  missing data indicator for masking 
     
    227303      !                                   !=  zu_frc =  1/H e3*d/dt(Ua)  =!  (Vertical mean of Ua, the 3D trends) 
    228304      !                                   !  ---------------------------  ! 
    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(:,:) 
     305      zu_frc(1:jpi,1:jpj) = SUM( e3u_n(:,:,:) * ua(:,:,:) * umask(:,:,:) , DIM=3 ) * r1_hu_n(:,:) 
     306      zv_frc(1:jpi,1:jpj) = SUM( e3v_n(:,:,:) * va(:,:,:) * vmask(:,:,:) , DIM=3 ) * r1_hv_n(:,:) 
    231307      ! 
    232308      ! 
    233309      !                                   !=  Ua => baroclinic trend  =!   (remove its vertical mean) 
    234310      DO jk = 1, jpkm1                    !  ------------------------  ! 
    235          ua(:,:,jk) = ( ua(:,:,jk) - zu_frc(:,:) ) * umask(:,:,jk) 
    236          va(:,:,jk) = ( va(:,:,jk) - zv_frc(:,:) ) * vmask(:,:,jk) 
     311         ua(:,:,jk) = ( ua(:,:,jk) - zu_frc(1:jpi,1:jpj) ) * umask(:,:,jk) 
     312         va(:,:,jk) = ( va(:,:,jk) - zv_frc(1:jpi,1:jpj) ) * vmask(:,:,jk) 
    237313      END DO 
    238314       
     
    243319      !                                   !  -------------------------------------------------  ! 
    244320      ! 
    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 
     321      ! Set zwz, the barotropic Coriolis force coefficient 
     322      ! recompute zwz = f/depth  at every time step for (.NOT.ln_linssh) as the water colomn height changes 
     323      IF( kt == nit000 .OR. .NOT. ln_linssh )   CALL dyn_cor_2d_init( idbi, idei, idbj, idej ) 
    247324      ! 
    248325      !                                         !* 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 
     326      zhU(1:jpi,1:jpj) = un_b(:,:) * hu_n(:,:) * e2u(:,:)        ! now fluxes  
     327      zhV(1:jpi,1:jpj) = vn_b(:,:) * hv_n(:,:) * e1v(:,:)        ! NB: FULL domain : put a value in last row and column 
     328      ! 
     329      !                            ! ht_n, hu_n, hv_n, un_b, vn_b are of size    1:jpi      1:jpj 
     330      !                            ! zhU, zhV, zu_trd, zv_trd     are of size idbi:idei  idbj:idej 
     331      CALL dyn_cor_2d( ht_n, hu_n, hv_n, un_b, vn_b, zhU, zhV,  1   , jpi , 1   ,  jpj   &   ! <<== in 
     332         &                                   , zu_trd, zv_trd,  idbi, idei, idbj, idej   )   ! ==>> out 
    254333      ! 
    255334      IF( .NOT.ln_linssh ) THEN                 !* surface pressure gradient   (variable volume only) 
     
    285364      !                                   !=  Add bottom stress contribution from baroclinic velocities  =! 
    286365      !                                   !  -----------------------------------------------------------  ! 
    287       CALL dyn_drg_init( zu_frc, zv_frc,  zCdU_u, zCdU_v )      ! also provide the barotropic drag coefficients 
     366      CALL drg_init( idbi, idei, idbj, idej,  zu_frc, zv_frc,  zCdU_u, zCdU_v )   ! also provide the barotropic drag coefficients 
     367      !                                                                           ! arrays are computed on inner domain 
    288368      ! 
    289369      !                                   !=  Add atmospheric pressure forcing  =! 
     
    335415      !                                   ! ---------------------------------------------------  ! 
    336416      IF (ln_bt_fw) THEN                          ! FORWARD integration: use kt+1/2 fluxes (NOW+1/2) 
    337          zssh_frc(:,:) = r1_rau0 * ( emp(:,:)             - rnf(:,:)              + fwfisf(:,:)                  ) 
     417         zssh_frc(1:jpi,1:jpj) = r1_rau0 * ( emp(:,:)             - rnf(:,:)              + fwfisf(:,:)                  ) 
    338418      ELSE                                        ! CENTRED integration: use kt-1/2 + kt+1/2 fluxes (NOW) 
    339419         zztmp = r1_rau0 * r1_2 
    340          zssh_frc(:,:) = zztmp * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:) + fwfisf(:,:) + fwfisf_b(:,:)  ) 
     420         zssh_frc(1:jpi,1:jpj) = zztmp * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:) + fwfisf(:,:) + fwfisf_b(:,:)  ) 
    341421      ENDIF 
    342422      !                                   !=  Add Stokes drift divergence  =!   (if exist) 
    343423      IF( ln_sdw ) THEN                   !  -----------------------------  ! 
    344          zssh_frc(:,:) = zssh_frc(:,:) + div_sd(:,:) 
     424         zssh_frc(1:jpi,1:jpj) = zssh_frc(1:jpi,1:jpj) + div_sd(:,:) 
    345425      ENDIF 
    346426      ! 
     
    349429      !                                   !  ------------------------------------  ! 
    350430      IF( lk_asminc .AND. ln_sshinc .AND. ln_asmiau ) THEN 
    351          zssh_frc(:,:) = zssh_frc(:,:) - ssh_iau(:,:) 
     431         zssh_frc(1:jpi,1:jpj) = zssh_frc(1:jpi,1:jpj) - ssh_iau(:,:) 
    352432      ENDIF 
    353433#endif 
     
    357437         IF( .NOT.Agrif_Root() ) CALL agrif_dta_ts( kt ) 
    358438#endif 
     439 
     440 
    359441      ! 
    360442      ! ----------------------------------------------------------------------- 
     
    366448      !                                             ! ==================== !   
    367449      ! Initialize barotropic variables:       
    368       IF( ll_init )THEN 
     450      IF( ll_init ) THEN 
    369451         sshbb_e(:,:) = 0._wp 
    370452         ubb_e  (:,:) = 0._wp 
     
    376458      ! 
    377459      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(:,:) 
     460         zhtp2_e(1:jpi,1:jpj) = ht_n(1:jpi,1:jpj) 
     461         zhup2_e(1:jpi,1:jpj) = hu_n(1:jpi,1:jpj)  
     462         zhvp2_e(1:jpi,1:jpj) = hv_n(1:jpi,1:jpj) 
    381463      ENDIF 
    382464      ! 
    383465      IF (ln_bt_fw) THEN                  ! FORWARD integration: start from NOW fields                     
    384          sshn_e(:,:) =    sshn(:,:)             
    385          un_e  (:,:) =    un_b(:,:)             
    386          vn_e  (:,:) =    vn_b(:,:) 
    387          ! 
    388          hu_e  (:,:) =    hu_n(:,:)        
    389          hv_e  (:,:) =    hv_n(:,:)  
    390          hur_e (:,:) = r1_hu_n(:,:)     
    391          hvr_e (:,:) = r1_hv_n(:,:) 
     466         sshn_e(1:jpi,1:jpj) =    sshn(1:jpi,1:jpj) 
     467         un_e  (1:jpi,1:jpj) =    un_b(1:jpi,1:jpj) 
     468         vn_e  (1:jpi,1:jpj) =    vn_b(1:jpi,1:jpj) 
     469         ! 
     470         hu_e  (1:jpi,1:jpj) =    hu_n(1:jpi,1:jpj) 
     471         hv_e  (1:jpi,1:jpj) =    hv_n(1:jpi,1:jpj) 
     472         hur_e (1:jpi,1:jpj) = r1_hu_n(1:jpi,1:jpj) 
     473         hvr_e (1:jpi,1:jpj) = r1_hv_n(1:jpi,1:jpj) 
    392474      ELSE                                ! CENTRED integration: start from BEFORE fields 
    393          sshn_e(:,:) =    sshb(:,:) 
    394          un_e  (:,:) =    ub_b(:,:)          
    395          vn_e  (:,:) =    vb_b(:,:) 
    396          ! 
    397          hu_e  (:,:) =    hu_b(:,:)        
    398          hv_e  (:,:) =    hv_b(:,:)  
    399          hur_e (:,:) = r1_hu_b(:,:)     
    400          hvr_e (:,:) = r1_hv_b(:,:) 
    401       ENDIF 
     475         sshn_e(1:jpi,1:jpj) =    sshb(1:jpi,1:jpj) 
     476         un_e  (1:jpi,1:jpj) =    ub_b(1:jpi,1:jpj) 
     477         vn_e  (1:jpi,1:jpj) =    vb_b(1:jpi,1:jpj) 
     478         ! 
     479         hu_e  (1:jpi,1:jpj) =    hu_b(1:jpi,1:jpj) 
     480         hv_e  (1:jpi,1:jpj) =    hv_b(1:jpi,1:jpj) 
     481         hur_e (1:jpi,1:jpj) = r1_hu_b(1:jpi,1:jpj) 
     482         hvr_e (1:jpi,1:jpj) = r1_hv_b(1:jpi,1:jpj) 
     483      ENDIF 
     484      ! 
     485      hu_n_xtd(1:jpi,1:jpj) = hu_n(1:jpi,1:jpj) 
     486      hv_n_xtd(1:jpi,1:jpj) = hv_n(1:jpi,1:jpj) 
     487      ! 
     488      ! 
     489      !                                   !  Extend arrays  
     490      !                                   ! -------------- 
     491      ! 
     492      IF( ln_linssh ) THEN 
     493         CALL lbc_lnk_multi( 'dynspg_ts', hu_n_xtd, 'U', -1._wp,   hv_n_xtd, 'V', -1._wp   & 
     494              &                         , zCdU_u  , 'U', -1._wp,   zCdU_v  , 'V', -1._wp   & 
     495              &                         , zu_frc  , 'U', -1._wp,   zv_frc  , 'V', -1._wp   & 
     496              &                         ,  un_e   , 'U', -1._wp,   vn_e    , 'V', -1._wp   & 
     497              &                         ,  hu_e   , 'U', -1._wp,   hv_e    , 'V', -1._wp   & 
     498              &                         ,  hur_e  , 'U', -1._wp,   hvr_e   , 'V', -1._wp   & 
     499              &  , zhtp2_e , 'T',  1._wp,  zhup2_e, 'U', -1._wp,   zhvp2_e , 'V', -1._wp   & 
     500              &  , zssh_frc, 'T',  1._wp,  sshn_e , 'T',  1._wp,   khlcom = nn_hls+nn_hlts ) 
     501      ELSE 
     502         CALL lbc_lnk_multi( 'dynspg_ts', hu_n_xtd, 'U', -1._wp,   hv_n_xtd, 'V', -1._wp   & 
     503              &                         , zCdU_u  , 'U', -1._wp,   zCdU_v  , 'V', -1._wp   & 
     504              &                         , zu_frc  , 'U', -1._wp,   zv_frc  , 'V', -1._wp   & 
     505              &                         ,  un_e   , 'U', -1._wp,   vn_e    , 'V', -1._wp   & 
     506              &                         ,  hu_e   , 'U', -1._wp,   hv_e    , 'V', -1._wp   & 
     507              &                         ,  hur_e  , 'U', -1._wp,   hvr_e   , 'V', -1._wp   & 
     508              &  , zssh_frc, 'T',  1._wp,  sshn_e , 'T',  1._wp,   khlcom = nn_hls+nn_hlts ) 
     509      END IF 
    402510      ! 
    403511      ! Initialize sums: 
     
    413521         zuwdav2 (:,:) = 0._wp  
    414522         zvwdav2 (:,:) = 0._wp    
    415       END IF  
    416  
     523      END IF 
     524 
     525      ixtd = nn_hls + nn_hlts   ! solution is now correct over the whole domain (interior + regular halos + time splitting halos) 
     526      ibi = 1   - nn_hlts   ;   ibj = 1   - nn_hlts 
     527      iei = jpi + nn_hlts   ;   iej = jpj + nn_hlts 
    417528      !                                             ! ==================== ! 
    418       DO jn = 1, icycle                             !  sub-time-step loop  ! 
     529      DO jm = 1, icycle                             !  sub-time-step loop  ! 
    419530         !                                          ! ==================== ! 
    420531         ! 
    421          l_full_nf_update = jn == icycle   ! false: disable full North fold update (performances) for jn = 1 to icycle-1 
     532         l_full_nf_update = jm == icycle   ! false: disable full North fold update (performances) for jm = 1 to icycle-1 
    422533         ! 
    423534         !                    !==  Update the forcing ==! (BDY and tides) 
    424535         ! 
    425          IF( ln_bdy      .AND. ln_tide )   CALL bdy_dta_tides( kt, kit=jn, kt_offset= noffset+1 ) 
    426          IF( ln_tide_pot .AND. ln_tide )   CALL upd_tide     ( kt, kit=jn, kt_offset= noffset   ) 
    427          ! 
    428          !                    !==  extrapolation at mid-step  ==!   (jn+1/2) 
     536         IF( ln_bdy      .AND. ln_tide )   CALL bdy_dta_tides( kt, kit=jm, kt_offset= noffset+1 ) 
     537         IF( ln_tide_pot .AND. ln_tide )   CALL upd_tide     ( kt, kit=jm, kt_offset= noffset   ) 
     538         ! 
     539         !                    !==  extrapolation at mid-step  ==!   (jm+1/2) 
    429540         ! 
    430541         !                       !* Set extrapolation coefficients for predictor step: 
    431          IF ((jn<3).AND.ll_init) THEN      ! Forward            
     542         IF( (jm<3) .AND. ll_init ) THEN      ! Forward            
    432543           za1 = 1._wp                                           
    433544           za2 = 0._wp                         
     
    439550         ENDIF 
    440551         ! 
    441          !                       !* Extrapolate barotropic velocities at mid-step (jn+1/2) 
     552         !                       !* Extrapolate barotropic velocities at mid-step (jm+1/2) 
    442553         !--        m+1/2               m                m-1           m-2       --! 
    443554         !--       u      = (3/2+beta) u   -(1/2+2beta) u      + beta u          --! 
    444555         !-------------------------------------------------------------------------! 
    445          ua_e(:,:) = za1 * un_e(:,:) + za2 * ub_e(:,:) + za3 * ubb_e(:,:) 
    446          va_e(:,:) = za1 * vn_e(:,:) + za2 * vb_e(:,:) + za3 * vbb_e(:,:) 
     556         ua_e(ibi:iei,ibj:iej) = za1 * un_e(ibi:iei,ibj:iej) + za2 * ub_e(ibi:iei,ibj:iej) + za3 * ubb_e(ibi:iei,ibj:iej) 
     557         va_e(ibi:iei,ibj:iej) = za1 * vn_e(ibi:iei,ibj:iej) + za2 * vb_e(ibi:iei,ibj:iej) + za3 * vbb_e(ibi:iei,ibj:iej) 
    447558 
    448559         IF( .NOT.ln_linssh ) THEN                        !* Update ocean depth (variable volume case only) 
    449560            !                                             !  ------------------ 
    450             ! Extrapolate Sea Level at step jit+0.5: 
     561            !                    !* Extrapolate Sea Level at mid-step (jm+1/2) 
    451562            !--         m+1/2                 m                  m-1             m-2       --! 
    452563            !--      ssh      = (3/2+beta) ssh   -(1/2+2beta) ssh      + beta ssh          --! 
    453564            !--------------------------------------------------------------------------------! 
    454             zsshp2_e(:,:) = za1 * sshn_e(:,:)  + za2 * sshb_e(:,:) + za3 * sshbb_e(:,:) 
    455              
     565            zsshp2_e(ibi:iei,ibj:iej) =  za1 * sshn_e (ibi:iei,ibj:iej)  +  za2 * sshb_e(ibi:iei,ibj:iej)   & 
     566                 &                    +  za3 * sshbb_e(ibi:iei,ibj:iej) 
    456567            ! set wetting & drying mask at tracer points for this barotropic mid-step 
    457568            IF( ln_wd_dl )   CALL wad_tmsk( zsshp2_e, ztwdmask ) 
    458569            ! 
    459570            !                          ! ocean t-depth at mid-step 
    460             zhtp2_e(:,:) = ht_0(:,:) + zsshp2_e(:,:) 
     571            zhtp2_e(ibi:iei,ibj:iej) = ht_0_xtd(ibi:iei,ibj:iej) + zsshp2_e(ibi:iei,ibj:iej) 
    461572            ! 
    462             !                          ! ocean u- and v-depth at mid-step   (separate DO-loops remove the need of a lbc_lnk) 
    463             DO jj = 1, jpj 
    464                DO ji = 1, jpim1   ! not jpi-column 
    465                   zhup2_e(ji,jj) = hu_0(ji,jj) + r1_2 * r1_e1e2u(ji,jj)                        & 
    466                        &                              * (  e1e2t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
    467                        &                                 + e1e2t(ji+1,jj) * zsshp2_e(ji+1,jj)  ) * ssumask(ji,jj) 
    468                END DO 
    469             END DO 
    470             DO jj = 1, jpjm1        ! not jpj-row 
    471                DO ji = 1, jpi 
    472                   zhvp2_e(ji,jj) = hv_0(ji,jj) + r1_2 * r1_e1e2v(ji,jj)                        & 
    473                        &                              * (  e1e2t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
    474                        &                                 + e1e2t(ji,jj+1) * zsshp2_e(ji,jj+1)  ) * ssvmask(ji,jj) 
     573            !                          ! ocean u- and v-depth at mid-step 
     574            DO jj = ibj, iej-1      ! not last column, not last row 
     575               DO ji = ibi, iei-1 
     576                  zhup2_e(ji,jj) = hu_0_xtd(ji,jj) + r1_2 * r1_e1e2u_xtd(ji,jj)                 & 
     577                       &                           * (  e1e2t_xtd(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
     578                       &                              + e1e2t_xtd(ji+1,jj) * zsshp2_e(ji+1,jj)  ) * ssumask_xtd(ji,jj) 
     579                  zhvp2_e(ji,jj) = hv_0_xtd(ji,jj) + r1_2 * r1_e1e2v_xtd(ji,jj)                 & 
     580                       &                           * (  e1e2t_xtd(ji,jj  ) * zsshp2_e(ji,jj  )  & 
     581                       &                              + e1e2t_xtd(ji,jj+1) * zsshp2_e(ji,jj+1)  ) * ssvmask_xtd(ji,jj) 
    475582               END DO 
    476583            END DO 
     
    478585         ENDIF 
    479586         ! 
    480          !                    !==  after SSH  ==!   (jn+1) 
     587         !                    !==  after SSH  ==!   (jm+1) 
    481588         ! 
    482589         !                             ! update (ua_e,va_e) to enforce volume conservation at open boundaries 
    483590         !                             ! values of zhup2_e and zhvp2_e on the halo are not needed in bdy_vol2d 
    484          IF( ln_bdy .AND. ln_vol ) CALL bdy_vol2d( kt, jn, ua_e, va_e, zhup2_e, zhvp2_e ) 
     591         IF( ln_bdy .AND. ln_vol ) CALL bdy_vol2d( kt, jm, ua_e, va_e, zhup2_e, zhvp2_e ) 
    485592         ! 
    486593         !                             ! resulting flux at mid-step (not over the full domain) 
    487          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 
    488          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 
     594         zhU(ibi:iei-1,ibj:iej-1) = e2u_xtd(ibi:iei-1,ibj:iej-1) * ua_e(ibi:iei-1,ibj:iej-1) * zhup2_e(ibi:iei-1,ibj:iej-1) 
     595         zhV(ibi:iei-1,ibj:iej-1) = e1v_xtd(ibi:iei-1,ibj:iej-1) * va_e(ibi:iei-1,ibj:iej-1) * zhvp2_e(ibi:iei-1,ibj:iej-1) 
    489596         ! 
    490597#if defined key_agrif 
     
    524631            ! 
    525632         ENDIF     
    526          ! 
    527          ! 
    528          !     Compute Sea Level at step jit+1 
    529          !--           m+1        m                               m+1/2          --! 
    530          !--        ssh    =  ssh   - delta_t' * [ frc + div( flux      ) ]      --! 
    531          !-------------------------------------------------------------------------! 
    532          DO jj = 2, jpjm1        ! INNER domain                              
    533             DO ji = 2, jpim1 
    534                zhdiv = (   zhU(ji,jj) - zhU(ji-1,jj) + zhV(ji,jj) - zhV(ji,jj-1)   ) * r1_e1e2t(ji,jj) 
    535                ssha_e(ji,jj) = (  sshn_e(ji,jj) - rdtbt * ( zssh_frc(ji,jj) + zhdiv )  ) * ssmask(ji,jj) 
    536             END DO 
    537          END DO 
    538          ! 
    539          CALL lbc_lnk_multi( 'dynspg_ts', ssha_e, 'T', 1._wp,  zhU, 'U', -1._wp,  zhV, 'V', -1._wp ) 
    540          ! 
    541          !                             ! Sum over sub-time-steps to compute advective velocities 
    542          za2 = wgtbtp2(jn)             ! zhU, zhV hold fluxes extrapolated at jn+0.5 
    543          un_adv(:,:) = un_adv(:,:) + za2 * zhU(:,:) * r1_e2u(:,:) 
    544          vn_adv(:,:) = vn_adv(:,:) + za2 * zhV(:,:) * r1_e1v(:,:) 
    545633         ! sum over sub-time-steps to decide which baroclinic velocities to set to zero (zuwdav2 is only used when ln_wd_dl_bc=True)  
    546634         IF ( ln_wd_dl_bc ) THEN 
     
    548636            zvwdav2(1:jpi  ,1:jpjm1) = zvwdav2(1:jpi  ,1:jpjm1) + za2 * zvwdmask(1:jpi  ,1:jpjm1)   ! not jpj-row 
    549637         END IF 
     638         !                              
     639         ! Sum over sub-time-steps to compute advective velocities (only correct on interior domain) 
     640         za2 = wgtbtp2(jm)             ! zhU, zhV hold fluxes extrapolated at jm+1/2 
     641         un_adv(1:jpi,1:jpj) = un_adv(1:jpi,1:jpj) + za2 * zhU(1:jpi,1:jpj) * r1_e2u(1:jpi,1:jpj) 
     642         vn_adv(1:jpi,1:jpj) = vn_adv(1:jpi,1:jpj) + za2 * zhV(1:jpi,1:jpj) * r1_e1v(1:jpi,1:jpj) 
     643         ! 
     644         ! 
     645         !     Compute Sea Level at step jit+1 
     646         !--           m+1        m                               m+1/2          --! 
     647         !--        ssh    =  ssh   - delta_t' * [ frc + div( flux      ) ]      --! 
     648         !-------------------------------------------------------------------------! 
     649         ! correct domain reduction 
     650         ixtd = ixtd - 1 
     651         ibi = ibi + 1   ;   ibj = ibj + 1 
     652         iei = iei - 1   ;   iej = iej - 1 
     653         DO jj = ibj, iej 
     654            DO ji = ibi, iei 
     655               zhdiv = (   zhU(ji,jj) - zhU(ji-1,jj) + zhV(ji,jj) - zhV(ji,jj-1)   ) * r1_e1e2t_xtd(ji,jj) 
     656               ssha_e(ji,jj) = (  sshn_e(ji,jj) - rdtbt * ( zssh_frc(ji,jj) + zhdiv )  ) * ssmask_xtd(ji,jj) 
     657            END DO 
     658         END DO 
     659         ! 
     660         IF( nn_hlts == 0 ) THEN 
     661            CALL lbc_lnk_multi( 'dynspg_ts', ssha_e, 'T', 1._wp,  zhU, 'U', -1._wp,  zhV, 'V', -1._wp ) 
     662            ixtd = nn_hls + nn_hlts   ! solution is now correct over the whole domain 
     663            ibi = 1   - nn_hlts   ;   ibj = 1   - nn_hlts 
     664            iei = jpi + nn_hlts   ;   iej = jpj + nn_hlts 
     665         END IF 
     666 
    550667         ! 
    551668         ! Duplicate sea level across open boundaries (this is only cosmetic if linssh=T) 
    552          IF( ln_bdy )   CALL bdy_ssh( ssha_e ) 
     669         IF( ln_bdy ) THEN 
     670            CALL swap_bdyptr   ! bdy treatment is now done on extended domain 
     671            CALL bdy_ssh( ssha_e, idbi, idei, idbj, idej, ldcomall=.true., pmask=ssmask_xtd, khlcom=nn_hls+nn_hlts ) 
     672            CALL swap_bdyptr   ! bdy treatment is now done on regular domain 
     673         END IF 
     674 
    553675#if defined key_agrif 
    554          IF( .NOT.Agrif_Root() )   CALL agrif_ssh_ts( jn ) 
     676         IF( .NOT.Agrif_Root() )   CALL agrif_ssh_ts( jm ) 
    555677#endif 
    556          !   
    557          ! Sea Surface Height at u-,v-points (vvl case only) 
    558          IF( .NOT.ln_linssh ) THEN                                 
    559             DO jj = 2, jpjm1   ! INNER domain, will be extended to whole domain later 
    560                DO ji = 2, jpim1      ! NO Vector Opt. 
    561                   zsshu_a(ji,jj) = r1_2 * ssumask(ji,jj) * r1_e1e2u(ji,jj)    & 
    562                      &              * ( e1e2t(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
    563                      &              +   e1e2t(ji+1,jj  )  * ssha_e(ji+1,jj  ) ) 
    564                   zsshv_a(ji,jj) = r1_2 * ssvmask(ji,jj) * r1_e1e2v(ji,jj)    & 
    565                      &              * ( e1e2t(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
    566                      &              +   e1e2t(ji  ,jj+1)  * ssha_e(ji  ,jj+1) ) 
    567                END DO 
    568             END DO 
    569          ENDIF    
    570678         !          
    571679         ! Half-step back interpolation of SSH for surface pressure computation at step jit+1/2 
    572          !--            m+1/2           m+1              m               m-1              m-2     --! 
    573          !--        ssh'    =  za0 * ssh     +  za1 * ssh   +  za2 * ssh      +  za3 * ssh        --! 
    574          !------------------------------------------------------------------------------------------! 
    575          CALL ts_bck_interp( jn, ll_init, za0, za1, za2, za3 )   ! coeficients of the interpolation 
    576          zsshp2_e(:,:) = za0 *  ssha_e(:,:) + za1 *  sshn_e (:,:)   & 
    577             &          + za2 *  sshb_e(:,:) + za3 *  sshbb_e(:,:) 
     680         !--          m+1/2             m+1              m              m-1              m-2     --! 
     681         !--      ssh'      =  za0 * ssh     +  za1 * ssh   +  za2 * ssh     +  za3 * ssh        --! 
     682         !-----------------------------------------------------------------------------------------! 
     683         CALL ts_bck_interp( jm, ll_init, za0, za1, za2, za3 )   ! coeficients of the interpolation 
     684         zsshp2_e(ibi:iei,ibj:iej) =  za0 * ssha_e(ibi:iei,ibj:iej)  +  za1 * sshn_e (ibi:iei,ibj:iej)   & 
     685            &                      +  za2 * sshb_e(ibi:iei,ibj:iej)  +  za3 * sshbb_e(ibi:iei,ibj:iej) 
     686         ! 
     687         ! 
     688         ! Sea Surface Height at u-,v-points (vvl case only) 
     689         IF( .NOT.ln_linssh ) THEN 
     690            DO jj = ibj, iej-1 
     691               DO ji = ibi, iei-1 
     692                  zsshu_a(ji,jj) = r1_2 * ssumask_xtd(ji,jj) * r1_e1e2u_xtd(ji,jj)    & 
     693                     &                  * ( e1e2t_xtd(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
     694                     &                  +   e1e2t_xtd(ji+1,jj  )  * ssha_e(ji+1,jj  ) ) 
     695                  zsshv_a(ji,jj) = r1_2 * ssvmask_xtd(ji,jj) * r1_e1e2v_xtd(ji,jj)    & 
     696                     &                  * ( e1e2t_xtd(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
     697                     &                  +   e1e2t_xtd(ji  ,jj+1)  * ssha_e(ji  ,jj+1) ) 
     698               END DO 
     699            END DO 
     700         ENDIF 
    578701         ! 
    579702         !                             ! Surface pressure gradient 
    580703         zldg = ( 1._wp - rn_scal_load ) * grav    ! local factor 
    581          DO jj = 2, jpjm1                             
    582             DO ji = 2, jpim1 
    583                zu_spg(ji,jj) = - zldg * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u(ji,jj) 
    584                zv_spg(ji,jj) = - zldg * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) * r1_e2v(ji,jj) 
     704         DO jj = ibj, iej-1 
     705            DO ji = ibi, iei-1 
     706               zu_spg(ji,jj) = - zldg * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u_xtd(ji,jj) 
     707               zv_spg(ji,jj) = - zldg * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) * r1_e2v_xtd(ji,jj) 
    585708            END DO 
    586709         END DO 
     
    592715         ! 
    593716         ! Add Coriolis trend: 
    594          ! zwz array below or triads normally depend on sea level with ln_linssh=F and should be updated 
     717         ! - zwz array used in dyn_cor_2d or triads normally depend on sea level with ln_linssh=F and should be updated 
    595718         ! at each time step. We however keep them constant here for optimization. 
    596          ! Recall that zhU and zhV hold fluxes at jn+0.5 (extrapolated not backward interpolated) 
    597          CALL dyn_cor_2d( zhup2_e, zhvp2_e, ua_e, va_e, zhU, zhV,    zu_trd, zv_trd   ) 
     719         ! - Recall that zhU and zhV hold fluxes at jm+1/2 (extrapolated not backward interpolated) 
     720         ! - zu_trd_xtd and zv_trd_xtd are only correct on (ibi+1:iei-1,ibj+1:iej-1) 
     721         ! NOTE : input flux arguments have to be correct (ibi:iei,ibj:iej) -> a lbc call between input arguments computation 
     722         !        and this call without fluxes (typically after ssh at step m+1 computation) would not yield correct results  
     723         CALL dyn_cor_2d( zhtp2_e, zhup2_e, zhvp2_e,  ua_e, va_e,  zhU, zhV  , idbi, idei, idbj, idej   & 
     724              &                                           , zu_trd, zv_trd   , idbi, idei, idbj, idej   ) 
    598725         ! 
    599726         ! Add tidal astronomical forcing if defined 
     727         ! pot_astro is correct on 1:jpi,1:jpj 
    600728         IF ( ln_tide .AND. ln_tide_pot ) THEN 
    601729            DO jj = 2, jpjm1 
     
    610738!jth do implicitly instead 
    611739         IF ( .NOT. ll_wd ) THEN ! Revert to explicit for bit comparison tests in non wad runs 
    612             DO jj = 2, jpjm1 
    613                DO ji = fs_2, fs_jpim1   ! vector opt. 
     740            DO jj = ibj, iej 
     741               DO ji = ibi, iei 
    614742                  zu_trd(ji,jj) = zu_trd(ji,jj) + zCdU_u(ji,jj) * un_e(ji,jj) * hur_e(ji,jj) 
    615743                  zv_trd(ji,jj) = zv_trd(ji,jj) + zCdU_v(ji,jj) * vn_e(ji,jj) * hvr_e(ji,jj) 
     
    624752         !--  u     =             u   + delta_t' * \         (1-r)*g * grad_x( ssh') -         f * k vect u      +     frc /    --! 
    625753         !--                                                                                                                    --! 
    626          !--                             FLUX FORM                                                                              --! 
     754         !--                               FLUX FORM                                                                            --! 
    627755         !--  m+1   __1__  /  m    m               /  m+1/2                             m+1/2              m+1/2    n      \ \  --! 
    628756         !-- u    =   m+1 |  h  * u   + delta_t' * \ h     * (1-r)*g * grad_x( ssh') - h     * f * k vect u      + h * frc /  | --! 
    629757         !--         h     \                                                                                                 /  --! 
    630758         !------------------------------------------------------------------------------------------------------------------------! 
     759         ! correct domain reduction 
     760         ixtd = ixtd - 1 
     761         ibi = ibi + 1   ;   ibj = ibj + 1 
     762         iei = iei - 1   ;   iej = iej - 1 
     763         ! 
    631764         IF( ln_dynadv_vec .OR. ln_linssh ) THEN      !* Vector form 
    632             DO jj = 2, jpjm1 
    633                DO ji = fs_2, fs_jpim1   ! vector opt. 
     765            DO jj = ibj, iej 
     766               DO ji = ibi, iei 
    634767                  ua_e(ji,jj) = (                                 un_e(ji,jj)   &  
    635768                            &     + rdtbt * (                   zu_spg(ji,jj)   & 
    636769                            &                                 + zu_trd(ji,jj)   & 
    637770                            &                                 + zu_frc(ji,jj) ) &  
    638                             &   ) * ssumask(ji,jj) 
     771                            &   ) * ssumask_xtd(ji,jj) 
    639772 
    640773                  va_e(ji,jj) = (                                 vn_e(ji,jj)   & 
     
    642775                            &                                 + zv_trd(ji,jj)   & 
    643776                            &                                 + zv_frc(ji,jj) ) & 
    644                             &   ) * ssvmask(ji,jj) 
     777                            &   ) * ssvmask_xtd(ji,jj) 
    645778               END DO 
    646779            END DO 
    647780            ! 
    648781         ELSE                           !* Flux form 
    649             DO jj = 2, jpjm1 
    650                DO ji = 2, jpim1 
    651                   !                    ! hu_e, hv_e hold depth at jn,  zhup2_e, zhvp2_e hold extrapolated depth at jn+1/2 
    652                   !                    ! backward interpolated depth used in spg terms at jn+1/2 
    653                   zhu_bck = hu_0(ji,jj) + r1_2*r1_e1e2u(ji,jj) * (  e1e2t(ji  ,jj) * zsshp2_e(ji  ,jj)    & 
    654                        &                                          + e1e2t(ji+1,jj) * zsshp2_e(ji+1,jj)  ) * ssumask(ji,jj) 
    655                   zhv_bck = hv_0(ji,jj) + r1_2*r1_e1e2v(ji,jj) * (  e1e2t(ji,jj  ) * zsshp2_e(ji,jj  )    & 
    656                        &                                          + e1e2t(ji,jj+1) * zsshp2_e(ji,jj+1)  ) * ssvmask(ji,jj) 
    657                   !                    ! inverse depth at jn+1 
    658                   z1_hu = ssumask(ji,jj) / ( hu_0(ji,jj) + zsshu_a(ji,jj) + 1._wp - ssumask(ji,jj) ) 
    659                   z1_hv = ssvmask(ji,jj) / ( hv_0(ji,jj) + zsshv_a(ji,jj) + 1._wp - ssvmask(ji,jj) ) 
     782            DO jj = ibj, iej 
     783               DO ji = ibi, iei 
     784                  !                    ! hu_e, hv_e hold depth at jm,  zhup2_e, zhvp2_e hold extrapolated depth at jm+1/2 
     785                  !                    ! backward interpolated depth used in spg terms at jm+1/2 
     786                  zhu_bck = hu_0_xtd(ji,jj) + r1_2*r1_e1e2u_xtd(ji,jj) * & 
     787                       &   ( e1e2t_xtd(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
     788                       &   + e1e2t_xtd(ji+1,jj) * zsshp2_e(ji+1,jj) ) * ssumask_xtd(ji,jj) 
     789                  zhv_bck = hv_0_xtd(ji,jj) + r1_2*r1_e1e2v_xtd(ji,jj) * & 
     790                       &   ( e1e2t_xtd(ji,jj  ) * zsshp2_e(ji,jj  )  & 
     791                       &   + e1e2t_xtd(ji,jj+1) * zsshp2_e(ji,jj+1) ) * ssvmask_xtd(ji,jj) 
     792                  !                    ! inverse depth at jm+1 
     793                  z1_hu = ssumask_xtd(ji,jj) / ( hu_0_xtd(ji,jj) + zsshu_a(ji,jj) + 1._wp - ssumask_xtd(ji,jj) ) 
     794                  z1_hv = ssvmask_xtd(ji,jj) / ( hv_0_xtd(ji,jj) + zsshv_a(ji,jj) + 1._wp - ssvmask_xtd(ji,jj) ) 
    660795                  ! 
    661                   ua_e(ji,jj) = (               hu_e  (ji,jj) *   un_e (ji,jj)      &  
    662                        &            + rdtbt * (  zhu_bck        * zu_spg (ji,jj)  &   ! 
    663                        &                       + zhup2_e(ji,jj) * zu_trd (ji,jj)  &   ! 
    664                        &                       +  hu_n  (ji,jj) * zu_frc (ji,jj)  )   ) * z1_hu 
     796                  ua_e(ji,jj) = (               hu_e  (ji,jj)       *    un_e (ji,jj)        &  
     797                       &            + rdtbt * (  zhu_bck            * zu_spg(ji,jj)  &   ! 
     798                       &                       + zhup2_e(ji,jj) * zu_trd(ji,jj)  &   ! 
     799                       &                       + hu_n_xtd   (ji,jj) * zu_frc(ji,jj)  )   ) * z1_hu 
    665800                  ! 
    666                   va_e(ji,jj) = (               hv_e  (ji,jj) *   vn_e (ji,jj)      & 
    667                        &            + rdtbt * (  zhv_bck        * zv_spg (ji,jj)  &   ! 
    668                        &                       + zhvp2_e(ji,jj) * zv_trd (ji,jj)  &   ! 
    669                        &                       +  hv_n  (ji,jj) * zv_frc (ji,jj)  )   ) * z1_hv 
     801                  va_e(ji,jj) = (               hv_e  (ji,jj)       *    vn_e (ji,jj)        & 
     802                       &            + rdtbt * (  zhv_bck            * zv_spg(ji,jj)  &   ! 
     803                       &                       + zhvp2_e(ji,jj) * zv_trd(ji,jj)  &   ! 
     804                       &                       + hv_n_xtd   (ji,jj) * zv_frc(ji,jj)  )   ) * z1_hv 
    670805               END DO 
    671806            END DO 
     
    681816         ENDIF 
    682817        
    683          IF( .NOT.ln_linssh ) THEN   !* Update ocean depth (variable volume case only) 
    684             hu_e (2:jpim1,2:jpjm1) = hu_0(2:jpim1,2:jpjm1) + zsshu_a(2:jpim1,2:jpjm1) 
    685             hur_e(2:jpim1,2:jpjm1) = ssumask(2:jpim1,2:jpjm1) / ( hu_e(2:jpim1,2:jpjm1) + 1._wp - ssumask(2:jpim1,2:jpjm1) ) 
    686             hv_e (2:jpim1,2:jpjm1) = hv_0(2:jpim1,2:jpjm1) + zsshv_a(2:jpim1,2:jpjm1) 
    687             hvr_e(2:jpim1,2:jpjm1) = ssvmask(2:jpim1,2:jpjm1) / ( hv_e(2:jpim1,2:jpjm1) + 1._wp - ssvmask(2:jpim1,2:jpjm1) ) 
    688             CALL lbc_lnk_multi( 'dynspg_ts', ua_e , 'U', -1._wp, va_e , 'V', -1._wp  & 
    689                  &                         , hu_e , 'U', -1._wp, hv_e , 'V', -1._wp  & 
    690                  &                         , hur_e, 'U', -1._wp, hvr_e, 'V', -1._wp  ) 
    691          ELSE 
    692             CALL lbc_lnk_multi( 'dynspg_ts', ua_e , 'U', -1._wp, va_e , 'V', -1._wp  ) 
    693          ENDIF 
    694          ! 
    695          ! 
    696          !                                                 ! open boundaries 
    697          IF( ln_bdy )   CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e ) 
     818         IF( .NOT.ln_linssh ) THEN   !* Update ocean depth (variable volume case only) and inverse depth 
     819            hu_e (ibi:iei,ibj:iej) = hu_0_xtd(ibi:iei,ibj:iej) + zsshu_a(ibi:iei,ibj:iej) 
     820            hv_e (ibi:iei,ibj:iej) = hv_0_xtd(ibi:iei,ibj:iej) + zsshv_a(ibi:iei,ibj:iej) 
     821            hur_e(ibi:iei,ibj:iej) = ssumask_xtd(ibi:iei,ibj:iej) / ( hu_e(ibi:iei,ibj:iej) + 1._wp - ssumask_xtd(ibi:iei,ibj:iej) ) 
     822            hvr_e(ibi:iei,ibj:iej) = ssvmask_xtd(ibi:iei,ibj:iej) / ( hv_e(ibi:iei,ibj:iej) + 1._wp - ssvmask_xtd(ibi:iei,ibj:iej) ) 
     823         ENDIF 
     824          
     825         IF( ixtd == 0 ) THEN 
     826            IF( .NOT. ln_linssh ) THEN 
     827               CALL lbc_lnk_multi( 'dynspg_ts', ua_e  , 'U', -1._wp, va_e   , 'V', -1._wp      &   ! after 
     828                    &                         , un_e  , 'U', -1._wp, vn_e   , 'V', -1._wp      &   ! now 
     829                    &                         , ub_e  , 'U', -1._wp, vb_e   , 'V', -1._wp      &   ! before 
     830                    &                         , ubb_e , 'U', -1._wp, vbb_e  , 'V', -1._wp      &   ! before before 
     831                    &                         , ssha_e, 'T',  1._wp, sshn_e , 'T',  1._wp      &   ! after, now 
     832                    &                         , sshb_e, 'T',  1._wp, sshbb_e, 'T',  1._wp      &   ! before, before before 
     833                    &                         , hu_e  , 'U', -1._wp, hv_e   , 'V', -1._wp      & 
     834                    &                         , hur_e , 'U', -1._wp, hvr_e  , 'V', -1._wp      & 
     835                    &                         , khlcom = nn_hls+nn_hlts                        ) 
     836            ELSE 
     837               CALL lbc_lnk_multi( 'dynspg_ts', ua_e  , 'U', -1._wp, va_e   , 'V', -1._wp      &   ! after 
     838                    &                         , un_e  , 'U', -1._wp, vn_e   , 'V', -1._wp      &   ! now 
     839                    &                         , ub_e  , 'U', -1._wp, vb_e   , 'V', -1._wp      &   ! before 
     840                    &                         , ubb_e , 'U', -1._wp, vbb_e  , 'V', -1._wp      &   ! before before 
     841                    &                         , ssha_e, 'T',  1._wp, sshn_e , 'T',  1._wp      &   ! after, now 
     842                    &                         , sshb_e, 'T',  1._wp, sshbb_e, 'T',  1._wp      &   ! before, before before 
     843                    &                         , khlcom = nn_hls+nn_hlts                        ) 
     844            END IF 
     845            ixtd = nn_hls + nn_hlts   ! solution is now correct over the whole domain 
     846            ibi = 1   - nn_hlts   ;   ibj = 1   - nn_hlts 
     847            iei = jpi + nn_hlts   ;   iej = jpj + nn_hlts 
     848         END IF 
     849         ! 
     850         ! 
     851         !                ! open boundaries 
     852         !                ! bdy treatment is here done on regular domain (nn_hlts forced to 1 if ln_bdy or ln_tides) 
     853         IF( ln_bdy )   CALL bdy_dyn2d( jm, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e, idbi, idei, idbj, idej       & 
     854                                &     , ldcomall=.true., pumask=ssumask_xtd, pvmask=ssvmask_xtd, khlcom=nn_hls+nn_hlts ) 
    698855#if defined key_agrif                                                            
    699          IF( .NOT.Agrif_Root() )  CALL agrif_dyn_ts( jn )  ! Agrif 
     856         IF( .NOT.Agrif_Root() )  CALL agrif_dyn_ts( jm )  ! Agrif 
    700857#endif 
    701858         !                                             !* Swap 
     
    715872         !                                             !* Sum over whole bt loop 
    716873         !                                             !  ---------------------- 
    717          za1 = wgtbtp1(jn)                                     
     874         za1 = wgtbtp1(jm)                                     
    718875         IF( ln_dynadv_vec .OR. ln_linssh ) THEN    ! Sum velocities 
    719             ua_b  (:,:) = ua_b  (:,:) + za1 * ua_e  (:,:)  
    720             va_b  (:,:) = va_b  (:,:) + za1 * va_e  (:,:)  
     876               ua_b(1:jpi,1:jpj) = ua_b(1:jpi,1:jpj) + za1 * ua_e(1:jpi,1:jpj)  
     877               va_b(1:jpi,1:jpj) = va_b(1:jpi,1:jpj) + za1 * va_e(1:jpi,1:jpj)  
    721878         ELSE                                       ! Sum transports 
    722879            IF ( .NOT.ln_wd_dl ) THEN   
    723                ua_b  (:,:) = ua_b  (:,:) + za1 * ua_e  (:,:) * hu_e (:,:) 
    724                va_b  (:,:) = va_b  (:,:) + za1 * va_e  (:,:) * hv_e (:,:) 
     880               ua_b(1:jpi,1:jpj) = ua_b(1:jpi,1:jpj) + za1 * ua_e(1:jpi,1:jpj) * hu_e(1:jpi,1:jpj) 
     881               va_b(1:jpi,1:jpj) = va_b(1:jpi,1:jpj) + za1 * va_e(1:jpi,1:jpj) * hv_e(1:jpi,1:jpj) 
    725882            ELSE  
    726                ua_b  (:,:) = ua_b  (:,:) + za1 * ua_e  (:,:) * hu_e (:,:) * zuwdmask(:,:) 
    727                va_b  (:,:) = va_b  (:,:) + za1 * va_e  (:,:) * hv_e (:,:) * zvwdmask(:,:) 
     883               ua_b(1:jpi,1:jpj) = ua_b(1:jpi,1:jpj) + za1 * ua_e(1:jpi,1:jpj) * hu_e(1:jpi,1:jpj) * zuwdmask(1:jpi,1:jpj) 
     884               va_b(1:jpi,1:jpj) = va_b(1:jpi,1:jpj) + za1 * va_e(1:jpi,1:jpj) * hv_e(1:jpi,1:jpj) * zvwdmask(1:jpi,1:jpj) 
    728885            END IF  
    729886         ENDIF 
    730887         !                                          ! Sum sea level 
    731          ssha(:,:) = ssha(:,:) + za1 * ssha_e(:,:) 
     888         ssha(1:jpi,1:jpj) = ssha(1:jpi,1:jpj) + za1 * ssha_e(1:jpi,1:jpj) 
    732889 
    733890         !                                                 ! ==================== ! 
     
    737894      ! Phase 3. update the general trend with the barotropic trend 
    738895      ! ----------------------------------------------------------------------------- 
     896      ! Correction on regular halos 
     897      CALL lbc_lnk_multi( 'dynspg_ts',  un_adv, 'U', -1._wp,  vn_adv, 'V', -1._wp   & 
     898           &                         ,  ua_b  , 'U', -1._wp,  va_b  , 'V', -1._wp   & 
     899           &                         ,  ssha  , 'T', -1._wp                         ) 
    739900      ! 
    740901      ! Set advection velocity correction: 
     
    783944                  &              +   e1e2t(ji,jj+1) * ssha(ji,jj+1) ) 
    784945            END DO 
    785          END DO 
    786          CALL lbc_lnk_multi( 'dynspg_ts', zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 
     946         END DO                             ! Boundary conditions 
     947         CALL lbc_lnk_multi( 'dynspg_ts', zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp, khlcom=nn_hls+nn_hlts )   ! change array used? 
    787948         ! 
    788949         DO jk=1,jpkm1 
     
    791952         END DO 
    792953         ! Save barotropic velocities not transport: 
    793          ua_b(:,:) =  ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - ssumask(:,:) ) 
    794          va_b(:,:) =  va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - ssvmask(:,:) ) 
     954         ua_b(:,:) =  ua_b(:,:) / ( hu_0(:,:) + zsshu_a(1:jpi,1:jpj) + 1._wp - ssumask(:,:) ) 
     955         va_b(:,:) =  va_b(:,:) / ( hv_0(:,:) + zsshv_a(1:jpi,1:jpj) + 1._wp - ssvmask(:,:) ) 
    795956      ENDIF 
    796957 
     
    8411002      ENDIF 
    8421003      ! 
     1004 
     1005      ! deallocate temporary arrays 
     1006      DEALLOCATE( zu_trd  , zv_trd     & 
     1007         &    ,   zu_frc  , zv_frc     & 
     1008         &    ,   zu_spg  , zv_spg     & 
     1009         &    ,   zsshu_a , zsshv_a    & 
     1010         &    ,   zhup2_e , zhvp2_e    & 
     1011         &    ,   zCdU_u  , zCdU_v     & 
     1012         &    ,   zhU     , zhV        & 
     1013         &    ,   zssh_frc, zsshp2_e   & 
     1014         &    ,   zhtp2_e              & 
     1015         &    ,   hu_n_xtd, hv_n_xtd   ) 
     1016      ! 
    8431017   END SUBROUTINE dyn_spg_ts 
    8441018 
     
    8501024      !! ** Purpose : Set time-splitting weights for temporal averaging (or not) 
    8511025      !!---------------------------------------------------------------------- 
    852       LOGICAL, INTENT(in) ::   ll_av      ! temporal averaging=.true. 
    853       LOGICAL, INTENT(in) ::   ll_fw      ! forward time splitting =.true. 
    854       INTEGER, INTENT(inout) :: jpit      ! cycle length     
     1026      LOGICAL, INTENT(in   ) ::   ll_av      ! temporal averaging=.true. 
     1027      LOGICAL, INTENT(in   ) ::   ll_fw      ! forward time splitting =.true. 
     1028      INTEGER, INTENT(inout) ::   jpit       ! cycle length     
    8551029      REAL(wp), DIMENSION(3*nn_baro), INTENT(inout) ::   zwgt1, & ! Primary weights 
    8561030                                                         zwgt2    ! Secondary weights 
    8571031       
    858       INTEGER ::  jic, jn, ji                      ! temporary integers 
     1032      INTEGER ::  jic, jm, ji                      ! temporary integers 
    8591033      REAL(wp) :: za1, za2 
    8601034      !!---------------------------------------------------------------------- 
     
    8801054 
    8811055              CASE( 1 )  ! Boxcar, width = nn_baro 
    882                  DO jn = 1, 3*nn_baro 
    883                     za1 = ABS(float(jn-jic))/float(nn_baro)  
     1056                 DO jm = 1, 3*nn_baro 
     1057                    za1 = ABS(float(jm-jic))/float(nn_baro)  
    8841058                    IF (za1 < 0.5_wp) THEN 
    885                       zwgt1(jn) = 1._wp 
    886                       jpit = jn 
     1059                      zwgt1(jm) = 1._wp 
     1060                      jpit = jm 
    8871061                    ENDIF 
    8881062                 ENDDO 
    8891063 
    8901064              CASE( 2 )  ! Boxcar, width = 2 * nn_baro 
    891                  DO jn = 1, 3*nn_baro 
    892                     za1 = ABS(float(jn-jic))/float(nn_baro)  
     1065                 DO jm = 1, 3*nn_baro 
     1066                    za1 = ABS(float(jm-jic))/float(nn_baro)  
    8931067                    IF (za1 < 1._wp) THEN 
    894                       zwgt1(jn) = 1._wp 
    895                       jpit = jn 
     1068                      zwgt1(jm) = 1._wp 
     1069                      jpit = jm 
    8961070                    ENDIF 
    8971071                 ENDDO 
     
    9051079     
    9061080      ! Set secondary weights 
    907       DO jn = 1, jpit 
    908         DO ji = jn, jpit 
    909              zwgt2(jn) = zwgt2(jn) + zwgt1(ji) 
     1081      DO jm = 1, jpit 
     1082        DO ji = jm, jpit 
     1083             zwgt2(jm) = zwgt2(jm) + zwgt1(ji) 
    9101084        END DO 
    9111085      END DO 
     
    9141088      za1 = 1._wp / SUM(zwgt1(1:jpit)) 
    9151089      za2 = 1._wp / SUM(zwgt2(1:jpit)) 
    916       DO jn = 1, jpit 
    917         zwgt1(jn) = zwgt1(jn) * za1 
    918         zwgt2(jn) = zwgt2(jn) * za2 
     1090      DO jm = 1, jpit 
     1091        zwgt1(jm) = zwgt1(jm) * za1 
     1092        zwgt2(jm) = zwgt2(jm) * za2 
    9191093      END DO 
    9201094      ! 
     
    11111285      ENDIF 
    11121286      ! 
     1287      ! initialize extended scale factors 
     1288      ht_0_xtd    (1:jpi,1:jpj) = ht_0    (1:jpi,1:jpj) 
     1289      hu_0_xtd    (1:jpi,1:jpj) = hu_0    (1:jpi,1:jpj) 
     1290      hv_0_xtd    (1:jpi,1:jpj) = hv_0    (1:jpi,1:jpj) 
     1291      r1_e1e2t_xtd(1:jpi,1:jpj) = r1_e1e2t(1:jpi,1:jpj) 
     1292      r1_e1e2u_xtd(1:jpi,1:jpj) = r1_e1e2u(1:jpi,1:jpj) 
     1293      r1_e1e2v_xtd(1:jpi,1:jpj) = r1_e1e2v(1:jpi,1:jpj) 
     1294      e1e2t_xtd   (1:jpi,1:jpj) = e1e2t   (1:jpi,1:jpj) 
     1295      ssmask_xtd  (1:jpi,1:jpj) = ssmask  (1:jpi,1:jpj) 
     1296      ssumask_xtd (1:jpi,1:jpj) = ssumask (1:jpi,1:jpj) 
     1297      ssvmask_xtd (1:jpi,1:jpj) = ssvmask (1:jpi,1:jpj) 
     1298      e2u_xtd     (1:jpi,1:jpj) = e2u     (1:jpi,1:jpj) 
     1299      e1v_xtd     (1:jpi,1:jpj) = e1v     (1:jpi,1:jpj) 
     1300      r1_e1u_xtd  (1:jpi,1:jpj) = r1_e1u  (1:jpi,1:jpj) 
     1301      r1_e2v_xtd  (1:jpi,1:jpj) = r1_e2v  (1:jpi,1:jpj) 
     1302      ! 
     1303      CALL lbc_lnk_multi( 'dynspg_ts', ht_0_xtd    , 'T',  1._wp,  hu_0_xtd    , 'U', -1._wp,  hv_0_xtd    , 'V', -1._wp   & 
     1304           &                         , r1_e1e2t_xtd, 'T',  1._wp,  r1_e1e2u_xtd, 'U', -1._wp,  r1_e1e2v_xtd, 'V', -1._wp   & 
     1305           &                         , ssmask_xtd  , 'T',  1._wp,  ssumask_xtd , 'U', -1._wp,  ssvmask_xtd , 'V', -1._wp   & 
     1306           &                         , e1e2t_xtd   , 'T',  1._wp,      e2u_xtd , 'U', -1._wp,      e1v_xtd , 'V', -1._wp   & 
     1307           &                         ,                              r1_e1u_xtd , 'U', -1._wp,   r1_e2v_xtd , 'V', -1._wp   & 
     1308           &                         , khlcom = nn_hls+nn_hlts                                                             ) 
     1309      IF( ln_dynvor_enT ) THEN 
     1310         ff_t_xtd (1:jpi,1:jpj) = ff_t    (1:jpi,1:jpj) 
     1311         CALL lbc_lnk_multi( 'dynspg_ts', ff_t_xtd , 'F', -1._wp,   khlcom = nn_hls+nn_hlts  ) 
     1312      END IF 
     1313          
     1314      ! 
    11131315   END SUBROUTINE dyn_spg_ts_init 
    11141316 
    11151317    
    1116    SUBROUTINE dyn_cor_2d_init 
     1318   SUBROUTINE dyn_cor_2d_init( kdbi, kdei, kdbj, kdej ) 
    11171319      !!--------------------------------------------------------------------- 
    11181320      !!                   ***  ROUTINE dyn_cor_2d_init  *** 
     
    11281330      !! Compute zwz = f / ( height of the water colomn ) 
    11291331      !!---------------------------------------------------------------------- 
     1332      INTEGER , INTENT(in   ) :: kdbi, kdei, kdbj, kdej 
    11301333      INTEGER  ::   ji ,jj, jk              ! dummy loop indices 
    11311334      REAL(wp) ::   z1_ht 
     
    11371340         SELECT CASE( nn_een_e3f )              !* ff_f/e3 at F-point 
    11381341         CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
    1139             DO jj = 1, jpjm1 
    1140                DO ji = 1, jpim1 
    1141                   zwz(ji,jj) =   ( ht_n(ji  ,jj+1) + ht_n(ji+1,jj+1) +                    & 
    1142                        &             ht_n(ji  ,jj  ) + ht_n(ji+1,jj  )   ) * 0.25_wp   
     1342            DO jj = 1, jpj-1 
     1343               DO ji = 1, jpi-1 
     1344                  zwz(ji,jj) =   ( ht_n(ji  ,jj+1) + ht_n(ji+1,jj+1) +   & 
     1345                       &           ht_n(ji  ,jj  ) + ht_n(ji+1,jj  )   ) * 0.25_wp   
    11431346                  IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) 
    11441347               END DO 
    11451348            END DO 
    11461349         CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
    1147             DO jj = 1, jpjm1 
    1148                DO ji = 1, jpim1 
    1149                   zwz(ji,jj) =             (  ht_n  (ji  ,jj+1) + ht_n  (ji+1,jj+1)      & 
     1350            DO jj = 1, jpj-1 
     1351               DO ji = 1, jpi-1 
     1352                  zwz(ji,jj) =               (  ht_n  (ji  ,jj+1) + ht_n  (ji+1,jj+1)      & 
    11501353                       &                      + ht_n  (ji  ,jj  ) + ht_n  (ji+1,jj  )  )   & 
    11511354                       &       / ( MAX( 1._wp,  ssmask(ji  ,jj+1) + ssmask(ji+1,jj+1)      & 
     
    11551358            END DO 
    11561359         END SELECT 
    1157          CALL lbc_lnk( 'dynspg_ts', zwz, 'F', 1._wp ) 
    1158          ! 
    1159          ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    1160          DO jj = 2, jpj 
    1161             DO ji = 2, jpi 
     1360         ! 
     1361         DO jj = 2, jpj-1 
     1362            DO ji = 2, jpi-1 
    11621363               ftne(ji,jj) = zwz(ji-1,jj  ) + zwz(ji  ,jj  ) + zwz(ji  ,jj-1) 
    11631364               ftnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj  ) + zwz(ji  ,jj  ) 
     
    11661367            END DO 
    11671368         END DO 
     1369         CALL lbc_lnk_multi( 'dynspg_ts', ftne, 'F', 1._wp, ftnw, 'F', 1._wp                          & 
     1370              &                         , ftse, 'F', 1._wp, ftsw, 'F', 1._wp, khlcom = nn_hls+nn_hlts ) 
    11681371         ! 
    11691372      CASE( np_EET )                  != EEN scheme using e3t (energy conserving scheme) 
    1170          ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    11711373         DO jj = 2, jpj 
    11721374            DO ji = 2, jpi 
     
    11781380            END DO 
    11791381         END DO 
     1382         CALL lbc_lnk_multi( 'dynspg_ts', ftne, 'F', 1._wp, ftnw, 'F', 1._wp                          & 
     1383              &                         , ftse, 'F', 1._wp, ftsw, 'F', 1._wp, khlcom = nn_hls+nn_hlts ) 
    11801384         ! 
    11811385      CASE( np_ENE, np_ENS , np_MIX )  != all other schemes (ENE, ENS, MIX) except ENT ! 
     
    12231427            END DO 
    12241428         END DO 
    1225          CALL lbc_lnk( 'dynspg_ts', zhf, 'F', 1._wp ) 
    1226          ! JC: TBC. hf should be greater than 0  
    1227          DO jj = 1, jpj 
    1228             DO ji = 1, jpi 
     1429         ! JC: TBC. hf should be greater than 0 
     1430         DO jj = 2, jpjm1 
     1431            DO ji = 2, jpim1 
    12291432               IF( zhf(ji,jj) /= 0._wp )   zwz(ji,jj) = 1._wp / zhf(ji,jj) 
    12301433            END DO 
    12311434         END DO 
    1232          zwz(:,:) = ff_f(:,:) * zwz(:,:) 
     1435         zwz(2:jpim1,2:jpjm1) = ff_f(2:jpim1,2:jpjm1) * zwz(2:jpim1,2:jpjm1) 
     1436         CALL lbc_lnk( 'dynspg_ts', zwz, 'F', 1._wp, khlcom = nn_hls+nn_hlts ) 
    12331437      END SELECT 
    12341438       
     
    12371441 
    12381442 
    1239    SUBROUTINE dyn_cor_2d( hu_n, hv_n, un_b, vn_b, zhU, zhV,    zu_trd, zv_trd   ) 
     1443   SUBROUTINE dyn_cor_2d( phgtt, phgtu, phgtv, pun, pvn, phU, phV, kdbi , kdei , kdbj , kdej ,  pu_trd, pv_trd   & 
     1444        &                                                        , kdbi2, kdei2, kdbj2, kdej2                    ) 
    12401445      !!--------------------------------------------------------------------- 
    12411446      !!                   ***  ROUTINE dyn_cor_2d  *** 
    12421447      !! 
    12431448      !! ** Purpose : Compute u and v coriolis trends 
    1244       !!---------------------------------------------------------------------- 
    1245       INTEGER  ::   ji ,jj                             ! dummy loop indices 
    1246       REAL(wp) ::   zx1, zx2, zy1, zy2, z1_hu, z1_hv   !   -      - 
    1247       REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) :: hu_n, hv_n, un_b, vn_b, zhU, zhV 
    1248       REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) :: zu_trd, zv_trd 
     1449      !! 
     1450      !!              kdXX2 are useful in the initialisation where some arrays are not over the whole domain 
     1451      !!              and some are 
     1452      !!---------------------------------------------------------------------- 
     1453      REAL(wp), DIMENSION(kdbi :kdei ,kdbj :kdej ), INTENT(in   ) :: phgtt, phgtu, phgtv, pun, pvn   ! height, speed 
     1454      INTEGER ,                                     INTENT(in   ) :: kdbi , kdei , kdbj , kdej       ! arrays size 
     1455      REAL(wp), DIMENSION(kdbi2:kdei2,kdbj2:kdej2), INTENT(in   ) :: phU, phV   ! flux 
     1456      REAL(wp), DIMENSION(kdbi2:kdei2,kdbj2:kdej2), INTENT(  out) :: pu_trd, pv_trd 
     1457      INTEGER ,                                     INTENT(in   ) :: kdbi2, kdei2, kdbj2, kdej2      ! arrays size 
     1458      INTEGER  ::   ji, jj                             ! dummy loop indices 
     1459      REAL(wp) ::   zx1, zx2, zy1, zy2, z1_hu, z1_hv   ! local integer 
    12491460      !!---------------------------------------------------------------------- 
    12501461      SELECT CASE( nvor_scheme ) 
    12511462      CASE( np_ENT )                ! enstrophy conserving scheme (f-point) 
    1252          DO jj = 2, jpjm1 
    1253             DO ji = 2, jpim1 
    1254                z1_hu = ssumask(ji,jj) / ( hu_n(ji,jj) + 1._wp - ssumask(ji,jj) ) 
    1255                z1_hv = ssvmask(ji,jj) / ( hv_n(ji,jj) + 1._wp - ssvmask(ji,jj) ) 
    1256                zu_trd(ji,jj) = + r1_4 * r1_e1e2u(ji,jj) * z1_hu                    & 
    1257                   &               * (  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) )   & 
    1258                   &                  + e1e2t(ji  ,jj)*ht_n(ji  ,jj)*ff_t(ji  ,jj) * ( vn_b(ji  ,jj) + vn_b(ji  ,jj-1) )   ) 
     1463         DO jj = kdbj+1, kdej-1 
     1464            DO ji = kdbi+1, kdei-1 
     1465               z1_hu = ssumask_xtd(ji,jj) / ( phgtu(ji,jj) + 1._wp - ssumask_xtd(ji,jj) ) 
     1466               z1_hv = ssvmask_xtd(ji,jj) / ( phgtv(ji,jj) + 1._wp - ssvmask_xtd(ji,jj) ) 
     1467               pu_trd(ji,jj) = + r1_4 * r1_e1e2u_xtd(ji,jj) * z1_hu                   & 
     1468                  &               * (  e1e2t_xtd(ji+1,jj)*phgtt(ji+1,jj)*ff_t_xtd(ji+1,jj) * ( pvn(ji+1,jj) + pvn(ji+1,jj-1) )   & 
     1469                  &                  + e1e2t_xtd(ji  ,jj)*phgtt(ji  ,jj)*ff_t_xtd(ji  ,jj) * ( pvn(ji  ,jj) + pvn(ji  ,jj-1) )   ) 
    12591470                  ! 
    1260                zv_trd(ji,jj) = - r1_4 * r1_e1e2v(ji,jj) * z1_hv                    & 
    1261                   &               * (  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) )   &  
    1262                   &                  + e1e2t(ji,jj  )*ht_n(ji,jj  )*ff_t(ji,jj  ) * ( un_b(ji,jj  ) + un_b(ji-1,jj  ) )   )  
     1471               pv_trd(ji,jj) = - r1_4 * r1_e1e2v_xtd(ji,jj) * z1_hv                   & 
     1472                  &               * (  e1e2t_xtd(ji,jj+1)*phgtt(ji,jj+1)*ff_t_xtd(ji,jj+1) * ( pun(ji,jj+1) + pun(ji-1,jj+1) )   &  
     1473                  &                  + e1e2t_xtd(ji,jj  )*phgtt(ji,jj  )*ff_t_xtd(ji,jj  ) * ( pun(ji,jj  ) + pun(ji-1,jj  ) )   )  
    12631474            END DO   
    1264          END DO   
     1475         END DO 
    12651476         !          
    12661477      CASE( np_ENE , np_MIX )        ! energy conserving scheme (t-point) ENE or MIX 
    1267          DO jj = 2, jpjm1 
    1268             DO ji = fs_2, fs_jpim1   ! vector opt. 
    1269                zy1 = ( zhV(ji,jj-1) + zhV(ji+1,jj-1) ) * r1_e1u(ji,jj) 
    1270                zy2 = ( zhV(ji,jj  ) + zhV(ji+1,jj  ) ) * r1_e1u(ji,jj) 
    1271                zx1 = ( zhU(ji-1,jj) + zhU(ji-1,jj+1) ) * r1_e2v(ji,jj) 
    1272                zx2 = ( zhU(ji  ,jj) + zhU(ji  ,jj+1) ) * r1_e2v(ji,jj) 
     1478         DO jj = kdbj+1, kdej-1 
     1479            DO ji = kdbi+1, kdei-1 
     1480               zy1 = ( phV(ji,jj-1) + phV(ji+1,jj-1) ) * r1_e1u_xtd(ji,jj) 
     1481               zy2 = ( phV(ji,jj  ) + phV(ji+1,jj  ) ) * r1_e1u_xtd(ji,jj) 
     1482               zx1 = ( phU(ji-1,jj) + phU(ji-1,jj+1) ) * r1_e2v_xtd(ji,jj) 
     1483               zx2 = ( phU(ji  ,jj) + phU(ji  ,jj+1) ) * r1_e2v_xtd(ji,jj) 
    12731484               ! energy conserving formulation for planetary vorticity term 
    1274                zu_trd(ji,jj) =   r1_4 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
    1275                zv_trd(ji,jj) = - r1_4 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 ) 
     1485               pu_trd(ji,jj) =   r1_4 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
     1486               pv_trd(ji,jj) = - r1_4 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 ) 
    12761487            END DO 
    12771488         END DO 
    12781489         ! 
    12791490      CASE( np_ENS )                ! enstrophy conserving scheme (f-point) 
    1280          DO jj = 2, jpjm1 
    1281             DO ji = fs_2, fs_jpim1   ! vector opt. 
    1282                zy1 =   r1_8 * ( zhV(ji  ,jj-1) + zhV(ji+1,jj-1) & 
    1283                  &            + zhV(ji  ,jj  ) + zhV(ji+1,jj  ) ) * r1_e1u(ji,jj) 
    1284                zx1 = - r1_8 * ( zhU(ji-1,jj  ) + zhU(ji-1,jj+1) & 
    1285                  &            + zhU(ji  ,jj  ) + zhU(ji  ,jj+1) ) * r1_e2v(ji,jj) 
    1286                zu_trd(ji,jj)  = zy1 * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
    1287                zv_trd(ji,jj)  = zx1 * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
    1288             END DO 
    1289          END DO 
    1290          ! 
    1291       CASE( np_EET , np_EEN )      ! energy & enstrophy scheme (using e3t or e3f)          
    1292          DO jj = 2, jpjm1 
    1293             DO ji = fs_2, fs_jpim1   ! vector opt. 
    1294                zu_trd(ji,jj) = + r1_12 * r1_e1u(ji,jj) * (  ftne(ji,jj  ) * zhV(ji  ,jj  ) & 
    1295                 &                                         + ftnw(ji+1,jj) * zhV(ji+1,jj  ) & 
    1296                 &                                         + ftse(ji,jj  ) * zhV(ji  ,jj-1) & 
    1297                 &                                         + ftsw(ji+1,jj) * zhV(ji+1,jj-1) ) 
    1298                zv_trd(ji,jj) = - r1_12 * r1_e2v(ji,jj) * (  ftsw(ji,jj+1) * zhU(ji-1,jj+1) & 
    1299                 &                                         + ftse(ji,jj+1) * zhU(ji  ,jj+1) & 
    1300                 &                                         + ftnw(ji,jj  ) * zhU(ji-1,jj  ) & 
    1301                 &                                         + ftne(ji,jj  ) * zhU(ji  ,jj  ) ) 
     1491         DO jj = kdbj+1, kdej-1 
     1492            DO ji = kdbi+1, kdei-1 
     1493               zy1 =   r1_8 * ( phV(ji  ,jj-1) + phV(ji+1,jj-1) & 
     1494                 &            + phV(ji  ,jj  ) + phV(ji+1,jj  ) ) * r1_e1u_xtd(ji,jj) 
     1495               zx1 = - r1_8 * ( phU(ji-1,jj  ) + phU(ji-1,jj+1) & 
     1496                 &            + phU(ji  ,jj  ) + phU(ji  ,jj+1) ) * r1_e2v_xtd(ji,jj) 
     1497               pu_trd(ji,jj)  = zy1 * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
     1498               pv_trd(ji,jj)  = zx1 * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
     1499            END DO 
     1500         END DO 
     1501         ! 
     1502      CASE( np_EET , np_EEN )      ! energy & enstrophy scheme (using e3t or e3f) 
     1503         DO jj = kdbj+1, kdej-1 
     1504            DO ji = kdbi+1, kdei-1 
     1505               pu_trd(ji,jj) = + r1_12 * r1_e1u_xtd(ji,jj) * (  ftne(ji,jj  ) * phV(ji  ,jj  ) & 
     1506                &                                             + ftnw(ji+1,jj) * phV(ji+1,jj  ) & 
     1507                &                                             + ftse(ji,jj  ) * phV(ji  ,jj-1) & 
     1508                &                                             + ftsw(ji+1,jj) * phV(ji+1,jj-1) ) 
     1509               pv_trd(ji,jj) = - r1_12 * r1_e2v_xtd(ji,jj) * (  ftsw(ji,jj+1) * phU(ji-1,jj+1) & 
     1510                &                                             + ftse(ji,jj+1) * phU(ji  ,jj+1) & 
     1511                &                                             + ftnw(ji,jj  ) * phU(ji-1,jj  ) & 
     1512                &                                             + ftne(ji,jj  ) * phU(ji  ,jj  ) ) 
    13021513            END DO 
    13031514         END DO 
     
    13051516      END SELECT 
    13061517      ! 
    1307    END SUBROUTINE dyn_cor_2D 
     1518   END SUBROUTINE dyn_cor_2d 
    13081519 
    13091520 
     
    14481659 
    14491660 
    1450    SUBROUTINE dyn_drg_init( pu_RHSi, pv_RHSi, pCdU_u, pCdU_v ) 
    1451       !!---------------------------------------------------------------------- 
    1452       !!                  ***  ROUTINE dyn_drg_init  *** 
     1661   SUBROUTINE drg_init( kdbi, kdei, kdbj, kdej, pu_frc, pv_frc, pCdU_u, pCdU_v ) 
     1662      !!---------------------------------------------------------------------- 
     1663      !!                  ***  ROUTINE drg_init  *** 
    14531664      !!                     
    14541665      !! ** Purpose : - add the baroclinic top/bottom drag contribution to  
     
    14581669      !! ** Method  :   computation done over the INNER domain only  
    14591670      !!---------------------------------------------------------------------- 
    1460       REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   pu_RHSi, pv_RHSi   ! baroclinic part of the barotropic RHS 
    1461       REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::   pCdU_u , pCdU_v    ! barotropic drag coefficients 
     1671      INTEGER ,                                 INTENT(in   ) ::   kdbi, kdei, kdbj, kdej   ! arrays size 
     1672      REAL(wp), DIMENSION(kdbi:kdei,kdbj:kdej), INTENT(inout) ::   pu_frc, pv_frc    ! baroclinic part of the barotropic RHS 
     1673      REAL(wp), DIMENSION(kdbi:kdei,kdbj:kdej), INTENT(  out) ::   pCdU_u , pCdU_v   ! barotropic drag coefficients 
    14621674      ! 
    14631675      INTEGER  ::   ji, jj   ! dummy loop indices 
     
    15141726         DO jj = 2, jpjm1 
    15151727            DO ji = 2, jpim1    ! INNER domain 
    1516                pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + zu_i(ji,jj) *  wdrampu(ji,jj) * MAX(                                 &  
     1728               pu_frc(ji,jj) = pu_frc(ji,jj) + zu_i(ji,jj) *  wdrampu(ji,jj) * MAX(                                 &  
    15171729                    &                              r1_hu_n(ji,jj) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) , zztmp  ) 
    1518                pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + zv_i(ji,jj) *  wdrampv(ji,jj) * MAX(                                 &  
     1730               pv_frc(ji,jj) = pv_frc(ji,jj) + zv_i(ji,jj) *  wdrampv(ji,jj) * MAX(                                 &  
    15191731                    &                              r1_hv_n(ji,jj) * r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) , zztmp  ) 
    15201732            END DO 
     
    15241736         DO jj = 2, jpjm1 
    15251737            DO ji = 2, jpim1    ! INNER domain 
    1526                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) 
    1527                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) 
     1738               pu_frc(ji,jj) = pu_frc(ji,jj) + r1_hu_n(ji,jj) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * zu_i(ji,jj) 
     1739               pv_frc(ji,jj) = pv_frc(ji,jj) + r1_hv_n(ji,jj) * r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * zv_i(ji,jj) 
    15281740            END DO 
    15291741         END DO 
     
    15601772         DO jj = 2, jpjm1 
    15611773            DO ji = 2, jpim1    ! INNER domain 
    1562                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) 
    1563                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) 
    1564             END DO 
    1565          END DO 
    1566          ! 
    1567       ENDIF 
    1568       ! 
    1569    END SUBROUTINE dyn_drg_init 
    1570  
    1571    SUBROUTINE ts_bck_interp( jn, ll_init,       &   ! <== in 
     1774               pu_frc(ji,jj) = pu_frc(ji,jj) + r1_hu_n(ji,jj) * r1_2*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * zu_i(ji,jj) 
     1775               pv_frc(ji,jj) = pv_frc(ji,jj) + r1_hv_n(ji,jj) * r1_2*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * zv_i(ji,jj) 
     1776            END DO 
     1777         END DO 
     1778         ! 
     1779      ENDIF 
     1780      ! 
     1781   END SUBROUTINE drg_init 
     1782 
     1783 
     1784   SUBROUTINE ts_bck_interp( km, ld_init,       &   ! <== in 
    15721785      &                      za0, za1, za2, za3 )   ! ==> out 
    15731786      !!---------------------------------------------------------------------- 
    1574       INTEGER ,INTENT(in   ) ::   jn                   ! index of sub time step 
    1575       LOGICAL ,INTENT(in   ) ::   ll_init              ! 
     1787      INTEGER ,INTENT(in   ) ::   km                   ! index of sub time step 
     1788      LOGICAL ,INTENT(in   ) ::   ld_init              ! 
    15761789      REAL(wp),INTENT(  out) ::   za0, za1, za2, za3   ! Half-step back interpolation coefficient 
    15771790      ! 
     
    15791792      !!---------------------------------------------------------------------- 
    15801793      !                             ! set Half-step back interpolation coefficient 
    1581       IF    ( jn==1 .AND. ll_init ) THEN   !* Forward-backward 
     1794      IF    ( km==1 .AND. ld_init ) THEN   !* Forward-backward 
    15821795         za0 = 1._wp                         
    15831796         za1 = 0._wp                            
    15841797         za2 = 0._wp 
    15851798         za3 = 0._wp 
    1586       ELSEIF( jn==2 .AND. ll_init ) THEN   !* AB2-AM3 Coefficients; bet=0 ; gam=-1/6 ; eps=1/12 
     1799      ELSEIF( km==2 .AND. ld_init ) THEN   !* AB2-AM3 Coefficients; bet=0 ; gam=-1/6 ; eps=1/12 
    15871800         za0 = 1.0833333333333_wp                 ! za0 = 1-gam-eps 
    15881801         za1 =-0.1666666666666_wp                 ! za1 = gam 
Note: See TracChangeset for help on using the changeset viewer.