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 14789 for NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/src/NST/agrif_oce_interp.F90 – NEMO

Ignore:
Timestamp:
2021-05-05T13:18:04+02:00 (3 years ago)
Author:
mcastril
Message:

[2021/HPC-11_mcastril_HPDAonline_DiagGPU] Update externals

Location:
NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
         5^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8^/vendors/PPR@HEAD            ext/PPR 
        89 
        910# SETTE 
        10 ^/utils/CI/sette@13559        sette 
         11^/utils/CI/sette@14244        sette 
  • NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/src/NST/agrif_oce_interp.F90

    r13286 r14789  
    22   !!====================================================================== 
    33   !!                   ***  MODULE  agrif_oce_interp  *** 
    4    !! AGRIF: interpolation package for the ocean dynamics (OPA) 
     4   !! AGRIF: interpolation package for the ocean dynamics (OCE) 
    55   !!====================================================================== 
    66   !! History :  2.0  !  2002-06  (L. Debreu)  Original cade 
     
    2828   USE agrif_oce 
    2929   USE phycst 
    30    USE dynspg_ts, ONLY: un_adv, vn_adv 
     30!!!   USE dynspg_ts, ONLY: un_adv, vn_adv 
    3131   ! 
    3232   USE in_out_manager 
     
    4545   PUBLIC   interpunb, interpvnb , interpub2b, interpvb2b 
    4646   PUBLIC   interpe3t, interpglamt, interpgphit 
    47    PUBLIC   interpht0, interpmbkt 
    48    PUBLIC   agrif_initts, agrif_initssh 
     47   PUBLIC   interpht0, interpmbkt, interpe3t0_vremap 
     48   PUBLIC   agrif_istate_oce, agrif_istate_ssh   ! called by icestate.F90 and domvvl.F90 
     49   PUBLIC   agrif_check_bat 
    4950 
    5051   INTEGER ::   bdy_tinterp = 0 
    5152 
    52    !!---------------------------------------------------------------------- 
     53   !! * Substitutions 
     54#  include "domzgr_substitute.h90" 
    5355   !! NEMO/NST 4.0 , NEMO Consortium (2018) 
    5456   !! $Id$ 
     
    5759CONTAINS 
    5860 
    59    SUBROUTINE Agrif_tra 
    60       !!---------------------------------------------------------------------- 
    61       !!                  ***  ROUTINE Agrif_tra  *** 
    62       !!---------------------------------------------------------------------- 
    63       ! 
    64       IF( Agrif_Root() )   RETURN 
     61   SUBROUTINE Agrif_istate_oce( Kbb, Kmm, Kaa ) 
     62      !!---------------------------------------------------------------------- 
     63      !!                 *** ROUTINE agrif_istate_oce *** 
     64      !! 
     65      !!                 set initial t, s, u, v, ssh from parent 
     66      !!---------------------------------------------------------------------- 
     67      ! 
     68      IMPLICIT NONE 
     69      ! 
     70      INTEGER, INTENT(in)  :: Kbb, Kmm, Kaa 
     71      INTEGER :: jn 
     72      !!---------------------------------------------------------------------- 
     73      IF(lwp) WRITE(numout,*) ' ' 
     74      IF(lwp) WRITE(numout,*) 'Agrif_istate_oce : interp child initial state from parent' 
     75      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~' 
     76      IF(lwp) WRITE(numout,*) ' ' 
     77 
     78      IF ( .NOT.Agrif_Parent(l_1st_euler) ) &  
     79         & CALL ctl_stop('AGRIF hot start requires to force Euler first step on parent') 
     80 
     81      l_ini_child           = .TRUE. 
     82      Agrif_SpecialValue    = 0.0_wp 
     83      Agrif_UseSpecialValue = .TRUE. 
     84 
     85      ts(:,:,:,:,Kbb) = 0.0_wp 
     86      uu(:,:,:,Kbb)   = 0.0_wp 
     87      vv(:,:,:,Kbb)   = 0.0_wp  
     88        
     89      Krhs_a = Kbb   ;   Kmm_a = Kbb 
     90 
     91      CALL Agrif_Init_Variable(tsini_id, procname=interptsn) 
     92 
     93      Agrif_UseSpecialValue = ln_spc_dyn 
     94      use_sign_north = .TRUE. 
     95      sign_north = -1._wp 
     96      CALL Agrif_Init_Variable(uini_id , procname=interpun ) 
     97      CALL Agrif_Init_Variable(vini_id , procname=interpvn ) 
     98      use_sign_north = .FALSE. 
     99 
     100      Agrif_UseSpecialValue = .FALSE. 
     101      l_ini_child           = .FALSE. 
     102 
     103      Krhs_a = Kaa   ;   Kmm_a = Kmm 
     104 
     105      DO jn = 1, jpts 
     106         ts(:,:,:,jn,Kbb) = ts(:,:,:,jn,Kbb) * tmask(:,:,:) 
     107      END DO 
     108      uu(:,:,:,Kbb) = uu(:,:,:,Kbb) * umask(:,:,:)      
     109      vv(:,:,:,Kbb) = vv(:,:,:,Kbb) * vmask(:,:,:)  
     110 
     111      CALL lbc_lnk( 'agrif_istate_oce', uu(:,:,:  ,Kbb), 'U', -1.0_wp , vv(:,:,:,Kbb), 'V', -1.0_wp ) 
     112      CALL lbc_lnk( 'agrif_istate_oce', ts(:,:,:,:,Kbb), 'T',  1.0_wp ) 
     113 
     114   END SUBROUTINE Agrif_istate_oce 
     115 
     116 
     117   SUBROUTINE Agrif_istate_ssh( Kbb, Kmm, Kaa ) 
     118      !!---------------------------------------------------------------------- 
     119      !!                 *** ROUTINE agrif_istate_ssh *** 
     120      !! 
     121      !!                    set initial ssh from parent 
     122      !!---------------------------------------------------------------------- 
     123      ! 
     124      IMPLICIT NONE 
     125      ! 
     126      INTEGER, INTENT(in)  :: Kbb, Kmm, Kaa  
     127      !!---------------------------------------------------------------------- 
     128      IF(lwp) WRITE(numout,*) ' ' 
     129      IF(lwp) WRITE(numout,*) 'Agrif_istate_ssh : interp child ssh from parent' 
     130      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~' 
     131      IF(lwp) WRITE(numout,*) ' ' 
     132 
     133      IF ( .NOT.Agrif_Parent(l_1st_euler) ) &  
     134         & CALL ctl_stop('AGRIF hot start requires to force Euler first step on parent') 
     135 
     136      Krhs_a = Kbb   ;   Kmm_a = Kbb 
    65137      ! 
    66138      Agrif_SpecialValue    = 0._wp 
    67139      Agrif_UseSpecialValue = .TRUE. 
    68       ! 
    69       CALL Agrif_Bc_variable( tsn_id, procname=interptsn ) 
     140      l_ini_child           = .TRUE. 
     141      ! 
     142      ssh(:,:,Kbb) = 0._wp 
     143      CALL Agrif_Init_Variable(sshini_id, procname=interpsshn) 
    70144      ! 
    71145      Agrif_UseSpecialValue = .FALSE. 
     146      l_ini_child           = .FALSE. 
     147      ! 
     148      Krhs_a = Kaa   ;   Kmm_a = Kmm 
     149      ! 
     150      CALL lbc_lnk( 'Agrif_istate_ssh', ssh(:,:,Kbb), 'T', 1._wp ) 
     151      ! 
     152      ssh(:,:,Kmm) = ssh(:,:,Kbb) 
     153      ssh(:,:,Kaa) = 0._wp 
     154 
     155   END SUBROUTINE Agrif_istate_ssh 
     156 
     157 
     158   SUBROUTINE Agrif_tra 
     159      !!---------------------------------------------------------------------- 
     160      !!                  ***  ROUTINE Agrif_tra  *** 
     161      !!---------------------------------------------------------------------- 
     162      ! 
     163      IF( Agrif_Root() )   RETURN 
     164      ! 
     165      Agrif_SpecialValue    = 0._wp 
     166      Agrif_UseSpecialValue = .TRUE. 
     167      l_vremap           = ln_vert_remap 
     168      ! 
     169      CALL Agrif_Bc_variable( ts_interp_id, procname=interptsn ) 
     170      ! 
     171      Agrif_UseSpecialValue = .FALSE. 
     172      l_vremap              = .FALSE. 
    72173      ! 
    73174   END SUBROUTINE Agrif_tra 
     
    89190      Agrif_SpecialValue    = 0.0_wp 
    90191      Agrif_UseSpecialValue = ln_spc_dyn 
     192      l_vremap              = ln_vert_remap 
    91193      ! 
    92194      use_sign_north = .TRUE. 
     
    94196      CALL Agrif_Bc_variable( un_interp_id, procname=interpun ) 
    95197      CALL Agrif_Bc_variable( vn_interp_id, procname=interpvn ) 
     198 
     199      IF( .NOT.ln_dynspg_ts ) THEN ! Get transports 
     200         ubdy(:,:) = 0._wp    ;  vbdy(:,:) = 0._wp 
     201         utint_stage(:,:) = 0 ;  vtint_stage(:,:) = 0 
     202         CALL Agrif_Bc_variable( unb_interp_id, procname=interpunb ) 
     203         CALL Agrif_Bc_variable( vnb_interp_id, procname=interpvnb ) 
     204      ENDIF 
     205 
    96206      use_sign_north = .FALSE. 
    97207      ! 
    98208      Agrif_UseSpecialValue = .FALSE. 
     209      l_vremap              = .FALSE. 
     210      ! 
     211      ! Ensure below that vertically integrated transports match 
     212      ! either transports out of time splitting procedure (ln_dynspg_ts=.TRUE.) 
     213      ! or parent grid transports (ln_dynspg_ts=.FALSE.) 
    99214      ! 
    100215      ! --- West --- ! 
    101216      IF( lk_west ) THEN 
    102217         ibdy1 = nn_hls + 2                  ! halo + land + 1 
    103          ibdy2 = nn_hls + 1 + nbghostcells   ! halo + land + nbghostcells 
     218         ibdy2 = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhox()   ! halo + land + nbghostcells 
    104219         ! 
    105220         IF( .NOT.ln_dynspg_ts ) THEN  ! Store transport 
    106221            DO ji = mi0(ibdy1), mi1(ibdy2) 
    107                uu_b(ji,:,Krhs_a) = 0._wp 
    108                DO jk = 1, jpkm1 
    109                   DO jj = 1, jpj 
    110                      uu_b(ji,jj,Krhs_a) = uu_b(ji,jj,Krhs_a) + e3u(ji,jj,jk,Krhs_a) * uu(ji,jj,jk,Krhs_a) * umask(ji,jj,jk) 
    111                   END DO 
    112                END DO 
    113222               DO jj = 1, jpj 
    114                   uu_b(ji,jj,Krhs_a) = uu_b(ji,jj,Krhs_a) * r1_hu(ji,jj,Krhs_a) 
     223                  uu_b(ji,jj,Krhs_a) = ubdy(ji,jj) * r1_hu(ji,jj,Krhs_a) 
     224                  vv_b(ji,jj,Krhs_a) = vbdy(ji,jj) * r1_hv(ji,jj,Krhs_a) 
    115225               END DO 
    116226            END DO 
     
    118228         ! 
    119229         DO ji = mi0(ibdy1), mi1(ibdy2) 
    120             zub(ji,:) = 0._wp    ! Correct transport 
     230            zub(ji,:) = 0._wp   
    121231            DO jk = 1, jpkm1 
    122232               DO jj = 1, jpj 
     
    134244         END DO 
    135245         !    
    136          IF( ln_dynspg_ts ) THEN       ! Set tangential velocities to time splitting estimate 
    137             DO ji = mi0(ibdy1), mi1(ibdy2) 
    138                zvb(ji,:) = 0._wp 
    139                DO jk = 1, jpkm1 
    140                   DO jj = 1, jpj 
    141                      zvb(ji,jj) = zvb(ji,jj) + e3v(ji,jj,jk,Krhs_a) * vv(ji,jj,jk,Krhs_a) * vmask(ji,jj,jk) 
    142                   END DO 
    143                END DO 
     246         DO ji = mi0(ibdy1), mi1(ibdy2) 
     247            zvb(ji,:) = 0._wp 
     248            DO jk = 1, jpkm1 
    144249               DO jj = 1, jpj 
    145                   zvb(ji,jj) = zvb(ji,jj) * r1_hv(ji,jj,Krhs_a) 
    146                END DO 
    147                DO jk = 1, jpkm1 
    148                   DO jj = 1, jpj 
    149                      vv(ji,jj,jk,Krhs_a) = ( vv(ji,jj,jk,Krhs_a) + vv_b(ji,jj,Krhs_a) - zvb(ji,jj) )*vmask(ji,jj,jk) 
    150                   END DO 
    151                END DO 
    152             END DO 
    153          ENDIF 
     250                  zvb(ji,jj) = zvb(ji,jj) + e3v(ji,jj,jk,Krhs_a) * vv(ji,jj,jk,Krhs_a) * vmask(ji,jj,jk) 
     251               END DO 
     252            END DO 
     253            DO jj = 1, jpj 
     254               zvb(ji,jj) = zvb(ji,jj) * r1_hv(ji,jj,Krhs_a) 
     255            END DO 
     256            DO jk = 1, jpkm1 
     257               DO jj = 1, jpj 
     258                  vv(ji,jj,jk,Krhs_a) = ( vv(ji,jj,jk,Krhs_a) + vv_b(ji,jj,Krhs_a) - zvb(ji,jj) )*vmask(ji,jj,jk) 
     259               END DO 
     260            END DO 
     261         END DO 
    154262         ! 
    155263      ENDIF 
     
    157265      ! --- East --- ! 
    158266      IF( lk_east) THEN 
    159          ibdy1 = jpiglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
    160          ibdy2 = jpiglo - ( nn_hls + 2 )                 ! halo + land + 1 
    161          ! 
    162          IF( .NOT.ln_dynspg_ts ) THEN  ! Store transport 
     267         ibdy1 = jpiglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhox()     
     268         ibdy2 = jpiglo - ( nn_hls + 2 )                  
     269         ! 
     270         IF( .NOT.ln_dynspg_ts ) THEN  
    163271            DO ji = mi0(ibdy1), mi1(ibdy2) 
    164                uu_b(ji,:,Krhs_a) = 0._wp 
    165                DO jk = 1, jpkm1 
    166                   DO jj = 1, jpj 
    167                      uu_b(ji,jj,Krhs_a) = uu_b(ji,jj,Krhs_a) + e3u(ji,jj,jk,Krhs_a) * uu(ji,jj,jk,Krhs_a) * umask(ji,jj,jk) 
    168                   END DO 
    169                END DO 
    170272               DO jj = 1, jpj 
    171                   uu_b(ji,jj,Krhs_a) = uu_b(ji,jj,Krhs_a) * r1_hu(ji,jj,Krhs_a) 
     273                  uu_b(ji,jj,Krhs_a) = ubdy(ji,jj) * r1_hu(ji,jj,Krhs_a) 
    172274               END DO 
    173275            END DO 
     
    175277         ! 
    176278         DO ji = mi0(ibdy1), mi1(ibdy2) 
    177             zub(ji,:) = 0._wp    ! Correct transport 
     279            zub(ji,:) = 0._wp    
    178280            DO jk = 1, jpkm1 
    179281               DO jj = 1, jpj 
     
    191293         END DO 
    192294         ! 
    193          IF( ln_dynspg_ts ) THEN       ! Set tangential velocities to time splitting estimate 
    194             ibdy1 = jpiglo - ( nn_hls + nbghostcells )   ! halo + land + nbghostcells - 1 
    195             ibdy2 = jpiglo - ( nn_hls + 1 )              ! halo + land + 1            - 1 
     295         ibdy1 = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()  
     296         ibdy2 = jpiglo - ( nn_hls + 1 )      
     297         ! 
     298         IF( .NOT.ln_dynspg_ts ) THEN  
    196299            DO ji = mi0(ibdy1), mi1(ibdy2) 
    197                zvb(ji,:) = 0._wp 
    198                DO jk = 1, jpkm1 
    199                   DO jj = 1, jpj 
     300               DO jj = 1, jpj 
     301                  vv_b(ji,jj,Krhs_a) = vbdy(ji,jj) * r1_hv(ji,jj,Krhs_a) 
     302               END DO 
     303            END DO 
     304         ENDIF 
     305         ! 
     306         DO ji = mi0(ibdy1), mi1(ibdy2) 
     307            zvb(ji,:) = 0._wp 
     308            DO jk = 1, jpkm1 
     309               DO jj = 1, jpj 
    200310                     zvb(ji,jj) = zvb(ji,jj) + e3v(ji,jj,jk,Krhs_a) * vv(ji,jj,jk,Krhs_a) * vmask(ji,jj,jk) 
    201                   END DO 
    202                END DO 
     311               END DO 
     312            END DO 
     313            DO jj = 1, jpj 
     314               zvb(ji,jj) = zvb(ji,jj) * r1_hv(ji,jj,Krhs_a) 
     315            END DO 
     316            DO jk = 1, jpkm1 
    203317               DO jj = 1, jpj 
    204                   zvb(ji,jj) = zvb(ji,jj) * r1_hv(ji,jj,Krhs_a) 
    205                END DO 
    206                DO jk = 1, jpkm1 
    207                   DO jj = 1, jpj 
    208318                     vv(ji,jj,jk,Krhs_a) = ( vv(ji,jj,jk,Krhs_a) + vv_b(ji,jj,Krhs_a) - zvb(ji,jj) ) * vmask(ji,jj,jk) 
    209                   END DO 
    210                END DO 
    211             END DO 
    212          ENDIF 
     319               END DO 
     320            END DO 
     321         END DO 
    213322         ! 
    214323      ENDIF 
     
    216325      ! --- South --- ! 
    217326      IF( lk_south ) THEN 
    218          jbdy1 = nn_hls + 2                  ! halo + land + 1 
    219          jbdy2 = nn_hls + 1 + nbghostcells   ! halo + land + nbghostcells 
    220          ! 
    221          IF( .NOT.ln_dynspg_ts ) THEN  ! Store transport 
     327         jbdy1 = nn_hls + 2                  
     328         jbdy2 = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhoy()    
     329         ! 
     330         IF( .NOT.ln_dynspg_ts ) THEN 
    222331            DO jj = mj0(jbdy1), mj1(jbdy2) 
    223                vv_b(:,jj,Krhs_a) = 0._wp 
    224                DO jk = 1, jpkm1 
    225                   DO ji = 1, jpi 
    226                      vv_b(ji,jj,Krhs_a) = vv_b(ji,jj,Krhs_a) + e3v(ji,jj,jk,Krhs_a) * vv(ji,jj,jk,Krhs_a) * vmask(ji,jj,jk) 
    227                   END DO 
    228                END DO 
    229                DO ji=1,jpi 
    230                   vv_b(ji,jj,Krhs_a) = vv_b(ji,jj,Krhs_a) * r1_hv(ji,jj,Krhs_a)      
     332               DO ji = 1, jpi 
     333                  uu_b(ji,jj,Krhs_a) = ubdy(ji,jj) * r1_hu(ji,jj,Krhs_a) 
     334                  vv_b(ji,jj,Krhs_a) = vbdy(ji,jj) * r1_hv(ji,jj,Krhs_a) 
    231335               END DO 
    232336            END DO 
     
    234338         ! 
    235339         DO jj = mj0(jbdy1), mj1(jbdy2) 
    236             zvb(:,jj) = 0._wp    ! Correct transport 
     340            zvb(:,jj) = 0._wp 
    237341            DO jk=1,jpkm1 
    238342               DO ji=1,jpi 
     
    250354         END DO 
    251355         ! 
    252          IF( ln_dynspg_ts ) THEN       ! Set tangential velocities to time splitting estimate 
    253             DO jj = mj0(jbdy1), mj1(jbdy2) 
    254                zub(:,jj) = 0._wp 
    255                DO jk = 1, jpkm1 
    256                   DO ji = 1, jpi 
    257                      zub(ji,jj) = zub(ji,jj) + e3u(ji,jj,jk,Krhs_a) * uu(ji,jj,jk,Krhs_a) * umask(ji,jj,jk) 
    258                   END DO 
    259                END DO 
     356         DO jj = mj0(jbdy1), mj1(jbdy2) 
     357            zub(:,jj) = 0._wp 
     358            DO jk = 1, jpkm1 
    260359               DO ji = 1, jpi 
    261                   zub(ji,jj) = zub(ji,jj) * r1_hu(ji,jj,Krhs_a) 
    262                END DO 
    263                DO jk = 1, jpkm1 
    264                   DO ji = 1, jpi 
    265                      uu(ji,jj,jk,Krhs_a) = ( uu(ji,jj,jk,Krhs_a) + uu_b(ji,jj,Krhs_a) - zub(ji,jj) ) * umask(ji,jj,jk) 
    266                   END DO 
    267                END DO 
    268             END DO 
    269          ENDIF 
     360                  zub(ji,jj) = zub(ji,jj) + e3u(ji,jj,jk,Krhs_a) * uu(ji,jj,jk,Krhs_a) * umask(ji,jj,jk) 
     361               END DO 
     362            END DO 
     363            DO ji = 1, jpi 
     364               zub(ji,jj) = zub(ji,jj) * r1_hu(ji,jj,Krhs_a) 
     365            END DO 
     366            DO jk = 1, jpkm1 
     367               DO ji = 1, jpi 
     368                  uu(ji,jj,jk,Krhs_a) = ( uu(ji,jj,jk,Krhs_a) + uu_b(ji,jj,Krhs_a) - zub(ji,jj) ) * umask(ji,jj,jk) 
     369               END DO 
     370            END DO 
     371         END DO 
    270372         ! 
    271373      ENDIF 
     
    273375      ! --- North --- ! 
    274376      IF( lk_north ) THEN 
    275          jbdy1 = jpjglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
    276          jbdy2 = jpjglo - ( nn_hls + 2 )                 ! halo + land + 1 
    277          ! 
    278          IF( .NOT.ln_dynspg_ts ) THEN  ! Store transport 
     377         jbdy1 = jpjglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhoy()  
     378         jbdy2 = jpjglo - ( nn_hls + 2 ) 
     379         ! 
     380         IF( .NOT.ln_dynspg_ts ) THEN 
    279381            DO jj = mj0(jbdy1), mj1(jbdy2) 
    280                vv_b(:,jj,Krhs_a) = 0._wp 
    281                DO jk = 1, jpkm1 
    282                   DO ji = 1, jpi 
    283                      vv_b(ji,jj,Krhs_a) = vv_b(ji,jj,Krhs_a) + e3v(ji,jj,jk,Krhs_a) * vv(ji,jj,jk,Krhs_a) * vmask(ji,jj,jk) 
    284                   END DO 
    285                END DO 
    286                DO ji=1,jpi 
    287                   vv_b(ji,jj,Krhs_a) = vv_b(ji,jj,Krhs_a) * r1_hv(ji,jj,Krhs_a) 
     382               DO ji = 1, jpi 
     383                  vv_b(ji,jj,Krhs_a) = vbdy(ji,jj) * r1_hv(ji,jj,Krhs_a) 
    288384               END DO 
    289385            END DO 
     
    291387         ! 
    292388         DO jj = mj0(jbdy1), mj1(jbdy2) 
    293             zvb(:,jj) = 0._wp    ! Correct transport 
     389            zvb(:,jj) = 0._wp  
    294390            DO jk=1,jpkm1 
    295391               DO ji=1,jpi 
     
    307403         END DO 
    308404         ! 
    309          IF( ln_dynspg_ts ) THEN       ! Set tangential velocities to time splitting estimate 
    310             jbdy1 = jpjglo - ( nn_hls + nbghostcells )   ! halo + land + nbghostcells - 1 
    311             jbdy2 = jpjglo - ( nn_hls + 1 )              ! halo + land + 1            - 1 
     405         jbdy1 = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()   
     406         jbdy2 = jpjglo - ( nn_hls + 1 ) 
     407         ! 
     408         IF( .NOT.ln_dynspg_ts ) THEN 
    312409            DO jj = mj0(jbdy1), mj1(jbdy2) 
    313                zub(:,jj) = 0._wp 
    314                DO jk = 1, jpkm1 
    315                   DO ji = 1, jpi 
    316                      zub(ji,jj) = zub(ji,jj) + e3u(ji,jj,jk,Krhs_a) * uu(ji,jj,jk,Krhs_a) * umask(ji,jj,jk) 
    317                   END DO 
    318                END DO 
    319410               DO ji = 1, jpi 
    320                   zub(ji,jj) = zub(ji,jj) * r1_hu(ji,jj,Krhs_a) 
    321                END DO 
    322                DO jk = 1, jpkm1 
    323                   DO ji = 1, jpi 
     411                  uu_b(ji,jj,Krhs_a) = ubdy(ji,jj) * r1_hu(ji,jj,Krhs_a) 
     412               END DO 
     413            END DO 
     414         ENDIF 
     415         ! 
     416         DO jj = mj0(jbdy1), mj1(jbdy2) 
     417            zub(:,jj) = 0._wp 
     418            DO jk = 1, jpkm1 
     419               DO ji = 1, jpi 
     420                  zub(ji,jj) = zub(ji,jj) + e3u(ji,jj,jk,Krhs_a) * uu(ji,jj,jk,Krhs_a) * umask(ji,jj,jk) 
     421               END DO 
     422            END DO 
     423            DO ji = 1, jpi 
     424               zub(ji,jj) = zub(ji,jj) * r1_hu(ji,jj,Krhs_a) 
     425            END DO 
     426            DO jk = 1, jpkm1 
     427               DO ji = 1, jpi 
    324428                     uu(ji,jj,jk,Krhs_a) = ( uu(ji,jj,jk,Krhs_a) + uu_b(ji,jj,Krhs_a) - zub(ji,jj) ) * umask(ji,jj,jk) 
    325                   END DO 
    326                END DO 
    327             END DO 
    328          ENDIF 
     429               END DO 
     430            END DO 
     431         END DO 
    329432         ! 
    330433      ENDIF 
     
    348451      IF( lk_west ) THEN 
    349452         istart = nn_hls + 2                              ! halo + land + 1 
    350          iend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     453         iend   = nn_hls + 1 + nbghostcells  + nn_shift_bar*Agrif_Rhox()              ! halo + land + nbghostcells 
    351454         DO ji = mi0(istart), mi1(iend) 
    352455            DO jj=1,jpj 
     
    359462      !--- East ---! 
    360463      IF( lk_east ) THEN 
    361          istart = jpiglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    362          iend   = jpiglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
     464         istart = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()  
     465         iend   = jpiglo - ( nn_hls + 1 )                 
    363466         DO ji = mi0(istart), mi1(iend) 
    364467 
     
    367470            END DO 
    368471         END DO 
    369          istart = jpiglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
    370          iend   = jpiglo - ( nn_hls + 2 )                 ! halo + land + 1 
     472         istart = jpiglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhox()  
     473         iend   = jpiglo - ( nn_hls + 2 )                 
    371474         DO ji = mi0(istart), mi1(iend) 
    372475            DO jj=1,jpj 
     
    378481      !--- South ---! 
    379482      IF( lk_south ) THEN 
    380          jstart = nn_hls + 2                              ! halo + land + 1 
    381          jend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     483         jstart = nn_hls + 2                               
     484         jend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhoy()            
    382485         DO jj = mj0(jstart), mj1(jend) 
    383486 
     
    391494      !--- North ---! 
    392495      IF( lk_north ) THEN 
    393          jstart = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    394          jend   = jpjglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
     496         jstart = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()      
     497         jend   = jpjglo - ( nn_hls + 1 )                 
    395498         DO jj = mj0(jstart), mj1(jend) 
    396499            DO ji=1,jpi 
     
    398501            END DO 
    399502         END DO 
    400          jstart = jpjglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
    401          jend   = jpjglo - ( nn_hls + 2 )                 ! halo + land + 1 
     503         jstart = jpjglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhoy()  
     504         jend   = jpjglo - ( nn_hls + 2 )                 
    402505         DO jj = mj0(jstart), mj1(jend) 
    403506            DO ji=1,jpi 
     
    425528      !--- West ---! 
    426529      IF( lk_west ) THEN 
    427          istart = nn_hls + 2                              ! halo + land + 1 
    428          iend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     530         istart = nn_hls + 2                               
     531         iend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhox()  
    429532         DO ji = mi0(istart), mi1(iend) 
    430533            DO jj=1,jpj 
     
    437540      !--- East ---! 
    438541      IF( lk_east ) THEN 
    439          istart = jpiglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    440          iend   = jpiglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
     542         istart = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox() 
     543         iend   = jpiglo - ( nn_hls + 1 )                  
    441544         DO ji = mi0(istart), mi1(iend) 
    442545            DO jj=1,jpj 
     
    444547            END DO 
    445548         END DO 
    446          istart = jpiglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
    447          iend   = jpiglo - ( nn_hls + 2 )                 ! halo + land + 1 
     549         istart = jpiglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhox()  
     550         iend   = jpiglo - ( nn_hls + 2 )                  
    448551         DO ji = mi0(istart), mi1(iend) 
    449552            DO jj=1,jpj 
     
    455558      !--- South ---! 
    456559      IF( lk_south ) THEN 
    457          jstart = nn_hls + 2                              ! halo + land + 1 
    458          jend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     560         jstart = nn_hls + 2                               
     561         jend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhoy()  
    459562         DO jj = mj0(jstart), mj1(jend) 
    460563            DO ji=1,jpi 
     
    467570      !--- North ---! 
    468571      IF( lk_north ) THEN 
    469          jstart = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    470          jend   = jpjglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
     572         jstart = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()  
     573         jend   = jpjglo - ( nn_hls + 1 )                 
    471574         DO jj = mj0(jstart), mj1(jend) 
    472575            DO ji=1,jpi 
     
    474577            END DO 
    475578         END DO 
    476          jstart = jpjglo - ( nn_hls + nbghostcells + 1)   ! halo + land + nbghostcells 
    477          jend   = jpjglo - ( nn_hls + 2 )                 ! halo + land + 1 
     579         jstart = jpjglo - ( nn_hls + nbghostcells + 1) - nn_shift_bar*Agrif_Rhoy()  
     580         jend   = jpjglo - ( nn_hls + 2 )                
    478581         DO jj = mj0(jstart), mj1(jend) 
    479582            DO ji=1,jpi 
     
    492595      INTEGER, INTENT(in) ::   kt 
    493596      !! 
    494       INTEGER :: ji, jj 
    495597      LOGICAL :: ll_int_cons 
    496598      !!----------------------------------------------------------------------   
     
    516618      ! 
    517619      IF( ll_int_cons ) THEN  ! Conservative interpolation 
    518          ! order matters here !!!!!! 
    519          CALL Agrif_Bc_variable( ub2b_interp_id, calledweight=1._wp, procname=interpub2b ) ! Time integrated 
    520          CALL Agrif_Bc_variable( vb2b_interp_id, calledweight=1._wp, procname=interpvb2b )  
    521          ! 
    522          bdy_tinterp = 1 
    523          CALL Agrif_Bc_variable( unb_id        , calledweight=1._wp, procname=interpunb  ) ! After 
    524          CALL Agrif_Bc_variable( vnb_id        , calledweight=1._wp, procname=interpvnb  )   
    525          ! 
    526          bdy_tinterp = 2 
    527          CALL Agrif_Bc_variable( unb_id        , calledweight=0._wp, procname=interpunb  ) ! Before 
    528          CALL Agrif_Bc_variable( vnb_id        , calledweight=0._wp, procname=interpvnb  )    
     620         IF ( lk_tint2d_notinterp ) THEN 
     621            Agrif_UseSpecialValue = .FALSE. 
     622            CALL Agrif_Bc_variable( ub2b_interp_id, calledweight=1._wp, procname=interpub2b_const ) 
     623            CALL Agrif_Bc_variable( vb2b_interp_id, calledweight=1._wp, procname=interpvb2b_const )  
     624            ! Divergence conserving correction terms: 
     625            IF ( Agrif_Rhox()>1 ) CALL Agrif_Bc_variable(    ub2b_cor_id, calledweight=1._wp, procname=ub2b_cor ) 
     626            IF ( Agrif_Rhoy()>1 ) CALL Agrif_Bc_variable(    vb2b_cor_id, calledweight=1._wp, procname=vb2b_cor ) 
     627         ELSE 
     628            ! order matters here !!!!!! 
     629            CALL Agrif_Bc_variable( ub2b_interp_id, calledweight=1._wp, procname=interpub2b ) ! Time integrated 
     630            CALL Agrif_Bc_variable( vb2b_interp_id, calledweight=1._wp, procname=interpvb2b )  
     631            ! 
     632            bdy_tinterp = 1 
     633            CALL Agrif_Bc_variable( unb_interp_id , calledweight=1._wp, procname=interpunb  ) ! After 
     634            CALL Agrif_Bc_variable( vnb_interp_id , calledweight=1._wp, procname=interpvnb  )   
     635            ! 
     636            bdy_tinterp = 2 
     637            CALL Agrif_Bc_variable( unb_interp_id , calledweight=0._wp, procname=interpunb  ) ! Before 
     638            CALL Agrif_Bc_variable( vnb_interp_id , calledweight=0._wp, procname=interpvnb  )    
     639         ENDIF 
    529640      ELSE ! Linear interpolation 
    530641         ! 
    531642         ubdy(:,:) = 0._wp   ;   vbdy(:,:) = 0._wp  
    532          CALL Agrif_Bc_variable( unb_id, procname=interpunb ) 
    533          CALL Agrif_Bc_variable( vnb_id, procname=interpvnb ) 
     643         CALL Agrif_Bc_variable( unb_interp_id, procname=interpunb ) 
     644         CALL Agrif_Bc_variable( vnb_interp_id, procname=interpvnb ) 
    534645      ENDIF 
    535646      Agrif_UseSpecialValue = .FALSE. 
     
    560671      ! --- West --- ! 
    561672      IF(lk_west) THEN 
    562          istart = nn_hls + 2                              ! halo + land + 1 
    563          iend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     673         istart = nn_hls + 2                                                          ! halo + land + 1 
     674         iend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhox()               ! halo + land + nbghostcells 
    564675         DO ji = mi0(istart), mi1(iend) 
    565676            DO jj = 1, jpj 
     
    571682      ! --- East --- ! 
    572683      IF(lk_east) THEN 
    573          istart = jpiglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    574          iend   = jpiglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
     684         istart = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()       ! halo + land + nbghostcells - 1 
     685         iend   = jpiglo - ( nn_hls + 1 )                                              ! halo + land + 1            - 1 
    575686         DO ji = mi0(istart), mi1(iend) 
    576687            DO jj = 1, jpj 
     
    582693      ! --- South --- ! 
    583694      IF(lk_south) THEN 
    584          jstart = nn_hls + 2                              ! halo + land + 1 
    585          jend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     695         jstart = nn_hls + 2                                                          ! halo + land + 1 
     696         jend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhoy()               ! halo + land + nbghostcells 
    586697         DO jj = mj0(jstart), mj1(jend) 
    587698            DO ji = 1, jpi 
     
    593704      ! --- North --- ! 
    594705      IF(lk_north) THEN 
    595          jstart = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    596          jend   = jpjglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
     706         jstart = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()     ! halo + land + nbghostcells - 1 
     707         jend   = jpjglo - ( nn_hls + 1 )                                            ! halo + land + 1            - 1 
    597708         DO jj = mj0(jstart), mj1(jend) 
    598709            DO ji = 1, jpi 
     
    619730      ! --- West --- ! 
    620731      IF(lk_west) THEN 
    621          istart = nn_hls + 2                              ! halo + land + 1 
    622          iend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     732         istart = nn_hls + 2                                                        ! halo + land + 1 
     733         iend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhox()             ! halo + land + nbghostcells 
    623734         DO ji = mi0(istart), mi1(iend) 
    624735            DO jj = 1, jpj 
     
    630741      ! --- East --- ! 
    631742      IF(lk_east) THEN 
    632          istart = jpiglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    633          iend   = jpiglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
     743         istart = jpiglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhox()    ! halo + land + nbghostcells - 1 
     744         iend   = jpiglo - ( nn_hls + 1 )                                           ! halo + land + 1            - 1 
    634745         DO ji = mi0(istart), mi1(iend) 
    635746            DO jj = 1, jpj 
     
    641752      ! --- South --- ! 
    642753      IF(lk_south) THEN 
    643          jstart = nn_hls + 2                              ! halo + land + 1 
    644          jend   = nn_hls + 1 + nbghostcells               ! halo + land + nbghostcells 
     754         jstart = nn_hls + 2                                                        ! halo + land + 1 
     755         jend   = nn_hls + 1 + nbghostcells + nn_shift_bar*Agrif_Rhoy()             ! halo + land + nbghostcells 
    645756         DO jj = mj0(jstart), mj1(jend) 
    646757            DO ji = 1, jpi 
     
    652763      ! --- North --- ! 
    653764      IF(lk_north) THEN 
    654          jstart = jpjglo - ( nn_hls + nbghostcells )      ! halo + land + nbghostcells - 1 
    655          jend   = jpjglo - ( nn_hls + 1 )                 ! halo + land + 1            - 1 
     765         jstart = jpjglo - ( nn_hls + nbghostcells ) - nn_shift_bar*Agrif_Rhoy()    ! halo + land + nbghostcells - 1 
     766         jend   = jpjglo - ( nn_hls + 1 )                                           ! halo + land + 1            - 1 
    656767         DO jj = mj0(jstart), mj1(jend) 
    657768            DO ji = 1, jpi 
     
    678789      Agrif_SpecialValue    = 0.e0 
    679790      Agrif_UseSpecialValue = .TRUE. 
     791      l_vremap              = ln_vert_remap 
    680792      ! 
    681793      CALL Agrif_Bc_variable( avm_id, calledweight=zalpha, procname=interpavm )        
    682794      ! 
    683795      Agrif_UseSpecialValue = .FALSE. 
     796      l_vremap              = .FALSE. 
    684797      ! 
    685798   END SUBROUTINE Agrif_avm 
     
    687800 
    688801   SUBROUTINE interptsn( ptab, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
    689       !!---------------------------------------------------------------------- 
    690       !!                  *** ROUTINE interptsn *** 
    691802      !!---------------------------------------------------------------------- 
    692803      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) ::   ptab 
     
    698809      INTEGER  :: item 
    699810      ! vertical interpolation: 
    700       REAL(wp) :: zhtot 
    701       REAL(wp), DIMENSION(k1:k2,1:jpts) :: tabin 
    702       REAL(wp), DIMENSION(k1:k2) :: h_in, z_in 
     811      REAL(wp) :: zhtot, zwgt 
     812      REAL(wp), DIMENSION(k1:k2,1:jpts) :: tabin, tabin_i 
     813      REAL(wp), DIMENSION(k1:k2) :: z_in, h_in_i, z_in_i 
    703814      REAL(wp), DIMENSION(1:jpk) :: h_out, z_out 
    704815      !!---------------------------------------------------------------------- 
     
    719830         END DO 
    720831 
    721          IF( l_vremap .OR. l_ini_child) THEN 
    722             ! Interpolate thicknesses 
     832         IF( l_vremap .OR. l_ini_child .OR. ln_zps ) THEN 
     833 
     834            ! Fill cell depths (i.e. gdept) to be interpolated 
    723835            ! Warning: these are masked, hence extrapolated prior interpolation. 
    724             DO jk=k1,k2 
    725                DO jj=j1,j2 
    726                   DO ji=i1,i2 
    727                       ptab(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm_a) 
    728  
     836            DO jj=j1,j2 
     837               DO ji=i1,i2 
     838                  ptab(ji,jj,k1,jpts+1) = 0.5_wp * tmask(ji,jj,k1) * e3t(ji,jj,k1,Kmm_a) 
     839                  DO jk=k1+1,k2 
     840                     ptab(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * & 
     841                        & ( ptab(ji,jj,jk-1,jpts+1) + 0.5_wp * (e3t(ji,jj,jk-1,Kmm_a)+e3t(ji,jj,jk,Kmm_a)) ) 
    729842                  END DO 
    730843               END DO 
    731844            END DO 
    732  
    733             ! Extrapolate thicknesses in partial bottom cells: 
    734             ! Set them to Agrif_SpecialValue (0.). Correct bottom thicknesses are retrieved later on 
    735             IF (ln_zps) THEN 
    736                DO jj=j1,j2 
    737                   DO ji=i1,i2 
    738                       jk = mbkt(ji,jj) 
    739                       ptab(ji,jj,jk,jpts+1) = 0._wp 
    740                   END DO 
    741                END DO            
    742             END IF 
    743          
     845          
    744846            ! Save ssh at last level: 
    745847            IF (.NOT.ln_linssh) THEN 
    746848               ptab(i1:i2,j1:j2,k2,jpts+1) = ssh(i1:i2,j1:j2,Kmm_a)*tmask(i1:i2,j1:j2,1)  
    747             ELSE 
    748                ptab(i1:i2,j1:j2,k2,jpts+1) = 0._wp 
    749849            END IF       
    750850         ENDIF 
     
    757857         IF( l_vremap .OR. l_ini_child ) THEN 
    758858            IF (ln_linssh) ptab(i1:i2,j1:j2,k2,n2) = 0._wp  
    759                 
    760859            DO jj=j1,j2 
    761860               DO ji=i1,i2 
    762                   ts(ji,jj,:,:,Krhs_a) = 0.                   
    763                !   IF( l_ini_child) ts(ji,jj,:,:,Krhs_a) = ptab(ji,jj,:,1:jpts) 
     861                  ts(ji,jj,:,:,Krhs_a) = 0.   
     862                  ! 
     863                  ! Build vertical grids: 
    764864                  N_in = mbkt_parent(ji,jj) 
    765                   zhtot = 0._wp 
    766                   DO jk=1,N_in !k2 = jpk of parent grid 
    767                      IF (jk==N_in) THEN 
    768                         h_in(jk) = ht0_parent(ji,jj) + ptab(ji,jj,k2,n2) - zhtot 
    769                      ELSE 
    770                         h_in(jk) = ptab(ji,jj,jk,n2) 
    771                      ENDIF 
    772                      zhtot = zhtot + h_in(jk) 
    773                      tabin(jk,:) = ptab(ji,jj,jk,n1:n2-1) 
    774                   END DO 
    775                   z_in(1) = 0.5_wp * h_in(1) - zhtot + ht0_parent(ji,jj) 
    776                   DO jk=2,N_in 
    777                      z_in(jk) = z_in(jk-1) + 0.5_wp * h_in(jk) 
    778                   END DO 
    779  
    780                   N_out = 0 
    781                   DO jk=1,jpk ! jpk of child grid 
    782                      IF (tmask(ji,jj,jk) == 0._wp) EXIT  
    783                      N_out = N_out + 1 
    784                      h_out(jk) = e3t(ji,jj,jk,Krhs_a) 
    785                   END DO 
    786  
    787                   z_out(1) = 0.5_wp * h_out(1) - SUM(h_out(1:N_out)) + ht_0(ji,jj) 
    788                   DO jk=2,N_out 
    789                      z_out(jk) = z_out(jk-1) + 0.5_wp * h_out(jk) 
    790                   END DO 
    791  
     865                  N_out = mbkt(ji,jj) 
    792866                  IF (N_in*N_out > 0) THEN 
     867                     ! Input grid (account for partial cells if any): 
     868                     DO jk=1,N_in 
     869                        z_in(jk) = ptab(ji,jj,jk,n2) - ptab(ji,jj,k2,n2) 
     870                        tabin(jk,1:jpts) = ptab(ji,jj,jk,1:jpts) 
     871                     END DO 
     872                   
     873                     ! Intermediate grid: 
     874                     IF ( l_vremap ) THEN 
     875                        DO jk = 1, N_in 
     876                           h_in_i(jk) = e3t0_parent(ji,jj,jk) * &  
     877                             &       (1._wp + ptab(ji,jj,k2,n2)/(ht0_parent(ji,jj)*ssmask(ji,jj) + 1._wp - ssmask(ji,jj))) 
     878                        END DO 
     879                        z_in_i(1) = 0.5_wp * h_in_i(1) 
     880                        DO jk=2,N_in 
     881                           z_in_i(jk) = z_in_i(jk-1) + 0.5_wp * ( h_in_i(jk) + h_in_i(jk-1) ) 
     882                        END DO 
     883                        z_in_i(1:N_in) = z_in_i(1:N_in)  - ptab(ji,jj,k2,n2) 
     884                     ENDIF                               
     885 
     886                     ! Output (Child) grid: 
     887                     DO jk=1,N_out 
     888                        h_out(jk) = e3t(ji,jj,jk,Krhs_a) 
     889                     END DO 
     890                     z_out(1) = 0.5_wp * h_out(1) 
     891                     DO jk=2,N_out 
     892                        z_out(jk) = z_out(jk-1) + 0.5_wp * ( h_out(jk)+h_out(jk-1) ) 
     893                     END DO 
     894                     IF (.NOT.ln_linssh) z_out(1:N_out) = z_out(1:N_out)  - ssh(ji,jj,Krhs_a) 
     895 
    793896                     IF( l_ini_child ) THEN 
    794                         CALL remap_linear(tabin(1:N_in,1:jpts),z_in(1:N_in),ts(ji,jj,1:N_out,1:jpts,Krhs_a),          & 
     897                        CALL remap_linear(tabin(1:N_in,1:jpts),z_in(1:N_in),ts(ji,jj,1:N_out,1:jpts,Krhs_a),              & 
    795898                                      &   z_out(1:N_out),N_in,N_out,jpts)   
    796899                     ELSE  
    797                         CALL reconstructandremap(tabin(1:N_in,1:jpts),h_in(1:N_in),ts(ji,jj,1:N_out,1:jpts,Krhs_a),   & 
     900                        CALL remap_linear(tabin(1:N_in,1:jpts),z_in(1:N_in),tabin_i(1:N_in,1:jpts),                       & 
     901                                     &   z_in_i(1:N_in),N_in,N_in,jpts) 
     902                        CALL reconstructandremap(tabin_i(1:N_in,1:jpts),h_in_i(1:N_in),ts(ji,jj,1:N_out,1:jpts,Krhs_a),   & 
    798903                                      &   h_out(1:N_out),N_in,N_out,jpts)   
    799904                     ENDIF 
     
    805910         ELSE 
    806911          
    807             DO jn=1, jpts 
    808                 ts(i1:i2,j1:j2,1:jpk,jn,Krhs_a)=ptab(i1:i2,j1:j2,1:jpk,jn)*tmask(i1:i2,j1:j2,1:jpk)  
     912            IF ( Agrif_Parent(ln_zps) ) THEN ! Account for partial cells  
     913                                             ! linear vertical interpolation 
     914               DO jj=j1,j2 
     915                  DO ji=i1,i2 
     916                     ! 
     917                     N_in  = mbkt(ji,jj) 
     918                     N_out = mbkt(ji,jj) 
     919                     z_in(1) = ptab(ji,jj,1,n2) 
     920                     tabin(1,1:jpts) = ptab(ji,jj,1,1:jpts) 
     921                     DO jk=2, N_in 
     922                        z_in(jk) = ptab(ji,jj,jk,n2) 
     923                        tabin(jk,1:jpts) = ptab(ji,jj,jk,1:jpts) 
     924                     END DO 
     925                     IF (.NOT.ln_linssh) z_in(1:N_in) = z_in(1:N_in) - ptab(ji,jj,k2,n2) 
     926                     z_out(1) = 0.5_wp * e3t(ji,jj,1,Krhs_a) 
     927                     DO jk=2, N_out 
     928                        z_out(jk) = z_out(jk-1) + 0.5_wp * (e3t(ji,jj,jk-1,Krhs_a) + e3t(ji,jj,jk,Krhs_a)) 
     929                     END DO 
     930                     IF (.NOT.ln_linssh) z_out(1:N_out) = z_out(1:N_out) - ssh(ji,jj,Krhs_a) 
     931                     CALL remap_linear(tabin(1:N_in,1:jpts),z_in(1:N_in),ptab(ji,jj,1:N_out,1:jpts), & 
     932                                   &   z_out(1:N_out),N_in,N_out,jpts)   
     933                  END DO 
     934               END DO 
     935            ENDIF 
     936 
     937            DO jn =1, jpts 
     938               ts(i1:i2,j1:j2,1:jpk,jn,Krhs_a) = ptab(i1:i2,j1:j2,1:jpk,jn)*tmask(i1:i2,j1:j2,1:jpk) 
    809939            END DO 
    810940         ENDIF 
     
    828958         ptab(i1:i2,j1:j2) = ssh(i1:i2,j1:j2,Kmm_a) 
    829959      ELSE 
    830          hbdy(i1:i2,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
     960         IF( l_ini_child ) THEN 
     961            ssh(i1:i2,j1:j2,Krhs_a) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
     962         ELSE 
     963            hbdy(i1:i2,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 
     964         ENDIF 
    831965      ENDIF 
    832966      ! 
     
    8691003         END DO 
    8701004 
    871         IF( l_vremap .OR. l_ini_child) THEN 
     1005        IF( l_vremap .OR. l_ini_child ) THEN 
    8721006         ! Extrapolate thicknesses in partial bottom cells: 
    8731007         ! Set them to Agrif_SpecialValue (0.). Correct bottom thicknesses are retrieved later on 
     
    9061040                  uu(ji,jj,:,Krhs_a) = 0._wp 
    9071041                  N_in = mbku_parent(ji,jj) 
    908                   zhtot = 0._wp 
    909                   DO jk=1,N_in 
    910                      IF (jk==N_in) THEN 
    911                         h_in(jk) = hu0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
    912                      ELSE 
    913                         h_in(jk) = ptab(ji,jj,jk,2)/(e2u(ji,jj)*zrhoy)  
    914                      ENDIF 
    915                      zhtot = zhtot + h_in(jk) 
    916                      IF( h_in(jk) .GT. 0. ) THEN 
    917                      tabin(jk) = ptab(ji,jj,jk,1)/(e2u(ji,jj)*zrhoy*h_in(jk)) 
    918                      ELSE 
    919                      tabin(jk) = 0. 
    920                      ENDIF 
    921                  END DO 
    922                  z_in(1) = 0.5_wp * h_in(1) - zhtot + hu0_parent(ji,jj)  
    923                  DO jk=2,N_in 
    924                     z_in(jk) = z_in(jk-1) + 0.5_wp * h_in(jk) 
    925                  END DO 
     1042                  N_out = mbku(ji,jj) 
     1043                  IF (N_in*N_out > 0) THEN 
     1044                     zhtot = 0._wp 
     1045                     DO jk=1,N_in 
     1046                        !IF (jk==N_in) THEN 
     1047                        !   h_in(jk) = hu0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
     1048                        !ELSE 
     1049                        !   h_in(jk) = ptab(ji,jj,jk,2)/(e2u(ji,jj)*zrhoy)  
     1050                        !ENDIF 
     1051                        IF ( l_vremap ) THEN 
     1052                           h_in(jk) = e3u0_parent(ji,jj,jk)  
     1053                        ELSE 
     1054                           IF (jk==N_in) THEN 
     1055                              h_in(jk) = hu0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
     1056                           ELSE 
     1057                              h_in(jk) = ptab(ji,jj,jk,2)/(e2u(ji,jj)*zrhoy)  
     1058                           ENDIF 
     1059                        ENDIF 
     1060                        zhtot = zhtot + h_in(jk) 
     1061                        IF( h_in(jk) .GT. 0. ) THEN 
     1062                           tabin(jk) = ptab(ji,jj,jk,1)/(e2u(ji,jj)*zrhoy*h_in(jk)) 
     1063                        ELSE 
     1064                           tabin(jk) = 0. 
     1065                        ENDIF 
     1066                    END DO 
     1067                    z_in(1) = 0.5_wp * h_in(1) - zhtot + hu0_parent(ji,jj)  
     1068                    DO jk=2,N_in 
     1069                       z_in(jk) = z_in(jk-1) + 0.5_wp * (h_in(jk)+h_in(jk-1)) 
     1070                    END DO 
    9261071                      
    927                  N_out = 0 
    928                  DO jk=1,jpk 
    929                     IF (umask(ji,jj,jk) == 0) EXIT 
    930                     N_out = N_out + 1 
    931                     h_out(N_out) = e3u(ji,jj,jk,Krhs_a) 
    932                  END DO 
    933  
    934                  z_out(1) = 0.5_wp * h_out(1) - SUM(h_out(1:N_out)) + hu_0(ji,jj) 
    935                  DO jk=2,N_out 
    936                     z_out(jk) = z_out(jk-1) + 0.5_wp * h_out(jk)  
    937                  END DO   
    938  
    939                  IF (N_in*N_out > 0) THEN 
    940                      IF( l_ini_child ) THEN 
    941                         CALL remap_linear       (tabin(1:N_in),z_in(1:N_in),uu(ji,jj,1:N_out,Krhs_a),z_out(1:N_out),N_in,N_out,1) 
    942                      ELSE 
    943                         CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),uu(ji,jj,1:N_out,Krhs_a),h_out(1:N_out),N_in,N_out,1) 
    944                      ENDIF    
     1072                    DO jk=1, N_out 
     1073                       h_out(jk) = e3u(ji,jj,jk,Krhs_a) 
     1074                    END DO 
     1075 
     1076                    z_out(1) = 0.5_wp * h_out(1) - SUM(h_out(1:N_out)) + hu_0(ji,jj) 
     1077                    DO jk=2,N_out 
     1078                       z_out(jk) = z_out(jk-1) + 0.5_wp * (h_out(jk-1) + h_out(jk))  
     1079                    END DO   
     1080 
     1081                    IF( l_ini_child ) THEN 
     1082                       CALL remap_linear       (tabin(1:N_in),z_in(1:N_in),uu(ji,jj,1:N_out,Krhs_a),z_out(1:N_out),N_in,N_out,1) 
     1083                    ELSE 
     1084                       CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),uu(ji,jj,1:N_out,Krhs_a),h_out(1:N_out),N_in,N_out,1) 
     1085                    ENDIF    
    9451086                 ENDIF 
    9461087               END DO 
     
    10281169                  vv(ji,jj,:,Krhs_a) = 0._wp 
    10291170                  N_in = mbkv_parent(ji,jj) 
    1030                   zhtot = 0._wp 
    1031                   DO jk=1,N_in 
    1032                      IF (jk==N_in) THEN 
    1033                         h_in(jk) = hv0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
    1034                      ELSE 
    1035                         h_in(jk) = ptab(ji,jj,jk,2)/(e1v(ji,jj)*zrhox)  
    1036                      ENDIF 
    1037                      zhtot = zhtot + h_in(jk) 
    1038                      IF( h_in(jk) .GT. 0. ) THEN 
    1039                        tabin(jk) = ptab(ji,jj,jk,1)/(e1v(ji,jj)*zrhox*h_in(jk)) 
    1040                      ELSE 
    1041                        tabin(jk)  = 0. 
    1042                      ENDIF  
    1043                   END DO 
    1044  
    1045                   z_in(1) = 0.5_wp * h_in(1) - zhtot + hv0_parent(ji,jj) 
    1046                   DO jk=2,N_in 
    1047                      z_in(jk) = z_in(jk-1) + 0.5_wp * h_in(jk) 
    1048                   END DO 
    1049  
    1050                   N_out = 0 
    1051                   DO jk=1,jpk 
    1052                      IF (vmask(ji,jj,jk) == 0) EXIT 
    1053                      N_out = N_out + 1 
    1054                      h_out(N_out) = e3v(ji,jj,jk,Krhs_a) 
    1055                   END DO 
    1056  
    1057                   z_out(1) = 0.5_wp * h_out(1) - SUM(h_out(1:N_out)) + hv_0(ji,jj) 
    1058                   DO jk=2,N_out 
    1059                      z_out(jk) = z_out(jk-1) + 0.5_wp * h_out(jk) 
    1060                   END DO 
     1171                  N_out = mbkv(ji,jj) 
     1172 
     1173                  IF (N_in*N_out > 0) THEN 
     1174                     zhtot = 0._wp 
     1175                     DO jk=1,N_in 
     1176                        !IF (jk==N_in) THEN 
     1177                        !   h_in(jk) = hv0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
     1178                        !ELSE 
     1179                        !   h_in(jk) = ptab(ji,jj,jk,2)/(e1v(ji,jj)*zrhox)  
     1180                        !ENDIF 
     1181                        IF (l_vremap) THEN 
     1182                           h_in(jk) = e3v0_parent(ji,jj,jk) 
     1183                        ELSE 
     1184                           IF (jk==N_in) THEN 
     1185                              h_in(jk) = hv0_parent(ji,jj) + ptab(ji,jj,k2,2) - zhtot 
     1186                           ELSE 
     1187                              h_in(jk) = ptab(ji,jj,jk,2)/(e1v(ji,jj)*zrhox)  
     1188                           ENDIF 
     1189                        ENDIF 
     1190                        zhtot = zhtot + h_in(jk) 
     1191                        IF( h_in(jk) .GT. 0. ) THEN 
     1192                          tabin(jk) = ptab(ji,jj,jk,1)/(e1v(ji,jj)*zrhox*h_in(jk)) 
     1193                        ELSE 
     1194                          tabin(jk)  = 0. 
     1195                        ENDIF  
     1196                     END DO 
     1197 
     1198                     z_in(1) = 0.5_wp * h_in(1) - zhtot + hv0_parent(ji,jj) 
     1199                     DO jk=2,N_in 
     1200                        z_in(jk) = z_in(jk-1) + 0.5_wp * (h_in(jk-1)+h_in(jk)) 
     1201                     END DO 
     1202 
     1203                     DO jk=1,N_out 
     1204                        h_out(jk) = e3v(ji,jj,jk,Krhs_a) 
     1205                     END DO 
     1206 
     1207                     z_out(1) = 0.5_wp * h_out(1) - SUM(h_out(1:N_out)) + hv_0(ji,jj) 
     1208                     DO jk=2,N_out 
     1209                        z_out(jk) = z_out(jk-1) + 0.5_wp * (h_out(jk-1)+h_out(jk)) 
     1210                     END DO 
    10611211  
    1062                   IF (N_in*N_out > 0) THEN 
    10631212                     IF( l_ini_child ) THEN 
    10641213                        CALL remap_linear       (tabin(1:N_in),z_in(1:N_in),vv(ji,jj,1:N_out,Krhs_a),z_out(1:N_out),N_in,N_out,1) 
     
    11921341      !!----------------------------------------------------------------------   
    11931342      IF( before ) THEN 
    1194          IF ( ln_bt_fw ) THEN 
     1343!         IF ( ln_bt_fw ) THEN 
    11951344            ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * ub2_b(i1:i2,j1:j2) 
    1196          ELSE 
    1197             ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * un_adv(i1:i2,j1:j2) 
    1198          ENDIF 
     1345!         ELSE 
     1346!            ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * un_adv(i1:i2,j1:j2) 
     1347!         ENDIF 
    11991348      ELSE 
    12001349         zrhot = Agrif_rhot() 
     
    12141363   END SUBROUTINE interpub2b 
    12151364    
    1216  
    1217    SUBROUTINE interpvb2b( ptab, i1, i2, j1, j2, before ) 
    1218       !!---------------------------------------------------------------------- 
    1219       !!                  ***  ROUTINE interpvb2b  *** 
     1365   SUBROUTINE interpub2b_const( ptab, i1, i2, j1, j2, before ) 
     1366      !!---------------------------------------------------------------------- 
     1367      !!                  ***  ROUTINE interpub2b_const  *** 
    12201368      !!----------------------------------------------------------------------   
    12211369      INTEGER                         , INTENT(in   ) ::   i1, i2, j1, j2 
     
    12231371      LOGICAL                         , INTENT(in   ) ::   before 
    12241372      ! 
     1373      REAL(wp) :: zrhoy 
     1374      !!----------------------------------------------------------------------   
     1375      IF( before ) THEN 
     1376!         IF ( ln_bt_fw ) THEN 
     1377            ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * ub2_b(i1:i2,j1:j2) 
     1378!         ELSE 
     1379!            ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * un_adv(i1:i2,j1:j2) 
     1380!         ENDIF 
     1381      ELSE 
     1382         zrhoy = Agrif_Rhoy() 
     1383         ! 
     1384         ubdy(i1:i2,j1:j2) = ptab(i1:i2,j1:j2) &  
     1385                           & / (zrhoy*e2u(i1:i2,j1:j2)) * umask(i1:i2,j1:j2,1) 
     1386         ! 
     1387      ENDIF 
     1388      !  
     1389   END SUBROUTINE interpub2b_const 
     1390 
     1391 
     1392   SUBROUTINE ub2b_cor( ptab, i1, i2, j1, j2, before ) 
     1393      !!---------------------------------------------------------------------- 
     1394      !!                  ***  ROUTINE ub2b_cor  *** 
     1395      !!----------------------------------------------------------------------   
     1396      INTEGER                         , INTENT(in   ) ::   i1, i2, j1, j2 
     1397      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   ptab 
     1398      LOGICAL                         , INTENT(in   ) ::   before 
     1399      ! 
     1400      INTEGER  :: ji, jj 
     1401      REAL(wp) :: zrhox, zrhoy, zx 
     1402      !!----------------------------------------------------------------------   
     1403      IF( before ) THEN 
     1404         ptab(:,:) = 0._wp 
     1405         DO ji=i1+1,i2-1 
     1406            DO jj=j1+1,j2-1 
     1407               ptab(ji,jj) = 0.25_wp*( ( vb2_b(ji+1,jj  )*e1v(ji+1,jj  )   &  
     1408                           &            -vb2_b(ji-1,jj  )*e1v(ji-1,jj  ) ) & 
     1409                           &          -( vb2_b(ji+1,jj-1)*e1v(ji+1,jj-1)   & 
     1410                           &            -vb2_b(ji-1,jj-1)*e1v(ji-1,jj-1) ) ) 
     1411            END DO 
     1412         END DO  
     1413      ELSE 
     1414         ! 
     1415         zrhox = Agrif_Rhox()  
     1416         zrhoy = Agrif_Rhoy() 
     1417         DO ji=i1,i2 
     1418            DO jj=j1,j2 
     1419               IF (utint_stage(ji,jj)==0) THEN  
     1420                  zx = 2._wp*MOD(ABS(mig0(ji)-nbghostcells-1), INT(Agrif_Rhox()))/zrhox - 1._wp   
     1421                  ubdy(ji,jj) = ubdy(ji,jj) + 0.25_wp*(1._wp-zx*zx) * ptab(ji,jj) &  
     1422                              &         / zrhoy *r1_e2u(ji,jj) * umask(ji,jj,1)  
     1423                  utint_stage(ji,jj) = 1  
     1424               ENDIF 
     1425            END DO 
     1426         END DO  
     1427         ! 
     1428      ENDIF 
     1429      !  
     1430   END SUBROUTINE ub2b_cor 
     1431 
     1432 
     1433   SUBROUTINE interpvb2b( ptab, i1, i2, j1, j2, before ) 
     1434      !!---------------------------------------------------------------------- 
     1435      !!                  ***  ROUTINE interpvb2b  *** 
     1436      !!----------------------------------------------------------------------   
     1437      INTEGER                         , INTENT(in   ) ::   i1, i2, j1, j2 
     1438      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   ptab 
     1439      LOGICAL                         , INTENT(in   ) ::   before 
     1440      ! 
    12251441      INTEGER ::   ji,jj 
    12261442      REAL(wp) ::   zrhot, zt0, zt1, zat 
     
    12281444      ! 
    12291445      IF( before ) THEN 
    1230          IF ( ln_bt_fw ) THEN 
     1446!         IF ( ln_bt_fw ) THEN 
    12311447            ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vb2_b(i1:i2,j1:j2) 
    1232          ELSE 
    1233             ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vn_adv(i1:i2,j1:j2) 
    1234          ENDIF 
     1448!         ELSE 
     1449!            ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vn_adv(i1:i2,j1:j2) 
     1450!         ENDIF 
    12351451      ELSE       
    12361452         zrhot = Agrif_rhot() 
     
    12511467 
    12521468 
     1469   SUBROUTINE interpvb2b_const( ptab, i1, i2, j1, j2, before ) 
     1470      !!---------------------------------------------------------------------- 
     1471      !!                  ***  ROUTINE interpub2b_const  *** 
     1472      !!----------------------------------------------------------------------   
     1473      INTEGER                         , INTENT(in   ) ::   i1, i2, j1, j2 
     1474      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   ptab 
     1475      LOGICAL                         , INTENT(in   ) ::   before 
     1476      ! 
     1477      REAL(wp) :: zrhox 
     1478      !!----------------------------------------------------------------------   
     1479      IF( before ) THEN 
     1480!         IF ( ln_bt_fw ) THEN 
     1481            ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vb2_b(i1:i2,j1:j2) 
     1482!         ELSE 
     1483!            ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vn_adv(i1:i2,j1:j2) 
     1484!         ENDIF 
     1485      ELSE 
     1486         zrhox = Agrif_Rhox() 
     1487         ! 
     1488         vbdy(i1:i2,j1:j2) = ptab(i1:i2,j1:j2) & 
     1489                           & / (zrhox*e1v(i1:i2,j1:j2)) * vmask(i1:i2,j1:j2,1) 
     1490         ! 
     1491      ENDIF 
     1492      !  
     1493   END SUBROUTINE interpvb2b_const 
     1494 
     1495  
     1496   SUBROUTINE vb2b_cor( ptab, i1, i2, j1, j2, before ) 
     1497      !!---------------------------------------------------------------------- 
     1498      !!                  ***  ROUTINE vb2b_cor  *** 
     1499      !!----------------------------------------------------------------------   
     1500      INTEGER                         , INTENT(in   ) ::   i1, i2, j1, j2 
     1501      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   ptab 
     1502      LOGICAL                         , INTENT(in   ) ::   before 
     1503      ! 
     1504      INTEGER  :: ji, jj 
     1505      REAL(wp) :: zrhox, zrhoy, zy 
     1506      !!----------------------------------------------------------------------   
     1507      IF( before ) THEN 
     1508         ptab(:,:) = 0._wp 
     1509         DO ji=i1+1,i2-1 
     1510            DO jj=j1+1,j2-1 
     1511               ptab(ji,jj) = 0.25_wp*( ( ub2_b(ji  ,jj+1)*e2u(ji  ,jj+1)   &  
     1512                           &            -ub2_b(ji  ,jj-1)*e2u(ji  ,jj-1) ) & 
     1513                           &          -( ub2_b(ji-1,jj+1)*e2u(ji-1,jj+1)   & 
     1514                           &            -ub2_b(ji-1,jj-1)*e2u(ji-1,jj-1) ) ) 
     1515            END DO 
     1516         END DO  
     1517      ELSE 
     1518         ! 
     1519         zrhox = Agrif_Rhox()  
     1520         zrhoy = Agrif_Rhoy() 
     1521         DO ji=i1,i2 
     1522            DO jj=j1,j2 
     1523               IF (vtint_stage(ji,jj)==0) THEN  
     1524                  zy = 2._wp*MOD(ABS(mjg0(jj)-nbghostcells-1), INT(Agrif_Rhoy()))/zrhoy - 1._wp   
     1525                  vbdy(ji,jj) = vbdy(ji,jj) + 0.25_wp*(1._wp-zy*zy) * ptab(ji,jj) &  
     1526                              &         / zrhox * r1_e1v(ji,jj) * vmask(ji,jj,1)  
     1527                  vtint_stage(ji,jj) = 1  
     1528               ENDIF 
     1529            END DO 
     1530         END DO  
     1531         ! 
     1532      ENDIF 
     1533      !  
     1534   END SUBROUTINE vb2b_cor 
     1535 
     1536 
    12531537   SUBROUTINE interpe3t( ptab, i1, i2, j1, j2, k1, k2, before ) 
    12541538      !!---------------------------------------------------------------------- 
     
    12721556                     WRITE(numout,*) ' Agrif error for e3t_0: parent , child, i, j, k ',  &  
    12731557                     &                 ptab(ji,jj,jk), tmask(ji,jj,jk) * e3t_0(ji,jj,jk), & 
    1274                      &                 mig0(ji), mig0(jj), jk 
    1275                 !     kindic_agr = kindic_agr + 1 
     1558                     &                 mig0(ji), mjg0(jj), jk 
     1559                     kindic_agr = kindic_agr + 1 
    12761560                  ENDIF 
    12771561               END DO 
     
    12821566      !  
    12831567   END SUBROUTINE interpe3t 
     1568 
     1569 
     1570   SUBROUTINE interpe3t0_vremap( ptab, i1, i2, j1, j2, k1, k2, before ) 
     1571      !!---------------------------------------------------------------------- 
     1572      !!                  ***  ROUTINE interpe3t0_vremap  *** 
     1573      !!----------------------------------------------------------------------   
     1574      INTEGER                              , INTENT(in   ) :: i1, i2, j1, j2, k1, k2 
     1575      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab 
     1576      LOGICAL                              , INTENT(in   ) :: before 
     1577      ! 
     1578      INTEGER :: ji, jj, jk 
     1579      REAL(wp) :: zh 
     1580      !!----------------------------------------------------------------------   
     1581      !     
     1582      IF( before ) THEN 
     1583         IF ( ln_zps ) THEN 
     1584            DO jk = k1, k2 
     1585               DO jj = j1, j2 
     1586                  DO ji = i1, i2 
     1587                     ptab(ji, jj, jk) = e3t_1d(jk) 
     1588                  END DO 
     1589               END DO 
     1590            END DO 
     1591         ELSE 
     1592            ptab(i1:i2,j1:j2,k1:k2) = e3t_0(i1:i2,j1:j2,k1:k2) 
     1593         ENDIF 
     1594      ELSE 
     1595         ! 
     1596         DO jk = k1, k2 
     1597            DO jj = j1, j2 
     1598               DO ji = i1, i2 
     1599                  e3t0_parent(ji,jj,jk) = ptab(ji,jj,jk) 
     1600               END DO 
     1601            END DO 
     1602         END DO 
     1603 
     1604         ! Retrieve correct scale factor at the bottom: 
     1605         DO jj = j1, j2 
     1606            DO ji = i1, i2 
     1607               zh = 0._wp 
     1608               DO jk = 1, mbkt_parent(ji, jj)-1 
     1609                  zh = zh + e3t0_parent(ji,jj,jk) 
     1610               END DO 
     1611               e3t0_parent(ji,jj,mbkt_parent(ji,jj)) = ht0_parent(ji, jj) - zh 
     1612            END DO 
     1613         END DO 
     1614          
     1615      ENDIF 
     1616      !  
     1617   END SUBROUTINE interpe3t0_vremap 
     1618 
    12841619 
    12851620   SUBROUTINE interpglamt( ptab, i1, i2, j1, j2, before ) 
     
    13651700 
    13661701         IF( l_vremap ) THEN 
    1367             ! Interpolate thicknesses 
     1702            ! Interpolate interfaces  
    13681703            ! Warning: these are masked, hence extrapolated prior interpolation. 
    13691704            DO jk=k1,k2 
    13701705               DO jj=j1,j2 
    13711706                  DO ji=i1,i2 
    1372                       ptab(ji,jj,jk,2) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm_a) 
     1707                      ptab(ji,jj,jk,2) = tmask(ji,jj,jk) * gdepw(ji,jj,jk,Kmm_a) 
    13731708                  END DO 
    13741709               END DO 
    13751710            END DO 
    1376  
    1377             ! Extrapolate thicknesses in partial bottom cells: 
    1378             ! Set them to Agrif_SpecialValue (0.). Correct bottom thicknesses are retrieved later on 
    1379             IF (ln_zps) THEN 
    1380                DO jj=j1,j2 
    1381                   DO ji=i1,i2 
    1382                       jk = mbkt(ji,jj) 
    1383                       ptab(ji,jj,jk,2) = 0._wp 
    1384                   END DO 
    1385                END DO            
    1386             END IF 
    13871711         
    13881712           ! Save ssh at last level: 
     
    13981722         IF( l_vremap ) THEN 
    13991723            IF (ln_linssh) ptab(i1:i2,j1:j2,k2,2) = 0._wp  
    1400             avm_k(i1:i2,j1:j2,k1:k2) = 0._wp 
     1724            avm_k(i1:i2,j1:j2,1:jpkm1) = 0._wp 
    14011725                
    14021726            DO jj = j1, j2 
    14031727               DO ji =i1, i2 
    14041728                  N_in = mbkt_parent(ji,jj) 
    1405                   IF ( tmask(ji,jj,1) == 0._wp) N_in = 0 
    1406                   z_in(N_in+1) = ht0_parent(ji,jj) + ptab(ji,jj,k2,2) 
    1407                   DO jk = N_in, 1, -1  ! Parent vertical grid                
    1408                         z_in(jk) = z_in(jk+1) - ptab(ji,jj,jk,2) 
    1409                        tabin(jk) = ptab(ji,jj,jk,1) 
    1410                   END DO 
    1411                   N_out = mbkt(ji,jj)  
    1412                   DO jk = 1, N_out        ! Child vertical grid 
    1413                      z_out(jk) = gdepw(ji,jj,jk,Kmm_a) 
    1414                   END DO 
     1729                  N_out = mbkt(ji,jj) 
    14151730                  IF (N_in*N_out > 0) THEN 
     1731                     DO jk = 1, N_in  ! Parent vertical grid                
     1732                        z_in(jk)  = ptab(ji,jj,jk,2) - ptab(ji,jj,k2,2) 
     1733                        tabin(jk) = ptab(ji,jj,jk,1) 
     1734                     END DO 
     1735                     DO jk = 1, N_out        ! Child vertical grid 
     1736                        z_out(jk) = gdepw(ji,jj,jk,Kmm_a) - ssh(ji,jj,Kmm_a) 
     1737                     END DO 
     1738                     IF (.NOT.ln_linssh) z_out(1:N_out) = z_out(1:N_out)  - ssh(ji,jj,Kmm_a) 
     1739 
    14161740                     CALL remap_linear(tabin(1:N_in),z_in(1:N_in),avm_k(ji,jj,1:N_out),z_out(1:N_out),N_in,N_out,1) 
    14171741                  ENDIF 
     
    14191743            END DO 
    14201744         ELSE 
    1421             avm_k(i1:i2,j1:j2,k1:k2) = ptab (i1:i2,j1:j2,k1:k2,1) 
     1745            avm_k(i1:i2,j1:j2,1:jpkm1) = ptab (i1:i2,j1:j2,1:jpkm1,1) 
    14221746         ENDIF 
    14231747      ENDIF 
     
    14281752   SUBROUTINE interpmbkt( ptab, i1, i2, j1, j2, before ) 
    14291753      !!---------------------------------------------------------------------- 
    1430       !!                  ***  ROUTINE interpsshn  *** 
     1754      !!                  ***  ROUTINE interpmbkt  *** 
    14311755      !!----------------------------------------------------------------------   
    14321756      INTEGER                         , INTENT(in   ) ::   i1, i2, j1, j2 
     
    14471771   SUBROUTINE interpht0( ptab, i1, i2, j1, j2, before ) 
    14481772      !!---------------------------------------------------------------------- 
    1449       !!                  ***  ROUTINE interpsshn  *** 
     1773      !!                  ***  ROUTINE interpht0  *** 
    14501774      !!----------------------------------------------------------------------   
    14511775      INTEGER                         , INTENT(in   ) ::   i1, i2, j1, j2 
     
    14631787   END SUBROUTINE interpht0 
    14641788 
    1465     
    1466    SUBROUTINE agrif_initts(tabres,i1,i2,j1,j2,k1,k2,m1,m2,before) 
    1467        INTEGER :: i1, i2, j1, j2, k1, k2, m1, m2 
    1468        REAL(wp):: tabres(i1:i2,j1:j2,k1:k2,m1:m2) 
    1469        LOGICAL :: before 
    1470  
    1471        INTEGER :: jm 
    1472  
    1473        IF (before) THEN 
    1474          DO jm=1,jpts 
    1475              tabres(i1:i2,j1:j2,k1:k2,jm) = ts(i1:i2,j1:j2,k1:k2,jm,Kbb_a) 
    1476          END DO 
    1477        ELSE 
    1478          DO jm=1,jpts 
    1479              ts(i1:i2,j1:j2,k1:k2,jm,Kbb_a)=tabres(i1:i2,j1:j2,k1:k2,jm) 
    1480          END DO 
    1481        ENDIF 
    1482    END SUBROUTINE agrif_initts  
    1483  
    1484     
    1485    SUBROUTINE agrif_initssh( ptab, i1, i2, j1, j2, before ) 
    1486       !!---------------------------------------------------------------------- 
    1487       !!                  ***  ROUTINE interpsshn  *** 
    1488       !!----------------------------------------------------------------------   
    1489       INTEGER                         , INTENT(in   ) ::   i1, i2, j1, j2 
    1490       REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   ptab 
    1491       LOGICAL                         , INTENT(in   ) ::   before 
    1492       ! 
    1493       !!----------------------------------------------------------------------   
    1494       ! 
    1495       IF( before) THEN 
    1496          ptab(i1:i2,j1:j2) = ssh(i1:i2,j1:j2,Kbb_a) 
    1497       ELSE 
    1498          ssh(i1:i2,j1:j2,Kbb_a) = ptab(i1:i2,j1:j2)*tmask(i1:i2,j1:j2,1) 
    1499       ENDIF 
    1500       ! 
    1501    END SUBROUTINE agrif_initssh 
     1789   SUBROUTINE Agrif_check_bat( iindic ) 
     1790      !!---------------------------------------------------------------------- 
     1791      !!                  ***  ROUTINE Agrif_check_bat  *** 
     1792      !!----------------------------------------------------------------------   
     1793      INTEGER, INTENT(inout) ::   iindic 
     1794      !! 
     1795      INTEGER :: ji, jj 
     1796      INTEGER  :: istart, iend, jstart, jend, ispon 
     1797      !!----------------------------------------------------------------------   
     1798      ! 
     1799      ! 
     1800      ! --- West --- ! 
     1801      IF(lk_west) THEN 
     1802         ispon  = nn_sponge_len * Agrif_irhox() 
     1803         istart = nn_hls + 2                                  ! halo + land + 1 
     1804         iend   = nn_hls + 1 + nbghostcells + ispon           ! halo + land + nbghostcells + sponge 
     1805         jstart = nn_hls + 2 
     1806         jend   = jpjglo - nn_hls - 1 
     1807         DO ji = mi0(istart), mi1(iend) 
     1808            DO jj = mj0(jstart), mj1(jend) 
     1809               IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1810            END DO 
     1811            DO jj = mj0(jstart), mj1(jend-1) 
     1812               IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1813            END DO 
     1814         END DO 
     1815         DO ji = mi0(istart), mi1(iend-1) 
     1816            DO jj = mj0(jstart), mj1(jend) 
     1817               IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1818            END DO 
     1819         END DO 
     1820      ENDIF 
     1821      ! 
     1822      ! --- East --- ! 
     1823      IF(lk_east) THEN 
     1824         ispon  = nn_sponge_len * Agrif_irhox()  
     1825         istart = jpiglo - ( nn_hls + nbghostcells + ispon )  ! halo + land + nbghostcells + sponge - 1 
     1826         iend   = jpiglo - ( nn_hls + 1 )                     ! halo + land + 1                     - 1 
     1827         jstart = nn_hls + 2 
     1828         jend   = jpjglo - nn_hls - 1  
     1829         DO ji = mi0(istart), mi1(iend) 
     1830            DO jj = mj0(jstart), mj1(jend) 
     1831               IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1832            END DO 
     1833            DO jj = mj0(jstart), mj1(jend-1) 
     1834               IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1835            END DO 
     1836         END DO 
     1837         DO ji = mi0(istart+1), mi1(iend-1) 
     1838            DO jj = mj0(jstart), mj1(jend) 
     1839               IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1840            END DO 
     1841         END DO 
     1842      ENDIF 
     1843      ! 
     1844      ! --- South --- ! 
     1845      IF(lk_south) THEN 
     1846         ispon  = nn_sponge_len * Agrif_irhoy()  
     1847         jstart = nn_hls + 2                                 ! halo + land + 1 
     1848         jend   = nn_hls + 1 + nbghostcells + ispon          ! halo + land + nbghostcells + sponge 
     1849         istart = nn_hls + 2 
     1850         iend   = jpiglo - nn_hls - 1 
     1851         DO jj = mj0(jstart), mj1(jend) 
     1852            DO ji = mi0(istart), mi1(iend) 
     1853               IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1854            END DO 
     1855            DO ji = mi0(istart), mi1(iend-1) 
     1856               IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1857            END DO 
     1858         END DO 
     1859         DO jj = mj0(jstart), mj1(jend-1) 
     1860            DO ji = mi0(istart), mi1(iend) 
     1861               IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1862            END DO 
     1863         END DO 
     1864      ENDIF 
     1865      ! 
     1866      ! --- North --- ! 
     1867      IF(lk_north) THEN 
     1868         ispon  = nn_sponge_len * Agrif_irhoy()  
     1869         jstart = jpjglo - ( nn_hls + nbghostcells + ispon)  ! halo + land + nbghostcells +sponge - 1 
     1870         jend   = jpjglo - ( nn_hls + 1 )                    ! halo + land + 1            - 1 
     1871         istart = nn_hls + 2 
     1872         iend   = jpiglo - nn_hls - 1 
     1873         DO jj = mj0(jstart), mj1(jend) 
     1874            DO ji = mi0(istart), mi1(iend) 
     1875               IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1876            END DO 
     1877            DO ji = mi0(istart), mi1(iend-1) 
     1878               IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1879            END DO 
     1880         END DO 
     1881         DO jj = mj0(jstart+1), mj1(jend-1) 
     1882            DO ji = mi0(istart), mi1(iend) 
     1883               IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 
     1884            END DO 
     1885         END DO 
     1886      ENDIF 
     1887      ! 
     1888   END SUBROUTINE Agrif_check_bat 
    15021889    
    15031890#else 
Note: See TracChangeset for help on using the changeset viewer.