---
 src/NST/agrif_oce_interp.F90 | 74 ++++++++++++++++++++++++++++++++++++
 src/NST/agrif_user.F90       |  3 ++
 2 files changed, 77 insertions(+)

diff --git a/src/NST/agrif_oce_interp.F90 b/src/NST/agrif_oce_interp.F90
index d4fd3787..8a275f1f 100644
--- a/src/NST/agrif_oce_interp.F90
+++ b/src/NST/agrif_oce_interp.F90
@@ -896,6 +896,7 @@ CONTAINS
       l_vremap              = ln_vert_remap
       !
       CALL Agrif_Bc_variable( avm_id, calledweight=zalpha, procname=interpavm )       
+      CALL Agrif_Bc_variable( avt_id, calledweight=zalpha, procname=interpavt )       
       !
       Agrif_UseSpecialValue = .FALSE.
       l_vremap              = .FALSE.
@@ -1828,6 +1829,79 @@ CONTAINS
       !
    END SUBROUTINE interpavm
 
+   SUBROUTINE interpavt( ptab, i1, i2, j1, j2, k1, k2, m1, m2, before )
+      !!----------------------------------------------------------------------
+      !!                  ***  ROUTINE interavt  ***
+      !!----------------------------------------------------------------------  
+      INTEGER                                    , INTENT(in   ) ::   i1, i2, j1, j2, k1, k2, m1, m2
+      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,m1:m2), INTENT(inout) ::   ptab
+      LOGICAL                                    , INTENT(in   ) ::   before
+      !
+      INTEGER  :: ji, jj, jk
+      INTEGER  :: N_in, N_out
+      REAL(wp), DIMENSION(k1:k2) :: tabin, z_in
+      REAL(wp), DIMENSION(1:jpk) :: z_out
+      !!----------------------------------------------------------------------  
+      !      
+      IF (before) THEN         
+         DO jk=k1,k2
+            DO jj=j1,j2
+              DO ji=i1,i2
+                    ptab(ji,jj,jk,1) = avt_k(ji,jj,jk)
+              END DO
+           END DO
+         END DO
+
+         IF( l_vremap ) THEN
+            ! Interpolate interfaces 
+            ! Warning: these are masked, hence extrapolated prior interpolation.
+            DO jk=k1,k2
+               DO jj=j1,j2
+                  DO ji=i1,i2
+                      ptab(ji,jj,jk,2) = tmask(ji,jj,jk) * gdepw(ji,jj,jk,Kmm_a)
+                  END DO
+               END DO
+            END DO
+        
+           ! Save ssh at last level:
+            IF (.NOT.ln_linssh) THEN
+               ptab(i1:i2,j1:j2,k2,2) = ssh(i1:i2,j1:j2,Kmm_a)*tmask(i1:i2,j1:j2,1) 
+            ELSE
+               ptab(i1:i2,j1:j2,k2,2) = 0._wp
+            END IF      
+          ENDIF
+
+      ELSE 
+
+         IF( l_vremap ) THEN
+            IF (ln_linssh) ptab(i1:i2,j1:j2,k2,2) = 0._wp 
+            avt_k(i1:i2,j1:j2,1:jpkm1) = 0._wp
+               
+            DO jj = j1, j2
+               DO ji =i1, i2
+                  N_in = mbkt_parent(ji,jj)
+                  N_out = mbkt(ji,jj)
+                  IF (N_in*N_out > 0) THEN
+                     DO jk = 1, N_in  ! Parent vertical grid               
+                        z_in(jk)  = ptab(ji,jj,jk,2) - ptab(ji,jj,k2,2)
+                        tabin(jk) = ptab(ji,jj,jk,1)
+                     END DO
+                     DO jk = 1, N_out        ! Child vertical grid
+                        z_out(jk) = gdepw(ji,jj,jk,Kmm_a) - ssh(ji,jj,Kmm_a)
+                     END DO
+                     IF (.NOT.ln_linssh) z_out(1:N_out) = z_out(1:N_out)  - ssh(ji,jj,Kmm_a)
+
+                     CALL remap_linear(tabin(1:N_in),z_in(1:N_in),avt_k(ji,jj,1:N_out),z_out(1:N_out),N_in,N_out,1)
+                  ENDIF
+               END DO
+            END DO
+         ELSE
+            avt_k(i1:i2,j1:j2,1:jpkm1) = ptab (i1:i2,j1:j2,1:jpkm1,1)
+         ENDIF
+      ENDIF
+      !
+   END SUBROUTINE interpavt
+
    
    SUBROUTINE interpmbkt( ptab, i1, i2, j1, j2, before )
       !!----------------------------------------------------------------------
diff --git a/src/NST/agrif_user.F90 b/src/NST/agrif_user.F90
index 4af2c2ec..e2f47dc1 100644
--- a/src/NST/agrif_user.F90
+++ b/src/NST/agrif_user.F90
@@ -519,6 +519,7 @@
 !         CALL agrif_declare_variable((/2,2,0/),(/ind3,ind3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/), en_id)
 !         CALL agrif_declare_variable((/2,2,0/),(/ind3,ind3,0/),(/'x','y','N'/),(/1,1,1/),(/jpi,jpj,jpk/),avt_id)
          CALL agrif_declare_variable((/2,2,0,0/),(/ind2,ind3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/jpi,jpj,jpk,2/),avm_id)
+         CALL agrif_declare_variable((/2,2,0,0/),(/ind2,ind3,0,0/),(/'x','y','N','N'/),(/1,1,1,1/),(/jpi,jpj,jpk,2/),avt_id)
       ENDIF
      
       ! 2. Type of interpolation
@@ -574,6 +575,7 @@
 !      CALL Agrif_Set_bcinterp(vn_sponge_id,interp1=AGRIF_constant   ,interp2=Agrif_linear)
 
       IF( ln_zdftke.OR.ln_zdfgls )  CALL Agrif_Set_bcinterp( avm_id, interp=AGRIF_linear )
+      IF( ln_zdftke.OR.ln_zdfgls )  CALL Agrif_Set_bcinterp( avt_id, interp=AGRIF_linear )
     
 
 !      CALL Agrif_Set_bcinterp(gphit_id,interp=AGRIF_constant)
@@ -600,6 +602,7 @@
       CALL Agrif_Set_bc(   ub2b_cor_id, (/-imaxrho*nn_shift_bar,ind1/) )
       CALL Agrif_Set_bc(   vb2b_cor_id, (/-imaxrho*nn_shift_bar,ind1/) )
       IF( ln_zdftke.OR.ln_zdfgls ) CALL Agrif_Set_bc( avm_id, (/0,ind1-1/) )
+      IF( ln_zdftke.OR.ln_zdfgls ) CALL Agrif_Set_bc( avt_id, (/0,ind1-1/) )
 !!$      CALL Agrif_Set_bc(glamt_id, (/0,ind1-1/) )  
 !!$      CALL Agrif_Set_bc(gphit_id, (/0,ind1-1/) )  
 
-- 
2.43.0

