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 13463 for NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/NST/agrif_oce_update.F90 – NEMO

Ignore:
Timestamp:
2020-09-14T17:40:34+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2195:update to trunk 13461

Location:
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@13382        sette 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/NST/agrif_oce_update.F90

    r10068 r13463  
    1 #define TWO_WAY        /* TWO WAY NESTING */ 
    2 #undef DECAL_FEEDBACK  /* SEPARATION of INTERFACES*/ 
    3 #undef VOL_REFLUX      /* VOLUME REFLUXING*/ 
     1#undef DECAL_FEEDBACK     /* SEPARATION of INTERFACES */ 
     2#undef DECAL_FEEDBACK_2D  /* SEPARATION of INTERFACES (Barotropic mode) */ 
     3#undef VOL_REFLUX         /* VOLUME REFLUXING*/ 
    44  
    55MODULE agrif_oce_update 
     
    2525   USE lib_mpp        ! MPP library 
    2626   USE domvvl         ! Need interpolation routines  
     27   USE vremap         ! Vertical remapping 
     28   USE lbclnk  
    2729 
    2830   IMPLICIT NONE 
     
    4648      IF (Agrif_Root()) RETURN 
    4749      ! 
    48 #if defined TWO_WAY   
    4950      IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update tracers  from grid Number',Agrif_Fixed() 
    5051 
     52#if defined key_vertical 
     53! Effect of this has to be carrefully checked  
     54! depending on what the nesting tools ensure for 
     55! volume conservation: 
     56      Agrif_UseSpecialValueInUpdate = .FALSE. 
     57#else 
    5158      Agrif_UseSpecialValueInUpdate = .TRUE. 
     59#endif 
    5260      Agrif_SpecialValueFineGrid    = 0._wp 
    5361      !  
     
    6472      Agrif_UseSpecialValueInUpdate = .FALSE. 
    6573      ! 
    66 #endif 
    6774      ! 
    6875   END SUBROUTINE Agrif_Update_Tra 
     
    7582      IF (Agrif_Root()) RETURN 
    7683      ! 
    77 #if defined TWO_WAY 
    7884      IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update momentum from grid Number',Agrif_Fixed() 
    7985 
    8086      Agrif_UseSpecialValueInUpdate = .FALSE. 
    81       Agrif_SpecialValueFineGrid = 0. 
     87      Agrif_SpecialValueFineGrid    = 0._wp 
     88 
     89      use_sign_north = .TRUE. 
     90      sign_north     = -1._wp 
     91 
    8292      !      
    8393# if ! defined DECAL_FEEDBACK 
     
    95105# endif 
    96106 
    97 # if ! defined DECAL_FEEDBACK 
     107# if ! defined DECAL_FEEDBACK_2D 
    98108      CALL Agrif_Update_Variable(e1u_id,procname = updateU2d) 
    99109      CALL Agrif_Update_Variable(e2v_id,procname = updateV2d)   
     
    103113# endif 
    104114      ! 
    105 # if ! defined DECAL_FEEDBACK 
     115# if ! defined DECAL_FEEDBACK_2D 
    106116      ! Account for updated thicknesses at boundary edges 
    107117      IF (.NOT.ln_linssh) THEN 
     
    113123      IF ( ln_dynspg_ts .AND. ln_bt_fw ) THEN 
    114124         ! Update time integrated transports 
    115 #  if ! defined DECAL_FEEDBACK 
     125#  if ! defined DECAL_FEEDBACK_2D 
    116126         CALL Agrif_Update_Variable(ub2b_update_id,procname = updateub2b) 
    117127         CALL Agrif_Update_Variable(vb2b_update_id,procname = updatevb2b) 
     
    121131#  endif 
    122132      END IF 
    123 #endif 
     133      ! 
     134      use_sign_north = .FALSE. 
    124135      ! 
    125136   END SUBROUTINE Agrif_Update_Dyn 
     
    132143      IF (Agrif_Root()) RETURN 
    133144      ! 
    134 #if defined TWO_WAY 
    135       ! 
    136145      Agrif_UseSpecialValueInUpdate = .TRUE. 
    137       Agrif_SpecialValueFineGrid = 0. 
    138 # if ! defined DECAL_FEEDBACK 
     146      Agrif_SpecialValueFineGrid = 0._wp 
     147# if ! defined DECAL_FEEDBACK_2D 
    139148      CALL Agrif_Update_Variable(sshn_id,procname = updateSSH) 
    140149# else 
     
    146155#  if defined VOL_REFLUX 
    147156      IF ( ln_dynspg_ts.AND.ln_bt_fw ) THEN 
     157         use_sign_north = .TRUE. 
     158         sign_north = -1._wp 
    148159         ! Refluxing on ssh: 
    149 #  if defined DECAL_FEEDBACK 
     160#  if defined DECAL_FEEDBACK_2D 
    150161         CALL Agrif_Update_Variable(ub2b_update_id,locupdate1=(/0, 0/),locupdate2=(/1, 1/),procname = reflux_sshu) 
    151162         CALL Agrif_Update_Variable(vb2b_update_id,locupdate1=(/1, 1/),locupdate2=(/0, 0/),procname = reflux_sshv) 
     
    154165         CALL Agrif_Update_Variable(vb2b_update_id,locupdate1=(/ 0, 0/),locupdate2=(/-1,-1/),procname = reflux_sshv) 
    155166#  endif 
     167         use_sign_north = .FALSE. 
    156168      END IF 
    157169#  endif 
    158170      ! 
    159 #endif 
    160       ! 
    161171   END SUBROUTINE Agrif_Update_ssh 
    162172 
     
    170180      IF (Agrif_Root()) RETURN 
    171181      !        
    172 #  if defined TWO_WAY 
    173  
    174182      Agrif_UseSpecialValueInUpdate = .TRUE. 
    175183      Agrif_SpecialValueFineGrid = 0. 
     
    180188 
    181189      Agrif_UseSpecialValueInUpdate = .FALSE. 
    182  
    183 #  endif 
    184190       
    185191   END SUBROUTINE Agrif_Update_Tke 
     
    192198      ! 
    193199      IF (Agrif_Root()) RETURN 
    194       ! 
    195 #if defined TWO_WAY   
    196200      ! 
    197201      IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update e3 from grid Number',Agrif_Fixed(), 'Step', Agrif_Nb_Step() 
     
    210214      CALL Agrif_ParentGrid_To_ChildGrid() 
    211215      ! 
    212 #endif 
    213       ! 
    214216   END SUBROUTINE Agrif_Update_vvl 
    215217 
     
    230232      ! ----------------------- 
    231233      ! 
    232       e3u_a(:,:,:) = e3u_n(:,:,:) 
    233       e3v_a(:,:,:) = e3v_n(:,:,:) 
    234 !      ua(:,:,:) = e3u_b(:,:,:) 
    235 !      va(:,:,:) = e3v_b(:,:,:) 
    236       hu_a(:,:) = hu_n(:,:) 
    237       hv_a(:,:) = hv_n(:,:) 
     234      e3u(:,:,:,Krhs_a) = e3u(:,:,:,Kmm_a) 
     235      e3v(:,:,:,Krhs_a) = e3v(:,:,:,Kmm_a) 
     236!      uu(:,:,:,Krhs_a) = e3u(:,:,:,Kbb_a) 
     237!      vv(:,:,:,Krhs_a) = e3v(:,:,:,Kbb_a) 
     238      hu(:,:,Krhs_a) = hu(:,:,Kmm_a) 
     239      hv(:,:,Krhs_a) = hv(:,:,Kmm_a) 
    238240 
    239241      ! 1) NOW fields 
     
    242244         ! Vertical scale factor interpolations 
    243245         ! ------------------------------------ 
    244       CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:) ,  'U' ) 
    245       CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:) ,  'V' ) 
    246       CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:) ,  'F' ) 
    247  
    248       CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 
    249       CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 
     246      CALL dom_vvl_interpol( e3t(:,:,:,Kmm_a), e3u(:,:,:,Kmm_a) ,  'U' ) 
     247      CALL dom_vvl_interpol( e3t(:,:,:,Kmm_a), e3v(:,:,:,Kmm_a) ,  'V' ) 
     248      CALL dom_vvl_interpol( e3u(:,:,:,Kmm_a), e3f(:,:,:) ,  'F' ) 
     249 
     250      CALL dom_vvl_interpol( e3u(:,:,:,Kmm_a), e3uw(:,:,:,Kmm_a), 'UW' ) 
     251      CALL dom_vvl_interpol( e3v(:,:,:,Kmm_a), e3vw(:,:,:,Kmm_a), 'VW' ) 
    250252 
    251253         ! Update total depths: 
    252254         ! -------------------- 
    253       hu_n(:,:) = 0._wp                        ! Ocean depth at U-points 
    254       hv_n(:,:) = 0._wp                        ! Ocean depth at V-points 
     255      hu(:,:,Kmm_a) = 0._wp                        ! Ocean depth at U-points 
     256      hv(:,:,Kmm_a) = 0._wp                        ! Ocean depth at V-points 
    255257      DO jk = 1, jpkm1 
    256          hu_n(:,:) = hu_n(:,:) + e3u_n(:,:,jk) * umask(:,:,jk) 
    257          hv_n(:,:) = hv_n(:,:) + e3v_n(:,:,jk) * vmask(:,:,jk) 
     258         hu(:,:,Kmm_a) = hu(:,:,Kmm_a) + e3u(:,:,jk,Kmm_a) * umask(:,:,jk) 
     259         hv(:,:,Kmm_a) = hv(:,:,Kmm_a) + e3v(:,:,jk,Kmm_a) * vmask(:,:,jk) 
    258260      END DO 
    259261      !                                        ! Inverse of the local depth 
    260       r1_hu_n(:,:) = ssumask(:,:) / ( hu_n(:,:) + 1._wp - ssumask(:,:) ) 
    261       r1_hv_n(:,:) = ssvmask(:,:) / ( hv_n(:,:) + 1._wp - ssvmask(:,:) ) 
     262      r1_hu(:,:,Kmm_a) = ssumask(:,:) / ( hu(:,:,Kmm_a) + 1._wp - ssumask(:,:) ) 
     263      r1_hv(:,:,Kmm_a) = ssvmask(:,:) / ( hv(:,:,Kmm_a) + 1._wp - ssvmask(:,:) ) 
    262264 
    263265 
    264266      ! 2) BEFORE fields: 
    265267      !------------------ 
    266       IF (.NOT.(lk_agrif_fstep.AND.(neuler==0) )) THEN 
     268      IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler) )) THEN 
    267269         ! 
    268270         ! Vertical scale factor interpolations 
    269271         ! ------------------------------------ 
    270          CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:),  'U'  ) 
    271          CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:),  'V'  ) 
    272  
    273          CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 
    274          CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 
     272         CALL dom_vvl_interpol( e3t(:,:,:,Kbb_a), e3u(:,:,:,Kbb_a),  'U'  ) 
     273         CALL dom_vvl_interpol( e3t(:,:,:,Kbb_a), e3v(:,:,:,Kbb_a),  'V'  ) 
     274 
     275         CALL dom_vvl_interpol( e3u(:,:,:,Kbb_a), e3uw(:,:,:,Kbb_a), 'UW' ) 
     276         CALL dom_vvl_interpol( e3v(:,:,:,Kbb_a), e3vw(:,:,:,Kbb_a), 'VW' ) 
    275277 
    276278         ! Update total depths: 
    277279         ! -------------------- 
    278          hu_b(:,:) = 0._wp                     ! Ocean depth at U-points 
    279          hv_b(:,:) = 0._wp                     ! Ocean depth at V-points 
     280         hu(:,:,Kbb_a) = 0._wp                     ! Ocean depth at U-points 
     281         hv(:,:,Kbb_a) = 0._wp                     ! Ocean depth at V-points 
    280282         DO jk = 1, jpkm1 
    281             hu_b(:,:) = hu_b(:,:) + e3u_b(:,:,jk) * umask(:,:,jk) 
    282             hv_b(:,:) = hv_b(:,:) + e3v_b(:,:,jk) * vmask(:,:,jk) 
     283            hu(:,:,Kbb_a) = hu(:,:,Kbb_a) + e3u(:,:,jk,Kbb_a) * umask(:,:,jk) 
     284            hv(:,:,Kbb_a) = hv(:,:,Kbb_a) + e3v(:,:,jk,Kbb_a) * vmask(:,:,jk) 
    283285         END DO 
    284286         !                                     ! Inverse of the local depth 
    285          r1_hu_b(:,:) = ssumask(:,:) / ( hu_b(:,:) + 1._wp - ssumask(:,:) ) 
    286          r1_hv_b(:,:) = ssvmask(:,:) / ( hv_b(:,:) + 1._wp - ssvmask(:,:) ) 
     287         r1_hu(:,:,Kbb_a) = ssumask(:,:) / ( hu(:,:,Kbb_a) + 1._wp - ssumask(:,:) ) 
     288         r1_hv(:,:,Kbb_a) = ssvmask(:,:) / ( hv(:,:,Kbb_a) + 1._wp - ssvmask(:,:) ) 
    287289      ENDIF 
    288290      ! 
     
    300302      !! 
    301303      INTEGER :: ji,jj,jk,jn 
    302       REAL(wp), DIMENSION(i1:i2,j1:j2,1:jpk,n1:n2) :: tabres_child 
     304      INTEGER  :: N_in, N_out 
     305      REAL(wp) :: ztb, ztnu, ztno 
    303306      REAL(wp) :: h_in(k1:k2) 
    304307      REAL(wp) :: h_out(1:jpk) 
    305       INTEGER  :: N_in, N_out 
    306       REAL(wp) :: zrho_xy, h_diff 
    307       REAL(wp) :: tabin(k1:k2,n1:n2) 
     308      REAL(wp) :: tabin(k1:k2,1:jpts) 
     309      REAL(wp), DIMENSION(i1:i2,j1:j2,1:jpk,1:jpts) :: tabres_child 
    308310      !!--------------------------------------------- 
    309311      ! 
    310312      IF (before) THEN 
    311          AGRIF_SpecialValue = -999._wp 
    312          zrho_xy = Agrif_rhox() * Agrif_rhoy()  
     313!jc_alt 
     314!         AGRIF_SpecialValue = -999._wp 
    313315         DO jn = n1,n2-1 
    314316            DO jk=k1,k2 
    315317               DO jj=j1,j2 
    316318                  DO ji=i1,i2 
    317                      tabres(ji,jj,jk,jn) = (tsn(ji,jj,jk,jn) * e3t_n(ji,jj,jk) ) & 
    318                                            * tmask(ji,jj,jk) + (tmask(ji,jj,jk)-1)*999._wp 
     319!jc_alt 
     320!                     tabres(ji,jj,jk,jn) = (ts(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Kmm_a) ) & 
     321!                                         &  * tmask(ji,jj,jk) + (tmask(ji,jj,jk)-1._wp) * 999._wp 
     322                     tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Kmm_a) 
    319323                  END DO 
    320324               END DO 
     
    324328            DO jj=j1,j2 
    325329               DO ji=i1,i2 
    326                   tabres(ji,jj,jk,n2) = tmask(ji,jj,jk) * e3t_n(ji,jj,jk) & 
    327                                            + (tmask(ji,jj,jk)-1)*999._wp 
     330!jc_alt 
     331!                  tabres(ji,jj,jk,n2) =      tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm_a) & 
     332!                                      &   + (tmask(ji,jj,jk) - 1._wp) * 999._wp 
     333                  tabres(ji,jj,jk,n2) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm_a) 
    328334               END DO 
    329335            END DO 
    330336         END DO 
    331337      ELSE 
    332          tabres_child(:,:,:,:) = 0. 
     338         tabres_child(:,:,:,:) = 0._wp 
    333339         AGRIF_SpecialValue = 0._wp 
    334340         DO jj=j1,j2 
     
    336342               N_in = 0 
    337343               DO jk=k1,k2 !k2 = jpk of child grid 
    338                   IF (tabres(ji,jj,jk,n2) == 0  ) EXIT 
     344! jc_alt 
     345!                  IF (tabres(ji,jj,jk,n2) < -900._wp  ) EXIT 
     346                  IF (tabres(ji,jj,jk,n2) == 0._wp  ) EXIT 
    339347                  N_in = N_in + 1 
    340348                  tabin(jk,:) = tabres(ji,jj,jk,n1:n2-1)/tabres(ji,jj,jk,n2) 
     
    343351               N_out = 0 
    344352               DO jk=1,jpk ! jpk of parent grid 
    345                   IF (tmask(ji,jj,jk) < -900) EXIT ! TODO: Will not work with ISF 
     353                  IF (tmask(ji,jj,jk) == 0 ) EXIT ! TODO: Will not work with ISF 
    346354                  N_out = N_out + 1 
    347                   h_out(N_out) = e3t_n(ji,jj,jk)  
     355                  h_out(N_out) = e3t(ji,jj,jk,Kmm_a)  
    348356               ENDDO 
    349                IF (N_in > 0) THEN !Remove this? 
    350                   h_diff = sum(h_out(1:N_out))-sum(h_in(1:N_in)) 
    351                   IF (h_diff < -1.e-4) THEN 
    352                      print *,'CHECK YOUR bathy T points ...',ji,jj,h_diff,sum(h_in(1:N_in)),sum(h_out(1:N_out)) 
    353                      print *,h_in(1:N_in) 
    354                      print *,h_out(1:N_out) 
    355                      STOP 
    356                   ENDIF 
    357                   DO jn=n1,n2-1 
    358                      CALL reconstructandremap(tabin(1:N_in,jn),h_in(1:N_in),tabres_child(ji,jj,1:N_out,jn),h_out(1:N_out),N_in,N_out) 
    359                   ENDDO 
     357               IF (N_in*N_out > 0) THEN !Remove this? 
     358                  CALL reconstructandremap(tabin(1:N_in,1:jpts),h_in(1:N_in),tabres_child(ji,jj,1:N_out,1:jpts),h_out(1:N_out),N_in,N_out,jpts) 
    360359               ENDIF 
    361360            ENDDO 
    362361         ENDDO 
    363362 
    364          IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
     363         IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 
    365364            ! Add asselin part 
    366             DO jn = n1,n2-1 
    367                DO jk=1,jpk 
    368                   DO jj=j1,j2 
    369                      DO ji=i1,i2 
    370                         IF( tabres_child(ji,jj,jk,jn) .NE. 0. ) THEN 
    371                            tsb(ji,jj,jk,jn) = tsb(ji,jj,jk,jn) &  
    372                                  & + atfp * ( tabres_child(ji,jj,jk,jn) & 
    373                                  &          - tsn(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 
     365            DO jn = 1,jpts 
     366               DO jk = 1, jpkm1 
     367                  DO jj = j1, j2 
     368                     DO ji = i1, i2 
     369                        IF( tabres_child(ji,jj,jk,jn) /= 0._wp ) THEN 
     370                           ztb  = ts(ji,jj,jk,jn,Kbb_a) * e3t(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 
     371                           ztnu = tabres_child(ji,jj,jk,jn) * e3t(ji,jj,jk,Kmm_a) 
     372                           ztno = ts(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Krhs_a) 
     373                           ts(ji,jj,jk,jn,Kbb_a) = ( ztb + rn_atfp * ( ztnu - ztno) )  &  
     374                                     &        * tmask(ji,jj,jk) / e3t(ji,jj,jk,Kbb_a) 
    374375                        ENDIF 
    375                      ENDDO 
    376                   ENDDO 
    377                ENDDO 
    378             ENDDO 
    379          ENDIF 
    380          DO jn = n1,n2-1 
    381             DO jk=1,jpk 
    382                DO jj=j1,j2 
    383                   DO ji=i1,i2 
    384                      IF( tabres_child(ji,jj,jk,jn) .NE. 0. ) THEN  
    385                         tsn(ji,jj,jk,jn) = tabres_child(ji,jj,jk,jn) * tmask(ji,jj,jk) 
     376                     END DO 
     377                  END DO 
     378               END DO 
     379            END DO 
     380         ENDIF 
     381         DO jn = 1,jpts 
     382            DO jk = 1, jpkm1 
     383               DO jj = j1, j2 
     384                  DO ji = i1, i2 
     385                     IF( tabres_child(ji,jj,jk,jn) /= 0._wp ) THEN  
     386                        ts(ji,jj,jk,jn,Kmm_a) = tabres_child(ji,jj,jk,jn) 
    386387                     END IF 
    387388                  END DO 
     
    389390            END DO 
    390391         END DO 
     392         ! 
     393         IF  ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 
     394            ts(i1:i2,j1:j2,1:jpkm1,1:jpts,Kbb_a)  = ts(i1:i2,j1:j2,1:jpkm1,1:jpts,Kmm_a) 
     395         ENDIF 
    391396      ENDIF 
    392397      !  
     
    413418                  DO ji=i1,i2 
    414419!> jc tmp 
    415                      tabres(ji,jj,jk,jn) = tsn(ji,jj,jk,jn)  * e3t_n(ji,jj,jk) / e3t_0(ji,jj,jk) 
    416 !                     tabres(ji,jj,jk,jn) = tsn(ji,jj,jk,jn)  * e3t_n(ji,jj,jk) 
     420                     tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kmm_a)  * e3t(ji,jj,jk,Kmm_a) / e3t_0(ji,jj,jk) 
     421!                     tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kmm_a)  * e3t(ji,jj,jk,Kmm_a) 
    417422!< jc tmp 
    418423                  END DO 
     
    427432         ENDDO 
    428433!< jc tmp 
    429          IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
     434         IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 
    430435            ! Add asselin part 
    431436            DO jn = 1,jpts 
     
    434439                     DO ji = i1, i2 
    435440                        IF( tabres(ji,jj,jk,jn) /= 0._wp ) THEN 
    436                            ztb  = tsb(ji,jj,jk,jn) * e3t_b(ji,jj,jk) ! fse3t_b prior update should be used 
     441                           ztb  = ts(ji,jj,jk,jn,Kbb_a) * e3t(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 
    437442                           ztnu = tabres(ji,jj,jk,jn) 
    438                            ztno = tsn(ji,jj,jk,jn) * e3t_a(ji,jj,jk) 
    439                            tsb(ji,jj,jk,jn) = ( ztb + atfp * ( ztnu - ztno) )  &  
    440                                      &        * tmask(ji,jj,jk) / e3t_b(ji,jj,jk) 
     443                           ztno = ts(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Krhs_a) 
     444                           ts(ji,jj,jk,jn,Kbb_a) = ( ztb + rn_atfp * ( ztnu - ztno) )  &  
     445                                     &        * tmask(ji,jj,jk) / e3t(ji,jj,jk,Kbb_a) 
    441446                        ENDIF 
    442447                     END DO 
     
    450455                  DO ji=i1,i2 
    451456                     IF( tabres(ji,jj,jk,jn) /= 0._wp ) THEN  
    452                         tsn(ji,jj,jk,jn) = tabres(ji,jj,jk,jn) / e3t_n(ji,jj,jk) 
     457                        ts(ji,jj,jk,jn,Kmm_a) = tabres(ji,jj,jk,jn) / e3t(ji,jj,jk,Kmm_a) 
    453458                     END IF 
    454459                  END DO 
     
    457462         END DO 
    458463         ! 
    459          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    460             tsb(i1:i2,j1:j2,k1:k2,1:jpts)  = tsn(i1:i2,j1:j2,k1:k2,1:jpts) 
     464         IF  ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 
     465            ts(i1:i2,j1:j2,k1:k2,1:jpts,Kbb_a)  = ts(i1:i2,j1:j2,k1:k2,1:jpts,Kmm_a) 
    461466         ENDIF 
    462467         ! 
     
    478483      ! 
    479484      INTEGER ::   ji, jj, jk 
    480       REAL(wp)::   zrhoy 
     485      REAL(wp)::   zrhoy, zub, zunu, zuno 
    481486! VERTICAL REFINEMENT BEGIN 
    482487      REAL(wp), DIMENSION(i1:i2,j1:j2,1:jpk) :: tabres_child 
     
    491496      IF( before ) THEN 
    492497         zrhoy = Agrif_Rhoy() 
    493          AGRIF_SpecialValue = -999._wp 
     498!jc_alt 
     499!         AGRIF_SpecialValue = -999._wp 
    494500         DO jk=k1,k2 
    495501            DO jj=j1,j2 
    496502               DO ji=i1,i2 
    497                   tabres(ji,jj,jk,1) = zrhoy * e2u(ji,jj) * e3u_n(ji,jj,jk) * umask(ji,jj,jk) * un(ji,jj,jk)  & 
    498                                        + (umask(ji,jj,jk)-1)*999._wp 
    499                   tabres(ji,jj,jk,2) = zrhoy * umask(ji,jj,jk) * e2u(ji,jj) * e3u_n(ji,jj,jk)  & 
    500                                        + (umask(ji,jj,jk)-1)*999._wp 
     503!jc_alt 
     504!                  tabres(ji,jj,jk,1) = zrhoy * e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a) * umask(ji,jj,jk) * uu(ji,jj,jk,Kmm_a)  & 
     505!                                     &  + (umask(ji,jj,jk)-1._wp)*999._wp 
     506                  tabres(ji,jj,jk,1) = zrhoy * e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a) * umask(ji,jj,jk) * uu(ji,jj,jk,Kmm_a)   
     507!jc_alt 
     508!                  tabres(ji,jj,jk,2) = zrhoy * umask(ji,jj,jk) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a)  & 
     509!                                     &  + (umask(ji,jj,jk)-1._wp)*999._wp 
     510                  tabres(ji,jj,jk,2) = zrhoy * umask(ji,jj,jk) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a) 
    501511               END DO 
    502512            END DO 
     
    511521               tabin(:) = 0._wp 
    512522               DO jk=k1,k2 !k2=jpk of child grid 
    513                   IF( tabres(ji,jj,jk,2) < -900) EXIT 
     523!jc_alt 
     524!                  IF( tabres(ji,jj,jk,2) < -900._wp) EXIT 
     525                  IF( tabres(ji,jj,jk,2) == 0.) EXIT 
    514526                  N_in = N_in + 1 
    515527                  tabin(jk) = tabres(ji,jj,jk,1)/tabres(ji,jj,jk,2) 
     
    520532                  IF (umask(ji,jj,jk) == 0) EXIT 
    521533                  N_out = N_out + 1 
    522                   h_out(N_out) = e3u_n(ji,jj,jk) 
     534                  h_out(N_out) = e3u(ji,jj,jk,Kmm_a) 
    523535               ENDDO 
    524536               IF (N_in * N_out > 0) THEN 
    525537                  h_diff = sum(h_out(1:N_out))-sum(h_in(1:N_in)) 
     538                  excess = 0._wp 
    526539                  IF (h_diff < -1.e-4) THEN 
    527540!Even if bathy at T points match it's possible for the U points to be deeper in the child grid.  
    528541!In this case we need to move transport from the child grid cells below bed of parent grid into the bottom cell. 
    529                      excess = 0._wp 
    530542                     DO jk=N_in,1,-1 
    531543                        thick = MIN(-1*h_diff, h_in(jk)) 
     
    540552                     ENDDO 
    541553                  ENDIF 
    542                   CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),tabres_child(ji,jj,1:N_out),h_out(1:N_out),N_in,N_out) 
     554                  CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),tabres_child(ji,jj,1:N_out),h_out(1:N_out),N_in,N_out,1) 
    543555                  tabres_child(ji,jj,N_out) = tabres_child(ji,jj,N_out) + excess/(e2u(ji,jj)*h_out(N_out)) 
    544556               ENDIF 
    545557            ENDDO 
    546558         ENDDO 
    547  
     559         ! 
    548560         DO jk=1,jpk 
    549561            DO jj=j1,j2 
    550562               DO ji=i1,i2 
    551                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
    552                      ub(ji,jj,jk) = ub(ji,jj,jk) &  
    553                            & + atfp * ( tabres_child(ji,jj,jk) - un(ji,jj,jk) ) * umask(ji,jj,jk) 
     563                  IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 
     564                     zub  = uu(ji,jj,jk,Kbb_a) * e3u(ji,jj,jk,Kbb_a)  ! fse3t_b prior update should be used 
     565                     zuno = uu(ji,jj,jk,Kmm_a) * e3u(ji,jj,jk,Krhs_a) 
     566                     zunu = tabres_child(ji,jj,jk) * e3u(ji,jj,jk,Kmm_a) 
     567                     uu(ji,jj,jk,Kbb_a) = ( zub + rn_atfp * ( zunu - zuno) ) &       
     568                                    & * umask(ji,jj,jk) / e3u(ji,jj,jk,Kbb_a) 
    554569                  ENDIF 
    555570                  ! 
    556                   un(ji,jj,jk) = tabres_child(ji,jj,jk) * umask(ji,jj,jk) 
    557                END DO 
    558             END DO 
    559          END DO 
     571                  uu(ji,jj,jk,Kmm_a) = tabres_child(ji,jj,jk) * umask(ji,jj,jk) 
     572               END DO 
     573            END DO 
     574         END DO 
     575         ! 
     576         IF  ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 
     577            uu(i1:i2,j1:j2,1:jpkm1,Kbb_a)  = uu(i1:i2,j1:j2,1:jpkm1,Kmm_a) 
     578         ENDIF 
     579         ! 
    560580      ENDIF 
    561581      !  
     
    579599         zrhoy = Agrif_Rhoy() 
    580600         DO jk = k1, k2 
    581             tabres(i1:i2,j1:j2,jk,1) = zrhoy * e2u(i1:i2,j1:j2) * e3u_n(i1:i2,j1:j2,jk) * un(i1:i2,j1:j2,jk) 
     601            tabres(i1:i2,j1:j2,jk,1) = zrhoy * e2u(i1:i2,j1:j2) * e3u(i1:i2,j1:j2,jk,Kmm_a) * uu(i1:i2,j1:j2,jk,Kmm_a) 
    582602         END DO 
    583603      ELSE 
     
    587607                  tabres(ji,jj,jk,1) = tabres(ji,jj,jk,1) * r1_e2u(ji,jj)  
    588608                  ! 
    589                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
    590                      zub  = ub(ji,jj,jk) * e3u_b(ji,jj,jk)  ! fse3t_b prior update should be used 
    591                      zuno = un(ji,jj,jk) * e3u_a(ji,jj,jk) 
     609                  IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 
     610                     zub  = uu(ji,jj,jk,Kbb_a) * e3u(ji,jj,jk,Kbb_a)  ! fse3t_b prior update should be used 
     611                     zuno = uu(ji,jj,jk,Kmm_a) * e3u(ji,jj,jk,Krhs_a) 
    592612                     zunu = tabres(ji,jj,jk,1) 
    593                      ub(ji,jj,jk) = ( zub + atfp * ( zunu - zuno) ) &       
    594                                     & * umask(ji,jj,jk) / e3u_b(ji,jj,jk) 
     613                     uu(ji,jj,jk,Kbb_a) = ( zub + rn_atfp * ( zunu - zuno) ) &       
     614                                    & * umask(ji,jj,jk) / e3u(ji,jj,jk,Kbb_a) 
    595615                  ENDIF 
    596616                  ! 
    597                   un(ji,jj,jk) = tabres(ji,jj,jk,1) * umask(ji,jj,jk) / e3u_n(ji,jj,jk) 
    598                END DO 
    599             END DO 
    600          END DO 
    601          ! 
    602          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    603             ub(i1:i2,j1:j2,k1:k2)  = un(i1:i2,j1:j2,k1:k2) 
     617                  uu(ji,jj,jk,Kmm_a) = tabres(ji,jj,jk,1) * umask(ji,jj,jk) / e3u(ji,jj,jk,Kmm_a) 
     618               END DO 
     619            END DO 
     620         END DO 
     621         ! 
     622         IF  ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 
     623            uu(i1:i2,j1:j2,k1:k2,Kbb_a)  = uu(i1:i2,j1:j2,k1:k2,Kmm_a) 
    604624         ENDIF 
    605625         ! 
     
    632652         IF (western_side) THEN 
    633653            DO jj=j1,j2 
    634                zcor = un_b(i1-1,jj) * hu_a(i1-1,jj) * r1_hu_n(i1-1,jj) - un_b(i1-1,jj) 
    635                un_b(i1-1,jj) = un_b(i1-1,jj) + zcor 
     654               zcor = uu_b(i1-1,jj,Kmm_a) * hu(i1-1,jj,Krhs_a) * r1_hu(i1-1,jj,Kmm_a) - uu_b(i1-1,jj,Kmm_a) 
     655               uu_b(i1-1,jj,Kmm_a) = uu_b(i1-1,jj,Kmm_a) + zcor 
    636656               DO jk=1,jpkm1 
    637                   un(i1-1,jj,jk) = un(i1-1,jj,jk) + zcor * umask(i1-1,jj,jk) 
     657                  uu(i1-1,jj,jk,Kmm_a) = uu(i1-1,jj,jk,Kmm_a) + zcor * umask(i1-1,jj,jk) 
    638658               END DO  
    639659            END DO 
     
    642662         IF (eastern_side) THEN 
    643663            DO jj=j1,j2 
    644                zcor = un_b(i2+1,jj) * hu_a(i2+1,jj) * r1_hu_n(i2+1,jj) - un_b(i2+1,jj) 
    645                un_b(i2+1,jj) = un_b(i2+1,jj) + zcor 
     664               zcor = uu_b(i2+1,jj,Kmm_a) * hu(i2+1,jj,Krhs_a) * r1_hu(i2+1,jj,Kmm_a) - uu_b(i2+1,jj,Kmm_a) 
     665               uu_b(i2+1,jj,Kmm_a) = uu_b(i2+1,jj,Kmm_a) + zcor 
    646666               DO jk=1,jpkm1 
    647                   un(i2+1,jj,jk) = un(i2+1,jj,jk) + zcor * umask(i2+1,jj,jk) 
     667                  uu(i2+1,jj,jk,Kmm_a) = uu(i2+1,jj,jk,Kmm_a) + zcor * umask(i2+1,jj,jk) 
    648668               END DO  
    649669            END DO 
     
    665685      ! 
    666686      INTEGER  ::   ji, jj, jk 
    667       REAL(wp) ::   zrhox 
     687      REAL(wp) ::   zrhox, zvb, zvnu, zvno 
    668688! VERTICAL REFINEMENT BEGIN 
    669689      REAL(wp), DIMENSION(i1:i2,j1:j2,1:jpk) :: tabres_child 
     
    678698      IF( before ) THEN 
    679699         zrhox = Agrif_Rhox() 
    680          AGRIF_SpecialValue = -999._wp 
     700!jc_alt 
     701!         AGRIF_SpecialValue = -999._wp 
    681702         DO jk=k1,k2 
    682703            DO jj=j1,j2 
    683704               DO ji=i1,i2 
    684                   tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v_n(ji,jj,jk) * vmask(ji,jj,jk) * vn(ji,jj,jk) & 
    685                                        + (vmask(ji,jj,jk)-1)*999._wp 
    686                   tabres(ji,jj,jk,2) = vmask(ji,jj,jk) * zrhox * e1v(ji,jj) * e3v_n(ji,jj,jk) & 
    687                                        + (vmask(ji,jj,jk)-1)*999._wp 
     705!jc_alt 
     706!                  tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) * vmask(ji,jj,jk) * vv(ji,jj,jk,Kmm_a) & 
     707!                                     & + (vmask(ji,jj,jk)-1._wp) * 999._wp 
     708                  tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) * vmask(ji,jj,jk) * vv(ji,jj,jk,Kmm_a)  
     709!jc_alt 
     710!                  tabres(ji,jj,jk,2) = zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) * vmask(ji,jj,jk) & 
     711!                                     & + (vmask(ji,jj,jk)-1._wp) * 999._wp 
     712                  tabres(ji,jj,jk,2) = zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) * vmask(ji,jj,jk) 
    688713               END DO 
    689714            END DO 
     
    696721               N_in = 0 
    697722               DO jk=k1,k2 
    698                   IF (tabres(ji,jj,jk,2) < -900) EXIT 
     723!jc_alt 
     724!                  IF (tabres(ji,jj,jk,2) < -900._wp) EXIT 
     725                  IF (tabres(ji,jj,jk,2) == 0) EXIT 
    699726                  N_in = N_in + 1 
    700727                  tabin(jk) = tabres(ji,jj,jk,1)/tabres(ji,jj,jk,2) 
     
    705732                  IF (vmask(ji,jj,jk) == 0) EXIT 
    706733                  N_out = N_out + 1 
    707                   h_out(N_out) = e3v_n(ji,jj,jk) 
     734                  h_out(N_out) = e3v(ji,jj,jk,Kmm_a) 
    708735               ENDDO 
    709736               IF (N_in * N_out > 0) THEN 
    710737                  h_diff = sum(h_out(1:N_out))-sum(h_in(1:N_in)) 
     738                  excess = 0._wp 
    711739                  IF (h_diff < -1.e-4) then 
    712 !Even if bathy at T points match it's possible for the U points to be deeper in the child grid.  
     740!Even if bathy at T points match it's possible for the V points to be deeper in the child grid.  
    713741!In this case we need to move transport from the child grid cells below bed of parent grid into the bottom cell. 
    714                      excess = 0._wp 
    715742                     DO jk=N_in,1,-1 
    716743                        thick = MIN(-1*h_diff, h_in(jk)) 
     
    725752                     ENDDO 
    726753                  ENDIF 
    727                   CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),tabres_child(ji,jj,1:N_out),h_out(1:N_out),N_in,N_out) 
     754                  CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),tabres_child(ji,jj,1:N_out),h_out(1:N_out),N_in,N_out,1) 
    728755                  tabres_child(ji,jj,N_out) = tabres_child(ji,jj,N_out) + excess/(e1v(ji,jj)*h_out(N_out)) 
    729756               ENDIF 
    730757            ENDDO 
    731758         ENDDO 
    732  
    733          DO jk=1,jpk 
     759         ! 
     760         DO jk=1,jpkm1 
    734761            DO jj=j1,j2 
    735762               DO ji=i1,i2 
    736                   ! 
    737                   IF( .NOT.(lk_agrif_fstep.AND.(neuler==0)) ) THEN ! Add asselin part 
    738                      vb(ji,jj,jk) = vb(ji,jj,jk) &  
    739                            & + atfp * ( tabres_child(ji,jj,jk) - vn(ji,jj,jk) ) * vmask(ji,jj,jk) 
     763                  IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 
     764                     zvb  = vv(ji,jj,jk,Kbb_a) * e3v(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 
     765                     zvno = vv(ji,jj,jk,Kmm_a) * e3v(ji,jj,jk,Krhs_a) 
     766                     zvnu = tabres_child(ji,jj,jk) * e3v(ji,jj,jk,Kmm_a) 
     767                     vv(ji,jj,jk,Kbb_a) = ( zvb + rn_atfp * ( zvnu - zvno) ) &       
     768                                    & * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kbb_a) 
    740769                  ENDIF 
    741770                  ! 
    742                   vn(ji,jj,jk) = tabres_child(ji,jj,jk) * vmask(ji,jj,jk) 
    743                END DO 
    744             END DO 
    745          END DO 
     771                  vv(ji,jj,jk,Kmm_a) = tabres_child(ji,jj,jk) * vmask(ji,jj,jk) 
     772               END DO 
     773            END DO 
     774         END DO 
     775         ! 
     776         IF  ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 
     777            vv(i1:i2,j1:j2,1:jpkm1,Kbb_a)  = vv(i1:i2,j1:j2,1:jpkm1,Kmm_a) 
     778         ENDIF 
     779         ! 
    746780      ENDIF 
    747781      !  
     
    767801            DO jj=j1,j2 
    768802               DO ji=i1,i2 
    769                   tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v_n(ji,jj,jk) * vn(ji,jj,jk) 
     803                  tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) * vv(ji,jj,jk,Kmm_a) 
    770804               END DO 
    771805            END DO 
     
    777811                  tabres(ji,jj,jk,1) = tabres(ji,jj,jk,1) * r1_e1v(ji,jj) 
    778812                  ! 
    779                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
    780                      zvb  = vb(ji,jj,jk) * e3v_b(ji,jj,jk) ! fse3t_b prior update should be used 
    781                      zvno = vn(ji,jj,jk) * e3v_a(ji,jj,jk) 
     813                  IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 
     814                     zvb  = vv(ji,jj,jk,Kbb_a) * e3v(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 
     815                     zvno = vv(ji,jj,jk,Kmm_a) * e3v(ji,jj,jk,Krhs_a) 
    782816                     zvnu = tabres(ji,jj,jk,1) 
    783                      vb(ji,jj,jk) = ( zvb + atfp * ( zvnu - zvno) ) &       
    784                                     & * vmask(ji,jj,jk) / e3v_b(ji,jj,jk) 
     817                     vv(ji,jj,jk,Kbb_a) = ( zvb + rn_atfp * ( zvnu - zvno) ) &       
     818                                    & * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kbb_a) 
    785819                  ENDIF 
    786820                  ! 
    787                   vn(ji,jj,jk) = tabres(ji,jj,jk,1) * vmask(ji,jj,jk) / e3v_n(ji,jj,jk) 
    788                END DO 
    789             END DO 
    790          END DO 
    791          ! 
    792          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    793             vb(i1:i2,j1:j2,k1:k2)  = vn(i1:i2,j1:j2,k1:k2) 
     821                  vv(ji,jj,jk,Kmm_a) = tabres(ji,jj,jk,1) * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kmm_a) 
     822               END DO 
     823            END DO 
     824         END DO 
     825         ! 
     826         IF  ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 
     827            vv(i1:i2,j1:j2,k1:k2,Kbb_a)  = vv(i1:i2,j1:j2,k1:k2,Kmm_a) 
    794828         ENDIF 
    795829         ! 
     
    802836   SUBROUTINE correct_v_bdy( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before, nb, ndir ) 
    803837      !!--------------------------------------------- 
    804       !!           *** ROUTINE correct_u_bdy *** 
     838      !!           *** ROUTINE correct_v_bdy *** 
    805839      !!--------------------------------------------- 
    806840      INTEGER                                     , INTENT(in   ) :: i1, i2, j1, j2, k1, k2, n1, n2 
     
    822856         IF (southern_side) THEN 
    823857            DO ji=i1,i2 
    824                zcor = vn_b(ji,j1-1) * hv_a(ji,j1-1) * r1_hv_n(ji,j1-1) - vn_b(ji,j1-1) 
    825                vn_b(ji,j1-1) = vn_b(ji,j1-1) + zcor 
     858               zcor = vv_b(ji,j1-1,Kmm_a) * hv(ji,j1-1,Krhs_a) * r1_hv(ji,j1-1,Kmm_a) - vv_b(ji,j1-1,Kmm_a) 
     859               vv_b(ji,j1-1,Kmm_a) = vv_b(ji,j1-1,Kmm_a) + zcor 
    826860               DO jk=1,jpkm1 
    827                   vn(ji,j1-1,jk) = vn(ji,j1-1,jk) + zcor * vmask(ji,j1-1,jk) 
     861                  vv(ji,j1-1,jk,Kmm_a) = vv(ji,j1-1,jk,Kmm_a) + zcor * vmask(ji,j1-1,jk) 
    828862               END DO  
    829863            END DO 
     
    832866         IF (northern_side) THEN 
    833867            DO ji=i1,i2 
    834                zcor = vn_b(ji,j2+1) * hv_a(ji,j2+1) * r1_hv_n(ji,j2+1) - vn_b(ji,j2+1) 
    835                vn_b(ji,j2+1) = vn_b(ji,j2+1) + zcor 
     868               zcor = vv_b(ji,j2+1,Kmm_a) * hv(ji,j2+1,Krhs_a) * r1_hv(ji,j2+1,Kmm_a) - vv_b(ji,j2+1,Kmm_a) 
     869               vv_b(ji,j2+1,Kmm_a) = vv_b(ji,j2+1,Kmm_a) + zcor 
    836870               DO jk=1,jpkm1 
    837                   vn(ji,j2+1,jk) = vn(ji,j2+1,jk) + zcor * vmask(ji,j2+1,jk) 
     871                  vv(ji,j2+1,jk,Kmm_a) = vv(ji,j2+1,jk,Kmm_a) + zcor * vmask(ji,j2+1,jk) 
    838872               END DO  
    839873            END DO 
     
    862896         DO jj=j1,j2 
    863897            DO ji=i1,i2 
    864                tabres(ji,jj) = zrhoy * un_b(ji,jj) * hu_n(ji,jj) * e2u(ji,jj) 
     898               tabres(ji,jj) = zrhoy * uu_b(ji,jj,Kmm_a) * hu(ji,jj,Kmm_a) * e2u(ji,jj) 
    865899            END DO 
    866900         END DO 
     
    873907               spgu(ji,jj) = 0._wp 
    874908               DO jk=1,jpkm1 
    875                   spgu(ji,jj) = spgu(ji,jj) + e3u_n(ji,jj,jk) * un(ji,jj,jk) 
     909                  spgu(ji,jj) = spgu(ji,jj) + e3u(ji,jj,jk,Kmm_a) * uu(ji,jj,jk,Kmm_a) 
    876910               END DO 
    877911               ! 
    878                zcorr = (tabres(ji,jj) - spgu(ji,jj)) * r1_hu_n(ji,jj) 
     912               zcorr = (tabres(ji,jj) - spgu(ji,jj)) * r1_hu(ji,jj,Kmm_a) 
    879913               DO jk=1,jpkm1               
    880                   un(ji,jj,jk) = un(ji,jj,jk) + zcorr * umask(ji,jj,jk)            
     914                  uu(ji,jj,jk,Kmm_a) = uu(ji,jj,jk,Kmm_a) + zcorr * umask(ji,jj,jk)            
    881915               END DO 
    882916               ! 
    883917               ! Update barotropic velocities: 
    884918               IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 
    885                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
    886                      zcorr = (tabres(ji,jj) - un_b(ji,jj) * hu_a(ji,jj)) * r1_hu_b(ji,jj) 
    887                      ub_b(ji,jj) = ub_b(ji,jj) + atfp * zcorr * umask(ji,jj,1) 
     919                  IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 
     920                     zcorr = (tabres(ji,jj) - uu_b(ji,jj,Kmm_a) * hu(ji,jj,Krhs_a)) * r1_hu(ji,jj,Kbb_a) 
     921                     uu_b(ji,jj,Kbb_a) = uu_b(ji,jj,Kbb_a) + rn_atfp * zcorr * umask(ji,jj,1) 
    888922                  END IF 
    889923               ENDIF     
    890                un_b(ji,jj) = tabres(ji,jj) * r1_hu_n(ji,jj) * umask(ji,jj,1) 
     924               uu_b(ji,jj,Kmm_a) = tabres(ji,jj) * r1_hu(ji,jj,Kmm_a) * umask(ji,jj,1) 
    891925               !        
    892926               ! Correct "before" velocities to hold correct bt component: 
    893927               spgu(ji,jj) = 0.e0 
    894928               DO jk=1,jpkm1 
    895                   spgu(ji,jj) = spgu(ji,jj) + e3u_b(ji,jj,jk) * ub(ji,jj,jk) 
     929                  spgu(ji,jj) = spgu(ji,jj) + e3u(ji,jj,jk,Kbb_a) * uu(ji,jj,jk,Kbb_a) 
    896930               END DO 
    897931               ! 
    898                zcorr = ub_b(ji,jj) - spgu(ji,jj) * r1_hu_b(ji,jj) 
     932               zcorr = uu_b(ji,jj,Kbb_a) - spgu(ji,jj) * r1_hu(ji,jj,Kbb_a) 
    899933               DO jk=1,jpkm1               
    900                   ub(ji,jj,jk) = ub(ji,jj,jk) + zcorr * umask(ji,jj,jk)            
     934                  uu(ji,jj,jk,Kbb_a) = uu(ji,jj,jk,Kbb_a) + zcorr * umask(ji,jj,jk)            
    901935               END DO 
    902936               ! 
     
    904938         END DO 
    905939         ! 
    906          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    907             ub_b(i1:i2,j1:j2)  = un_b(i1:i2,j1:j2) 
     940         IF  ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 
     941            uu_b(i1:i2,j1:j2,Kbb_a)  = uu_b(i1:i2,j1:j2,Kmm_a) 
    908942         ENDIF 
    909943      ENDIF 
     
    928962         DO jj=j1,j2 
    929963            DO ji=i1,i2 
    930                tabres(ji,jj) = zrhox * vn_b(ji,jj) * hv_n(ji,jj) * e1v(ji,jj)  
     964               tabres(ji,jj) = zrhox * vv_b(ji,jj,Kmm_a) * hv(ji,jj,Kmm_a) * e1v(ji,jj)  
    931965            END DO 
    932966         END DO 
     
    939973               spgv(ji,jj) = 0.e0 
    940974               DO jk=1,jpkm1 
    941                   spgv(ji,jj) = spgv(ji,jj) + e3v_n(ji,jj,jk) * vn(ji,jj,jk) 
     975                  spgv(ji,jj) = spgv(ji,jj) + e3v(ji,jj,jk,Kmm_a) * vv(ji,jj,jk,Kmm_a) 
    942976               END DO 
    943977               ! 
    944                zcorr = (tabres(ji,jj) - spgv(ji,jj)) * r1_hv_n(ji,jj) 
     978               zcorr = (tabres(ji,jj) - spgv(ji,jj)) * r1_hv(ji,jj,Kmm_a) 
    945979               DO jk=1,jpkm1               
    946                   vn(ji,jj,jk) = vn(ji,jj,jk) + zcorr * vmask(ji,jj,jk)            
     980                  vv(ji,jj,jk,Kmm_a) = vv(ji,jj,jk,Kmm_a) + zcorr * vmask(ji,jj,jk)            
    947981               END DO 
    948982               ! 
    949983               ! Update barotropic velocities: 
    950984               IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 
    951                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
    952                      zcorr = (tabres(ji,jj) - vn_b(ji,jj) * hv_a(ji,jj)) * r1_hv_b(ji,jj) 
    953                      vb_b(ji,jj) = vb_b(ji,jj) + atfp * zcorr * vmask(ji,jj,1) 
     985                  IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 
     986                     zcorr = (tabres(ji,jj) - vv_b(ji,jj,Kmm_a) * hv(ji,jj,Krhs_a)) * r1_hv(ji,jj,Kbb_a) 
     987                     vv_b(ji,jj,Kbb_a) = vv_b(ji,jj,Kbb_a) + rn_atfp * zcorr * vmask(ji,jj,1) 
    954988                  END IF 
    955989               ENDIF               
    956                vn_b(ji,jj) = tabres(ji,jj) * r1_hv_n(ji,jj) * vmask(ji,jj,1) 
     990               vv_b(ji,jj,Kmm_a) = tabres(ji,jj) * r1_hv(ji,jj,Kmm_a) * vmask(ji,jj,1) 
    957991               !        
    958992               ! Correct "before" velocities to hold correct bt component: 
    959993               spgv(ji,jj) = 0.e0 
    960994               DO jk=1,jpkm1 
    961                   spgv(ji,jj) = spgv(ji,jj) + e3v_b(ji,jj,jk) * vb(ji,jj,jk) 
     995                  spgv(ji,jj) = spgv(ji,jj) + e3v(ji,jj,jk,Kbb_a) * vv(ji,jj,jk,Kbb_a) 
    962996               END DO 
    963997               ! 
    964                zcorr = vb_b(ji,jj) - spgv(ji,jj) * r1_hv_b(ji,jj) 
     998               zcorr = vv_b(ji,jj,Kbb_a) - spgv(ji,jj) * r1_hv(ji,jj,Kbb_a) 
    965999               DO jk=1,jpkm1               
    966                   vb(ji,jj,jk) = vb(ji,jj,jk) + zcorr * vmask(ji,jj,jk)            
     1000                  vv(ji,jj,jk,Kbb_a) = vv(ji,jj,jk,Kbb_a) + zcorr * vmask(ji,jj,jk)            
    9671001               END DO 
    9681002               ! 
     
    9701004         END DO 
    9711005         ! 
    972          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    973             vb_b(i1:i2,j1:j2)  = vn_b(i1:i2,j1:j2) 
     1006         IF  ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 
     1007            vv_b(i1:i2,j1:j2,Kbb_a)  = vv_b(i1:i2,j1:j2,Kmm_a) 
    9741008         ENDIF 
    9751009         ! 
     
    9931027         DO jj=j1,j2 
    9941028            DO ji=i1,i2 
    995                tabres(ji,jj) = sshn(ji,jj) 
     1029               tabres(ji,jj) = ssh(ji,jj,Kmm_a) 
    9961030            END DO 
    9971031         END DO 
    9981032      ELSE 
    999          IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
     1033         IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 
    10001034            DO jj=j1,j2 
    10011035               DO ji=i1,i2 
    1002                   sshb(ji,jj) =   sshb(ji,jj) & 
    1003                         & + atfp * ( tabres(ji,jj) - sshn(ji,jj) ) * tmask(ji,jj,1) 
     1036                  ssh(ji,jj,Kbb_a) =   ssh(ji,jj,Kbb_a) & 
     1037                        & + rn_atfp * ( tabres(ji,jj) - ssh(ji,jj,Kmm_a) ) * tmask(ji,jj,1) 
    10041038               END DO 
    10051039            END DO 
     
    10081042         DO jj=j1,j2 
    10091043            DO ji=i1,i2 
    1010                sshn(ji,jj) = tabres(ji,jj) * tmask(ji,jj,1) 
    1011             END DO 
    1012          END DO 
    1013          ! 
    1014          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    1015             sshb(i1:i2,j1:j2)  = sshn(i1:i2,j1:j2) 
     1044               ssh(ji,jj,Kmm_a) = tabres(ji,jj) * tmask(ji,jj,1) 
     1045            END DO 
     1046         END DO 
     1047         ! 
     1048         IF  ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 
     1049            ssh(i1:i2,j1:j2,Kbb_a)  = ssh(i1:i2,j1:j2,Kmm_a) 
    10161050         ENDIF 
    10171051         ! 
     
    10931127         IF (western_side) THEN 
    10941128            DO jj=j1,j2 
    1095                zcor = rdt * r1_e1e2t(i1  ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj))  
    1096                sshn(i1  ,jj) = sshn(i1  ,jj) + zcor 
    1097                IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(i1  ,jj) = sshb(i1  ,jj) + atfp * zcor 
     1129               zcor = rn_Dt * r1_e1e2t(i1  ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj))  
     1130               ssh(i1  ,jj,Kmm_a) = ssh(i1  ,jj,Kmm_a) + zcor 
     1131               IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i1  ,jj,Kbb_a) = ssh(i1  ,jj,Kbb_a) + rn_atfp * zcor 
    10981132            END DO 
    10991133         ENDIF 
    11001134         IF (eastern_side) THEN 
    11011135            DO jj=j1,j2 
    1102                zcor = - rdt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj)) 
    1103                sshn(i2+1,jj) = sshn(i2+1,jj) + zcor 
    1104                IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(i2+1,jj) = sshb(i2+1,jj) + atfp * zcor 
     1136               zcor = - rn_Dt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj)) 
     1137               ssh(i2+1,jj,Kmm_a) = ssh(i2+1,jj,Kmm_a) + zcor 
     1138               IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i2+1,jj,Kbb_a) = ssh(i2+1,jj,Kbb_a) + rn_atfp * zcor 
    11051139            END DO 
    11061140         ENDIF 
     
    11811215         IF (southern_side) THEN 
    11821216            DO ji=i1,i2 
    1183                zcor = rdt * r1_e1e2t(ji,j1  ) * e1v(ji,j1  ) * (vb2_b(ji,j1)-tabres(ji,j1)) 
    1184                sshn(ji,j1  ) = sshn(ji,j1  ) + zcor 
    1185                IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(ji,j1  ) = sshb(ji,j1) + atfp * zcor 
     1217               zcor = rn_Dt * r1_e1e2t(ji,j1  ) * e1v(ji,j1  ) * (vb2_b(ji,j1)-tabres(ji,j1)) 
     1218               ssh(ji,j1  ,Kmm_a) = ssh(ji,j1  ,Kmm_a) + zcor 
     1219               IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j1  ,Kbb_a) = ssh(ji,j1,Kbb_a) + rn_atfp * zcor 
    11861220            END DO 
    11871221         ENDIF 
    11881222         IF (northern_side) THEN                
    11891223            DO ji=i1,i2 
    1190                zcor = - rdt * r1_e1e2t(ji,j2+1) * e1v(ji,j2  ) * (vb2_b(ji,j2)-tabres(ji,j2)) 
    1191                sshn(ji,j2+1) = sshn(ji,j2+1) + zcor 
    1192                IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(ji,j2+1) = sshb(ji,j2+1) + atfp * zcor 
     1224               zcor = - rn_Dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2  ) * (vb2_b(ji,j2)-tabres(ji,j2)) 
     1225               ssh(ji,j2+1,Kmm_a) = ssh(ji,j2+1,Kmm_a) + zcor 
     1226               IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j2+1,Kbb_a) = ssh(ji,j2+1,Kbb_a) + rn_atfp * zcor 
    11931227            END DO 
    11941228         ENDIF 
     
    13191353            DO jj=j1,j2 
    13201354               DO ji=i1,i2 
    1321                   ptab(ji,jj,jk) = e3t_0(ji,jj,jk) * (1._wp + sshn(ji,jj) & 
     1355                  ptab(ji,jj,jk) = e3t_0(ji,jj,jk) * (1._wp + ssh(ji,jj,Kmm_a) & 
    13221356                                     & *ssmask(ji,jj)/(ht_0(ji,jj)-1._wp + ssmask(ji,jj))) 
    13231357               END DO 
     
    13301364         ! Save "old" scale factor (prior update) for subsequent asselin correction 
    13311365         ! of prognostic variables 
    1332          e3t_a(i1:i2,j1:j2,1:jpkm1) = e3t_n(i1:i2,j1:j2,1:jpkm1) 
    1333  
    1334          ! One should also save e3t_b, but lacking of workspace... 
    1335 !         hdivn(i1:i2,j1:j2,1:jpkm1)   = e3t_b(i1:i2,j1:j2,1:jpkm1) 
    1336  
    1337          IF (.NOT.(lk_agrif_fstep.AND.(neuler==0) )) THEN 
     1366         e3t(i1:i2,j1:j2,1:jpkm1,Krhs_a) = e3t(i1:i2,j1:j2,1:jpkm1,Kmm_a) 
     1367 
     1368         ! One should also save e3t(:,:,:,Kbb_a), but lacking of workspace... 
     1369!         hdiv(i1:i2,j1:j2,1:jpkm1)   = e3t(i1:i2,j1:j2,1:jpkm1,Kbb_a) 
     1370 
     1371         IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler) )) THEN 
    13381372            DO jk = 1, jpkm1 
    13391373               DO jj=j1,j2 
    13401374                  DO ji=i1,i2 
    1341                      e3t_b(ji,jj,jk) =  e3t_b(ji,jj,jk) & 
    1342                            & + atfp * ( ptab(ji,jj,jk) - e3t_n(ji,jj,jk) ) 
     1375                     e3t(ji,jj,jk,Kbb_a) =  e3t(ji,jj,jk,Kbb_a) & 
     1376                           & + rn_atfp * ( ptab(ji,jj,jk) - e3t(ji,jj,jk,Kmm_a) ) 
    13431377                  END DO 
    13441378               END DO 
    13451379            END DO 
    13461380            ! 
    1347             e3w_b  (i1:i2,j1:j2,1) = e3w_0(i1:i2,j1:j2,1) + e3t_b(i1:i2,j1:j2,1) - e3t_0(i1:i2,j1:j2,1) 
    1348             gdepw_b(i1:i2,j1:j2,1) = 0.0_wp 
    1349             gdept_b(i1:i2,j1:j2,1) = 0.5_wp * e3w_b(i1:i2,j1:j2,1) 
     1381            e3w  (i1:i2,j1:j2,1,Kbb_a) = e3w_0(i1:i2,j1:j2,1) + e3t(i1:i2,j1:j2,1,Kbb_a) - e3t_0(i1:i2,j1:j2,1) 
     1382            gdepw(i1:i2,j1:j2,1,Kbb_a) = 0.0_wp 
     1383            gdept(i1:i2,j1:j2,1,Kbb_a) = 0.5_wp * e3w(i1:i2,j1:j2,1,Kbb_a) 
    13501384            ! 
    13511385            DO jk = 2, jpk 
     
    13531387                  DO ji = i1,i2             
    13541388                     zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) 
    1355                      e3w_b(ji,jj,jk)  = e3w_0(ji,jj,jk) + ( 1.0_wp - 0.5_wp * tmask(ji,jj,jk) ) *        &  
    1356                      &                                        ( e3t_b(ji,jj,jk-1) - e3t_0(ji,jj,jk-1) )  & 
     1389                     e3w(ji,jj,jk,Kbb_a)  = e3w_0(ji,jj,jk) + ( 1.0_wp - 0.5_wp * tmask(ji,jj,jk) ) *        &  
     1390                     &                                        ( e3t(ji,jj,jk-1,Kbb_a) - e3t_0(ji,jj,jk-1) )  & 
    13571391                     &                                  +            0.5_wp * tmask(ji,jj,jk)   *        & 
    1358                      &                                        ( e3t_b(ji,jj,jk  ) - e3t_0(ji,jj,jk  ) ) 
    1359                      gdepw_b(ji,jj,jk) = gdepw_b(ji,jj,jk-1) + e3t_b(ji,jj,jk-1) 
    1360                      gdept_b(ji,jj,jk) =      zcoef  * ( gdepw_b(ji,jj,jk  ) + 0.5 * e3w_b(ji,jj,jk))  & 
    1361                          &               + (1-zcoef) * ( gdept_b(ji,jj,jk-1) +       e3w_b(ji,jj,jk))  
     1392                     &                                        ( e3t(ji,jj,jk  ,Kbb_a) - e3t_0(ji,jj,jk  ) ) 
     1393                     gdepw(ji,jj,jk,Kbb_a) = gdepw(ji,jj,jk-1,Kbb_a) + e3t(ji,jj,jk-1,Kbb_a) 
     1394                     gdept(ji,jj,jk,Kbb_a) =      zcoef  * ( gdepw(ji,jj,jk  ,Kbb_a) + 0.5 * e3w(ji,jj,jk,Kbb_a))  & 
     1395                         &               + (1-zcoef) * ( gdept(ji,jj,jk-1,Kbb_a) +       e3w(ji,jj,jk,Kbb_a))  
    13621396                  END DO 
    13631397               END DO 
     
    13701404         ! 
    13711405         ! Update vertical scale factor at T-points: 
    1372          e3t_n(i1:i2,j1:j2,1:jpkm1) = ptab(i1:i2,j1:j2,1:jpkm1) 
     1406         e3t(i1:i2,j1:j2,1:jpkm1,Kmm_a) = ptab(i1:i2,j1:j2,1:jpkm1) 
    13731407         ! 
    13741408         ! Update total depth: 
    1375          ht_n(i1:i2,j1:j2) = 0._wp 
     1409         ht(i1:i2,j1:j2) = 0._wp 
    13761410         DO jk = 1, jpkm1 
    1377             ht_n(i1:i2,j1:j2) = ht_n(i1:i2,j1:j2) + e3t_n(i1:i2,j1:j2,jk) * tmask(i1:i2,j1:j2,jk) 
     1411            ht(i1:i2,j1:j2) = ht(i1:i2,j1:j2) + e3t(i1:i2,j1:j2,jk,Kmm_a) * tmask(i1:i2,j1:j2,jk) 
    13781412         END DO 
    13791413         ! 
    13801414         ! Update vertical scale factor at W-points and depths: 
    1381          e3w_n (i1:i2,j1:j2,1) = e3w_0(i1:i2,j1:j2,1) + e3t_n(i1:i2,j1:j2,1) - e3t_0(i1:i2,j1:j2,1) 
    1382          gdept_n(i1:i2,j1:j2,1) = 0.5_wp * e3w_n(i1:i2,j1:j2,1) 
    1383          gdepw_n(i1:i2,j1:j2,1) = 0.0_wp 
    1384          gde3w_n(i1:i2,j1:j2,1) = gdept_n(i1:i2,j1:j2,1) - (ht_n(i1:i2,j1:j2)-ht_0(i1:i2,j1:j2)) ! Last term in the rhs is ssh 
     1415         e3w (i1:i2,j1:j2,1,Kmm_a) = e3w_0(i1:i2,j1:j2,1) + e3t(i1:i2,j1:j2,1,Kmm_a) - e3t_0(i1:i2,j1:j2,1) 
     1416         gdept(i1:i2,j1:j2,1,Kmm_a) = 0.5_wp * e3w(i1:i2,j1:j2,1,Kmm_a) 
     1417         gdepw(i1:i2,j1:j2,1,Kmm_a) = 0.0_wp 
     1418         gde3w(i1:i2,j1:j2,1) = gdept(i1:i2,j1:j2,1,Kmm_a) - (ht(i1:i2,j1:j2)-ht_0(i1:i2,j1:j2)) ! Last term in the rhs is ssh 
    13851419         ! 
    13861420         DO jk = 2, jpk 
     
    13881422               DO ji = i1,i2             
    13891423               zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) 
    1390                e3w_n(ji,jj,jk)  = e3w_0(ji,jj,jk) + ( 1.0_wp - 0.5_wp * tmask(ji,jj,jk) ) * ( e3t_n(ji,jj,jk-1) - e3t_0(ji,jj,jk-1) )   & 
    1391                &                                  +            0.5_wp * tmask(ji,jj,jk)   * ( e3t_n(ji,jj,jk  ) - e3t_0(ji,jj,jk  ) ) 
    1392                gdepw_n(ji,jj,jk) = gdepw_n(ji,jj,jk-1) + e3t_n(ji,jj,jk-1) 
    1393                gdept_n(ji,jj,jk) =      zcoef  * ( gdepw_n(ji,jj,jk  ) + 0.5 * e3w_n(ji,jj,jk))  & 
    1394                    &               + (1-zcoef) * ( gdept_n(ji,jj,jk-1) +       e3w_n(ji,jj,jk))  
    1395                gde3w_n(ji,jj,jk) = gdept_n(ji,jj,jk) - (ht_n(ji,jj)-ht_0(ji,jj)) ! Last term in the rhs is ssh 
    1396                END DO 
    1397             END DO 
    1398          END DO 
    1399          ! 
    1400          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    1401             e3t_b (i1:i2,j1:j2,1:jpk)  = e3t_n (i1:i2,j1:j2,1:jpk) 
    1402             e3w_b (i1:i2,j1:j2,1:jpk)  = e3w_n (i1:i2,j1:j2,1:jpk) 
    1403             gdepw_b(i1:i2,j1:j2,1:jpk) = gdepw_n(i1:i2,j1:j2,1:jpk) 
    1404             gdept_b(i1:i2,j1:j2,1:jpk) = gdept_n(i1:i2,j1:j2,1:jpk) 
     1424               e3w(ji,jj,jk,Kmm_a)  = e3w_0(ji,jj,jk) + ( 1.0_wp - 0.5_wp * tmask(ji,jj,jk) ) * ( e3t(ji,jj,jk-1,Kmm_a) - e3t_0(ji,jj,jk-1) )   & 
     1425               &                                  +            0.5_wp * tmask(ji,jj,jk)   * ( e3t(ji,jj,jk  ,Kmm_a) - e3t_0(ji,jj,jk  ) ) 
     1426               gdepw(ji,jj,jk,Kmm_a) = gdepw(ji,jj,jk-1,Kmm_a) + e3t(ji,jj,jk-1,Kmm_a) 
     1427               gdept(ji,jj,jk,Kmm_a) =      zcoef  * ( gdepw(ji,jj,jk  ,Kmm_a) + 0.5 * e3w(ji,jj,jk,Kmm_a))  & 
     1428                   &               + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm_a) +       e3w(ji,jj,jk,Kmm_a))  
     1429               gde3w(ji,jj,jk) = gdept(ji,jj,jk,Kmm_a) - (ht(ji,jj)-ht_0(ji,jj)) ! Last term in the rhs is ssh 
     1430               END DO 
     1431            END DO 
     1432         END DO 
     1433         ! 
     1434         IF  ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 
     1435            e3t (i1:i2,j1:j2,1:jpk,Kbb_a)  = e3t (i1:i2,j1:j2,1:jpk,Kmm_a) 
     1436            e3w (i1:i2,j1:j2,1:jpk,Kbb_a)  = e3w (i1:i2,j1:j2,1:jpk,Kmm_a) 
     1437            gdepw(i1:i2,j1:j2,1:jpk,Kbb_a) = gdepw(i1:i2,j1:j2,1:jpk,Kmm_a) 
     1438            gdept(i1:i2,j1:j2,1:jpk,Kbb_a) = gdept(i1:i2,j1:j2,1:jpk,Kmm_a) 
    14051439         ENDIF 
    14061440         ! 
Note: See TracChangeset for help on using the changeset viewer.