Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_oce.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_oce.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_oce.F90	(revision 8010)
@@ -35,5 +35,4 @@
    LOGICAL , PUBLIC :: spongedoneU = .FALSE.       !: dynamics sponge layer indicator
    LOGICAL , PUBLIC :: lk_agrif_fstep = .TRUE.     !: if true: first step
-   LOGICAL , PUBLIC :: lk_agrif_doupd = .TRUE.     !: if true: send update from current grid
    LOGICAL , PUBLIC :: lk_agrif_debug = .FALSE.    !: if true: print debugging info
 
Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_opa_interp.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_opa_interp.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_opa_interp.F90	(revision 8010)
@@ -972,8 +972,8 @@
          IF( bdy_tinterp == 1 ) THEN
             ztcoeff = zrhot * (  zt1**2._wp * (       zt1 - 1._wp)        &
-                  &      - zt0**2._wp * (       zt0 - 1._wp)        )
+                        &      - zt0**2._wp * (       zt0 - 1._wp)        )
          ELSEIF( bdy_tinterp == 2 ) THEN
             ztcoeff = zrhot * (  zt1        * (       zt1 - 1._wp)**2._wp &
-                  &      - zt0        * (       zt0 - 1._wp)**2._wp ) 
+                        &      - zt0        * (       zt0 - 1._wp)**2._wp ) 
 
          ELSE
@@ -1048,8 +1048,8 @@
          IF( bdy_tinterp == 1 ) THEN
             ztcoeff = zrhot * (  zt1**2._wp * (       zt1 - 1._wp)        &
-                  &      - zt0**2._wp * (       zt0 - 1._wp)        )
+                        &      - zt0**2._wp * (       zt0 - 1._wp)        )
          ELSEIF( bdy_tinterp == 2 ) THEN
             ztcoeff = zrhot * (  zt1        * (       zt1 - 1._wp)**2._wp &
-                  &      - zt0        * (       zt0 - 1._wp)**2._wp ) 
+                        &      - zt0        * (       zt0 - 1._wp)**2._wp ) 
 
          ELSE
Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_opa_update.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_opa_update.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_opa_update.F90	(revision 8010)
@@ -31,5 +31,5 @@
 CONTAINS
 
-   RECURSIVE SUBROUTINE Agrif_Update_Tra( )
+   SUBROUTINE Agrif_Update_Tra( )
       !!---------------------------------------------
       !!   *** ROUTINE Agrif_Update_Tra ***
@@ -60,15 +60,9 @@
       Agrif_UseSpecialValueInUpdate = .FALSE.
       !
-      IF ( lk_agrif_doupd ) THEN ! Initialisation: do recursive update:
-         CALL Agrif_ChildGrid_To_ParentGrid()
-         CALL Agrif_Update_Tra()
-         CALL Agrif_ParentGrid_To_ChildGrid()
-      ENDIF
-      !
 #endif
       !
    END SUBROUTINE Agrif_Update_Tra
 
-   RECURSIVE SUBROUTINE Agrif_Update_Dyn( )
+   SUBROUTINE Agrif_Update_Dyn( )
       !!---------------------------------------------
       !!   *** ROUTINE Agrif_Update_Dyn ***
@@ -145,11 +139,4 @@
 #endif
       !
-      ! Do recursive update:
-      IF ( lk_agrif_doupd ) THEN ! Initialisation: do recursive update:
-         CALL Agrif_ChildGrid_To_ParentGrid()
-         CALL Agrif_Update_Dyn()
-         CALL Agrif_ParentGrid_To_ChildGrid()
-      ENDIF
-      !
    END SUBROUTINE Agrif_Update_Dyn
 
@@ -179,5 +166,5 @@
 # endif /* key_zdftke */
 
-   RECURSIVE SUBROUTINE Agrif_Update_vvl( )
+   SUBROUTINE Agrif_Update_vvl( )
       !!---------------------------------------------
       !!   *** ROUTINE Agrif_Update_vvl ***
@@ -205,10 +192,4 @@
       CALL Agrif_ParentGrid_To_ChildGrid()
       !
-      IF ( lk_agrif_doupd ) THEN ! Initialisation: do recursive update:
-         CALL Agrif_ChildGrid_To_ParentGrid()
-         CALL Agrif_Update_vvl()
-         CALL Agrif_ParentGrid_To_ChildGrid()
-      ENDIF
-      !
 #endif
       !
@@ -232,4 +213,6 @@
       fse3u_a(:,:,:) = fse3u_n(:,:,:)
       fse3v_a(:,:,:) = fse3v_n(:,:,:)
+!      ua(:,:,:) = fse3u_b(:,:,:)
+!      va(:,:,:) = fse3v_b(:,:,:)
       hu_a(:,:) = hu(:,:)
       hv_a(:,:) = hv(:,:)
@@ -290,4 +273,5 @@
       !!
       INTEGER :: ji,jj,jk,jn
+      REAL(wp) :: ztb, ztnu, ztno
       !!---------------------------------------------
       !
@@ -320,8 +304,9 @@
                      DO ji=i1,i2
                         IF( tabres(ji,jj,jk,jn) .NE. 0. ) THEN
-                           tsb(ji,jj,jk,jn) = ( tsb(ji,jj,jk,jn)*fse3t_b(ji,jj,jk)   & ! jc: should be fse3t_b prior update
-                                & + atfp * ( tabres(ji,jj,jk,jn)                     &
-                                &             - tsn(ji,jj,jk,jn)*fse3t_a(ji,jj,jk) ) & 
-                                & * tmask(ji,jj,jk) ) / fse3t_b(ji,jj,jk)
+                           ztb  = tsb(ji,jj,jk,jn) * fse3t_b(ji,jj,jk) ! fse3t_b prior update should be used
+                           ztnu = tabres(ji,jj,jk,jn)
+                           ztno = tsn(ji,jj,jk,jn) * fse3t_a(ji,jj,jk)
+                           tsb(ji,jj,jk,jn) = ( ztb + atfp * ( ztnu - ztno) )  & 
+                                     &        * tmask(ji,jj,jk) / fse3t_b(ji,jj,jk)
                         ENDIF
                      ENDDO
@@ -330,4 +315,5 @@
             ENDDO
          ENDIF
+
          DO jn = n1,n2
             DO jk=k1,k2
@@ -341,9 +327,14 @@
             END DO
          END DO
+         !
+         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN
+            tsb(i1:i2,j1:j2,k1:k2,n1:n2)  = tsn(i1:i2,j1:j2,k1:k2,n1:n2)
+         ENDIF
+         !
       ENDIF
       ! 
    END SUBROUTINE updateTS
 
-   SUBROUTINE updateu( tabres, i1, i2, j1, j2, k1, k2, before )
+   SUBROUTINE updateu( tabres, i1, i2, j1, j2, k1, k2, before, nb, ndir )
       !!---------------------------------------------
       !!           *** ROUTINE updateu ***
@@ -354,7 +345,10 @@
       REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres
       LOGICAL, INTENT(in) :: before
+      INTEGER, INTENT(in) :: nb , ndir
       !! 
+      LOGICAL western_side, eastern_side
       INTEGER :: ji, jj, jk
       REAL(wp) :: zrhoy
+      REAL(wp) :: zub, zunu, zuno
       !!---------------------------------------------
       ! 
@@ -371,4 +365,6 @@
          tabres = zrhoy * tabres
       ELSE
+         western_side = (nb == 1).AND.(ndir == 1)
+         eastern_side = (nb == 1).AND.(ndir == 2)
          DO jk=k1,k2
             DO jj=j1,j2
@@ -377,8 +373,9 @@
                   !
                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part
-                     ub(ji,jj,jk) = (       ub(ji,jj,jk)*fse3u_b(ji,jj,jk)   & ! jc: should be fse3u_b prior update
-                           & + atfp * ( tabres(ji,jj,jk)                     &
-                           &              - un(ji,jj,jk)*fse3u_a(ji,jj,jk) ) & 
-                           & * umask(ji,jj,jk) ) / fse3u_b(ji,jj,jk)
+                     zub  = ub(ji,jj,jk) * fse3u_b(ji,jj,jk)
+                     zuno = un(ji,jj,jk) * fse3u_a(ji,jj,jk)
+                     zunu = tabres(ji,jj,jk)
+                     ub(ji,jj,jk) = ( zub + atfp * ( zunu - zuno) ) &      
+                                    & * umask(ji,jj,jk) / fse3u_b(ji,jj,jk)
                   ENDIF
                   !
@@ -387,9 +384,29 @@
             END DO
          END DO
+         !
+!         IF (western_side) THEN
+!            DO jk=k1,k2
+!               DO jj=j1,j2
+!                 un(i1-1,jj,jk) = un(i1-1,jj,jk) * fse3u_a(i1-1,jj,jk) / fse3u_n(i1-1,jj,jk)
+!               END DO
+!            ENDDO
+!         ENDIF
+!         IF (eastern_side) THEN
+!            DO jk=k1,k2
+!               DO jj=j1,j2
+!                 un(i2+1,jj,jk) = un(i2+1,jj,jk) * fse3u_a(i2+1,jj,jk) / fse3u_n(i2+1,jj,jk)
+!               END DO
+!            ENDDO
+!         ENDIF
+         !
+         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN
+            ub(i1:i2,j1:j2,k1:k2)  = un(i1:i2,j1:j2,k1:k2)
+         ENDIF
+         !
       ENDIF
       ! 
    END SUBROUTINE updateu
 
-   SUBROUTINE updatev( tabres, i1, i2, j1, j2, k1, k2, before )
+   SUBROUTINE updatev( tabres, i1, i2, j1, j2, k1, k2, before, nb, ndir )
       !!---------------------------------------------
       !!           *** ROUTINE updatev ***
@@ -401,6 +418,9 @@
       REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2) :: tabres
       LOGICAL :: before
-      !!
+      INTEGER, INTENT(in) :: nb , ndir
+      !!
+      LOGICAL :: northern_side, southern_side
       REAL(wp) :: zrhox
+      REAL(wp) :: zvb, zvnu, zvno
       !!---------------------------------------------      
       !
@@ -417,4 +437,6 @@
          tabres = zrhox * tabres
       ELSE
+         southern_side = (nb == 2).AND.(ndir == 1)
+         northern_side = (nb == 2).AND.(ndir == 2)
          DO jk=k1,k2
             DO jj=j1,j2
@@ -423,8 +445,9 @@
                   !
                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part
-                     vb(ji,jj,jk) = (       vb(ji,jj,jk)*fse3v_b(ji,jj,jk)   & ! jc: should be fse3v_b prior update
-                           & + atfp * ( tabres(ji,jj,jk)                     & 
-                           &              - vn(ji,jj,jk)*fse3v_a(ji,jj,jk) ) & 
-                           & * vmask(ji,jj,jk) ) / fse3v_b(ji,jj,jk)
+                     zvb  = vb(ji,jj,jk) * fse3v_b(ji,jj,jk)
+                     zvno = vn(ji,jj,jk) * fse3v_a(ji,jj,jk)
+                     zvnu = tabres(ji,jj,jk)
+                     vb(ji,jj,jk) = ( zvb + atfp * ( zvnu - zvno) ) &      
+                                    & * vmask(ji,jj,jk) / fse3v_b(ji,jj,jk)
                   ENDIF
                   !
@@ -433,9 +456,29 @@
             END DO
          END DO
+         !
+!         IF (southern_side) THEN
+!            DO jk=k1,k2
+!               DO ji=i1,i2
+!                 vn(ji,j1-1,jk) = vn(ji,j1-1,jk) * fse3v_a(ji,j1-1,jk) / fse3v_n(ji,j1-1,jk)
+!               END DO
+!            ENDDO
+!         ENDIF
+!         IF (northern_side) THEN
+!            DO jk=k1,k2
+!               DO ji=i1,i2
+!                 vn(ji,j2+1,jk) = vn(ji,j2+1,jk) * fse3v_a(ji,j2+1,jk) / fse3v_n(ji,j2+1,jk)
+!               END DO
+!            ENDDO
+!         ENDIF
+         !
+         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN
+            vb(i1:i2,j1:j2,k1:k2)  = vn(i1:i2,j1:j2,k1:k2)
+         ENDIF
+         !
       ENDIF
       ! 
    END SUBROUTINE updatev
 
-   SUBROUTINE updateu2d( tabres, i1, i2, j1, j2, before )
+   SUBROUTINE updateu2d( tabres, i1, i2, j1, j2, before, nb, ndir )
       !!---------------------------------------------
       !!          *** ROUTINE updateu2d ***
@@ -446,5 +489,7 @@
       REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres
       LOGICAL, INTENT(in) :: before
-      !! 
+      INTEGER, INTENT(in) :: nb , ndir
+      !!
+      LOGICAL western_side, eastern_side 
       INTEGER :: ji, jj, jk
       REAL(wp) :: zrhoy
@@ -461,4 +506,6 @@
          tabres = zrhoy * tabres
       ELSE
+         western_side = (nb == 1).AND.(ndir == 1)
+         eastern_side = (nb == 1).AND.(ndir == 2)
          DO jj=j1,j2
             DO ji=i1,i2
@@ -500,9 +547,22 @@
             END DO
          END DO
+!         IF (western_side) THEN
+!            DO jj=j1,j2
+!              un_b(i1-1,jj) = un_b(i1-1,jj) * hu_a(i1-1,jj) * hur(i1-1,jj)
+!            END DO
+!         ENDIF
+!         IF (eastern_side) THEN
+!            DO jj=j1,j2
+!              un_b(i2+1,jj) = un_b(i2+1,jj) * hu_a(i2+1,jj) * hur(i2+1,jj)
+!            ENDDO
+!         ENDIF
+         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN
+            ub_b(i1:i2,j1:j2)  = un_b(i1:i2,j1:j2)
+         ENDIF
       ENDIF
       !
    END SUBROUTINE updateu2d
 
-   SUBROUTINE updatev2d( tabres, i1, i2, j1, j2, before )
+   SUBROUTINE updatev2d( tabres, i1, i2, j1, j2, before, nb, ndir  )
       !!---------------------------------------------
       !!          *** ROUTINE updatev2d ***
@@ -511,5 +571,7 @@
       REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres
       LOGICAL, INTENT(in) :: before
+      INTEGER, INTENT(in) :: nb , ndir
       !! 
+      LOGICAL :: northern_side, southern_side
       INTEGER :: ji, jj, jk
       REAL(wp) :: zrhox
@@ -526,4 +588,6 @@
          tabres = zrhox * tabres
       ELSE
+         southern_side = (nb == 2).AND.(ndir == 1)
+         northern_side = (nb == 2).AND.(ndir == 2)
          DO jj=j1,j2
             DO ji=i1,i2
@@ -565,4 +629,20 @@
             END DO
          END DO
+         !
+!         IF (southern_side) THEN
+!            DO ji=i1,i2
+!              vn_b(ji,j1-1) = vn_b(ji,j1-1) * hv_a(ji,j1-1) * hvr(ji,j1-1)
+!            END DO
+!         ENDIF
+!         IF (northern_side) THEN
+!            DO ji=i1,i2
+!              vn_b(ji,j2+1) = vn_b(ji,j2+1) * hv_a(ji,j2+1) * hvr(ji,j2+1)
+!            END DO
+!         ENDIF
+         !
+         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN
+            vb_b(i1:i2,j1:j2)  = vn_b(i1:i2,j1:j2)
+         ENDIF
+         !
       ENDIF
       ! 
@@ -606,4 +686,9 @@
             END DO
          END DO
+         !
+         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN
+            sshb(i1:i2,j1:j2)  = sshn(i1:i2,j1:j2)
+         ENDIF
+         !
       ENDIF
       !
@@ -619,5 +704,5 @@
       !!
       INTEGER :: ji, jj
-      REAL(wp) :: zrhoy
+      REAL(wp) :: zrhoy, za1
       !!---------------------------------------------
       !
@@ -631,7 +716,11 @@
          tabres = zrhoy * tabres
       ELSE
+         za1 = 1._wp / REAL(Agrif_rhot(), wp)
+         tabres(i1:i2,j1:j2) = tabres(i1:i2,j1:j2) / e2u(i1:i2,j1:j2)
          DO jj=j1,j2
-            DO ji=i1,i2
-               ub2_b(ji,jj) = tabres(ji,jj) / e2u(ji,jj)
+            DO ji=i1,i2  
+               ub2_i_b(ji,jj) = ub2_i_b(ji,jj) & 
+                & + za1 * (tabres(ji,jj) - ub2_b(ji,jj))
+               ub2_b(ji,jj) = tabres(ji,jj)
             END DO
          END DO
@@ -649,5 +738,5 @@
       !!
       INTEGER :: ji, jj
-      REAL(wp) :: zrhox
+      REAL(wp) :: zrhox, za1
       !!---------------------------------------------
       !
@@ -661,7 +750,11 @@
          tabres = zrhox * tabres
       ELSE
+         za1 = 1._wp / REAL(Agrif_rhot(), wp)
+         tabres(i1:i2,j1:j2) = tabres(i1:i2,j1:j2) / e1v(i1:i2,j1:j2)
          DO jj=j1,j2
             DO ji=i1,i2
-               vb2_b(ji,jj) = tabres(ji,jj) / e1v(ji,jj)
+               vb2_i_b(ji,jj) = vb2_i_b(ji,jj) & 
+                & + za1 * (tabres(ji,jj) - vb2_b(ji,jj))
+               vb2_b(ji,jj) = tabres(ji,jj)
             END DO
          END DO
@@ -800,4 +893,9 @@
          ptab(i1:i2,j1:j2,k1:k2) = ptab(i1:i2,j1:j2,k1:k2) * e3t_0(i1:i2,j1:j2,k1:k2)
 !< jc tmp:
+
+         ! Save "old" scale factor (prior update) for subsequent asselin correction
+         ! of prognostic variables (needed to update initial state only)
+         fse3t_a(i1:i2,j1:j2,k1:k2) = fse3t_n(i1:i2,j1:j2,k1:k2)
+!         hdivb(i1:i2,j1:j2,k1:k2)   = fse3t_b(i1:i2,j1:j2,k1:k2)
 
 #if ! defined key_dynspg_ts
@@ -839,8 +937,4 @@
          ! ----------------------------
          !
-         ! Save "old" scale factor (prior update) for subsequent asselin correction
-         ! of prognostic variables (needed to update initial state only)
-         fse3t_a(i1:i2,j1:j2,k1:k2) = fse3t_n(i1:i2,j1:j2,k1:k2)
-         !
          ! Update vertical scale factor at T-points:
          fse3t_n(i1:i2,j1:j2,k1:k2) = ptab(i1:i2,j1:j2,k1:k2)
@@ -872,4 +966,11 @@
          END DO
          !
+         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN
+            fse3t_b (i1:i2,j1:j2,1:jpk)  = fse3t_n (i1:i2,j1:j2,1:jpk)
+            fse3w_b (i1:i2,j1:j2,1:jpk)  = fse3w_n (i1:i2,j1:j2,1:jpk)
+            fsdepw_b(i1:i2,j1:j2,1:jpk)  = fsdepw_n(i1:i2,j1:j2,1:jpk)
+            fsdept_b(i1:i2,j1:j2,1:jpk)  = fsdept_n(i1:i2,j1:j2,1:jpk)
+         ENDIF
+         !
       ENDIF
       !
Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_top_update.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_top_update.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_top_update.F90	(revision 8010)
@@ -28,13 +28,15 @@
 CONTAINS
 
-   SUBROUTINE Agrif_Update_Trc( kt )
+   SUBROUTINE Agrif_Update_Trc( )
       !!---------------------------------------------
       !!   *** ROUTINE Agrif_Update_Trc ***
       !!---------------------------------------------
-      INTEGER, INTENT(in) :: kt
       !!---------------------------------------------
       ! 
-      IF((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) RETURN
+      IF (Agrif_Root()) RETURN
+      
 #if defined TWO_WAY   
+      IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update trc  from grid Number',Agrif_Fixed(), 'nbcline_trc', nbcline_trc
+
       Agrif_UseSpecialValueInUpdate = .TRUE.
       Agrif_SpecialValueFineGrid = 0.
@@ -56,4 +58,5 @@
       Agrif_UseSpecialValueInUpdate = .FALSE.
       nbcline_trc = nbcline_trc + 1
+      !
 #endif
       !
@@ -70,4 +73,5 @@
       !!
       INTEGER :: ji,jj,jk,jn
+      REAL(wp) :: ztb, ztnu, ztno
       !!---------------------------------------------
       !
@@ -77,5 +81,8 @@
                DO jj=j1,j2
                   DO ji=i1,i2
-                     ptab(ji,jj,jk,jn) = trn(ji,jj,jk,jn)
+!> jc tmp
+                     ptab(ji,jj,jk,jn) = trn(ji,jj,jk,jn)  * fse3t_n(ji,jj,jk) / e3t_0(ji,jj,jk)
+!                     ptab(ji,jj,jk,jn) = trn(ji,jj,jk,jn)  * fse3t_n(ji,jj,jk)
+!< jc tmp
                   END DO
                END DO
@@ -83,4 +90,10 @@
          END DO
       ELSE
+!> jc tmp
+         DO jn = n1,n2
+            ptab(i1:i2,j1:j2,k1:k2,jn) =  ptab(i1:i2,j1:j2,k1:k2,jn) * e3t_0(i1:i2,j1:j2,k1:k2)
+         ENDDO
+!< jc tmp
+
          IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN
             ! Add asselin part
@@ -90,7 +103,9 @@
                      DO ji=i1,i2
                         IF( ptab(ji,jj,jk,jn) .NE. 0. ) THEN
-                           trb(ji,jj,jk,jn) = trb(ji,jj,jk,jn) & 
-                                 & + atfp * ( ptab(ji,jj,jk,jn) &
-                                 &             - trn(ji,jj,jk,jn) ) * tmask(ji,jj,jk)
+                           ztb  = trb(ji,jj,jk,jn) * fse3t_b(ji,jj,jk) ! fse3t_b prior update should be used
+                           ztnu = ptab(ji,jj,jk,jn)
+                           ztno = trn(ji,jj,jk,jn) * fse3t_a(ji,jj,jk)
+                           trb(ji,jj,jk,jn) = ( ztb + atfp * ( ztnu - ztno) )  & 
+                                     &        * tmask(ji,jj,jk) / fse3t_b(ji,jj,jk)
                         ENDIF
                      ENDDO
@@ -99,4 +114,5 @@
             ENDDO
          ENDIF
+
          DO jn = n1,n2
             DO jk=k1,k2
@@ -104,5 +120,5 @@
                   DO ji=i1,i2
                      IF( ptab(ji,jj,jk,jn) .NE. 0. ) THEN 
-                        trn(ji,jj,jk,jn) = ptab(ji,jj,jk,jn) * tmask(ji,jj,jk)
+                        trn(ji,jj,jk,jn) = ptab(ji,jj,jk,jn) / fse3t_n(ji,jj,jk)
                      END IF
                   END DO
@@ -110,4 +126,9 @@
             END DO
          END DO
+         !
+         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN
+            trb(i1:i2,j1:j2,k1:k2,n1:n2)  = trn(i1:i2,j1:j2,k1:k2,n1:n2)
+         ENDIF
+         !
       ENDIF
       ! 
Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_user.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_user.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/NST_SRC/agrif_user.F90	(revision 8010)
@@ -1,2 +1,3 @@
+#undef UPD_HIGH   /* MIX HIGH UPDATE */
 #if defined key_agrif
 !!----------------------------------------------------------------------
@@ -90,5 +91,15 @@
 # if defined key_top
    CALL Agrif_InitValues_cont_top
-# endif      
+# endif 
+
+   nbcline     = 0
+#if defined key_top
+   nbcline_trc = 0
+#endif
+
+   IF ( Agrif_Level().EQ.Agrif_MaxLevel() ) CALL agrif_Update_ini()
+
+   Agrif_UseSpecialValueInUpdate = .FALSE.
+     
 END SUBROUTINE Agrif_initvalues
 
@@ -150,10 +161,11 @@
    ! 5. Update type
    !--------------- 
+# if defined UPD_HIGH
+   CALL Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Full_Weighting)
+   CALL Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Full_Weighting, update2=Agrif_Update_Average)
+#else
    CALL Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Copy, update2=Agrif_Update_Average)
    CALL Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Average, update2=Agrif_Update_Copy)
-
-! High order updates
-!   CALL Agrif_Set_Updatetype(e1u_id,update1 = Agrif_Update_Average,            update2=Agrif_Update_Full_Weighting)
-!   CALL Agrif_Set_Updatetype(e2v_id,update1 = Agrif_Update_Full_Weighting,     update2=Agrif_Update_Average)
+#endif
     !
 END SUBROUTINE agrif_declare_var_dom
@@ -302,29 +314,34 @@
       !
    ENDIF
-   ! 
-   ! Do update at initialisation because not done before writing restarts
-   ! This would indeed change boundary conditions values at initial time
-   ! hence produce restartability issues.
-   ! Note that update below is recursive (with lk_agrif_doupd=T):
-   ! 
-! JC: I am not sure if Agrif_MaxLevel() is the "relative"
-!     or the absolute maximum nesting level...TBC  
-   nbcline = 0                 
-   IF ( Agrif_Level().EQ.Agrif_MaxLevel() ) THEN       
-      ! NB: Order matters below: 
-      IF ( lk_vvl ) CALL Agrif_Update_vvl() 
-      CALL Agrif_Update_tra()
-      CALL Agrif_Update_dyn()
-   ENDIF
-   !
+
+END SUBROUTINE Agrif_InitValues_cont
+
+RECURSIVE SUBROUTINE Agrif_Update_ini( )
+   !
+   USE dom_oce
+   USE agrif_opa_update
+#if defined key_top
+   USE agrif_top_update
+#endif
+   !
+   IMPLICIT NONE
+   !
+   IF (Agrif_Root()) RETURN
+   !
+   IF ( lk_vvl ) CALL Agrif_Update_vvl()
+   CALL Agrif_Update_tra()
+#if defined key_top
+   CALL Agrif_Update_Trc()
+#endif
+   CALL Agrif_Update_dyn()
 # if defined key_zdftke
 !   CALL Agrif_Update_tke(0)
 # endif
-   !
-   Agrif_UseSpecialValueInUpdate = .FALSE.
-   lk_agrif_doupd = .FALSE.
-   !
-END SUBROUTINE Agrif_InitValues_cont
-
+
+   CALL Agrif_ChildGrid_To_ParentGrid()
+   CALL Agrif_Update_ini()
+   CALL Agrif_ParentGrid_To_ChildGrid()
+
+END SUBROUTINE agrif_update_ini
 
 SUBROUTINE agrif_declare_var
@@ -431,15 +448,31 @@
    ! 5. Update type
    !--------------- 
+   CALL Agrif_Set_Updatetype(scales_t_id, update = AGRIF_Update_Average)
+
+# if defined UPD_HIGH
+   CALL Agrif_Set_Updatetype(tsn_id, update = Agrif_Update_Full_Weighting)
+   CALL Agrif_Set_Updatetype(un_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Full_Weighting)
+   CALL Agrif_Set_Updatetype(vn_update_id,update1 = Agrif_Update_Full_Weighting, update2 = Agrif_Update_Average)
+
+   CALL Agrif_Set_Updatetype(ub2b_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Full_Weighting)
+   CALL Agrif_Set_Updatetype(vb2b_update_id,update1 = Agrif_Update_Full_Weighting, update2 = Agrif_Update_Average)
+   CALL Agrif_Set_Updatetype(sshn_id, update = Agrif_Update_Full_Weighting)
+   CALL Agrif_Set_Updatetype(e3t_id, update = Agrif_Update_Full_Weighting)
+
+# if defined key_zdftke || defined key_zdfgls
+   CALL Agrif_Set_Updatetype( en_id, update = AGRIF_Update_Full_Weighting)
+   CALL Agrif_Set_Updatetype(avt_id, update = AGRIF_Update_Full_Weighting)
+   CALL Agrif_Set_Updatetype(avm_id, update = AGRIF_Update_Full_Weighting)
+# endif
+
+#else
    CALL Agrif_Set_Updatetype(tsn_id, update = AGRIF_Update_Average)
-
-   CALL Agrif_Set_Updatetype(scales_t_id, update = AGRIF_Update_Average)
-
    CALL Agrif_Set_Updatetype(un_update_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average)
    CALL Agrif_Set_Updatetype(vn_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy)
 
-   CALL Agrif_Set_Updatetype(sshn_id, update = AGRIF_Update_Average)
-
    CALL Agrif_Set_Updatetype(ub2b_update_id,update1 = Agrif_Update_Copy, update2 = Agrif_Update_Average)
    CALL Agrif_Set_Updatetype(vb2b_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Copy)
+   CALL Agrif_Set_Updatetype(sshn_id, update = AGRIF_Update_Average)
+   CALL Agrif_Set_Updatetype(e3t_id, update = AGRIF_Update_Average)
 
 # if defined key_zdftke || defined key_zdfgls
@@ -449,16 +482,5 @@
 # endif
 
-   CALL Agrif_Set_Updatetype(e3t_id, update = AGRIF_Update_Average)
-
-! High order updates
-!   CALL Agrif_Set_Updatetype(tsn_id, update = Agrif_Update_Full_Weighting)
-!   CALL Agrif_Set_Updatetype(un_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Full_Weighting)
-!   CALL Agrif_Set_Updatetype(vn_update_id,update1 = Agrif_Update_Full_Weighting, update2 = Agrif_Update_Average)
-!
-!   CALL Agrif_Set_Updatetype(ub2b_update_id,update1 = Agrif_Update_Average, update2 = Agrif_Update_Full_Weighting)
-!   CALL Agrif_Set_Updatetype(vb2b_update_id,update1 = Agrif_Update_Full_Weighting, update2 = Agrif_Update_Average)
-!   CALL Agrif_Set_Updatetype(sshn_id, update = Agrif_Update_Full_Weighting)
-
-!   CALL Agrif_Set_Updatetype(e3t_id, update = Agrif_Update_Full_Weighting)
+#endif
    !
 END SUBROUTINE agrif_declare_var
@@ -660,8 +682,4 @@
       ENDIF
    ENDIF
-   nbcline_trc = 0
-   CALL Agrif_Update_trc(0)
-   !
-   Agrif_UseSpecialValueInUpdate = .FALSE.
    !
 END SUBROUTINE Agrif_InitValues_cont_top
@@ -699,9 +717,9 @@
    ! 5. Update type
    !--------------- 
+# if defined UPD_HIGH
+   CALL Agrif_Set_Updatetype(trn_id, update = Agrif_Update_Full_Weighting)
+#else
    CALL Agrif_Set_Updatetype(trn_id, update = AGRIF_Update_Average)
-
-!   Higher order update
-!   CALL Agrif_Set_Updatetype(tsn_id, update = Agrif_Update_Full_Weighting)
-
+#endif
    !
 END SUBROUTINE agrif_declare_var_top
Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90	(revision 8010)
@@ -323,4 +323,11 @@
             END DO
          END DO
+
+         IF( .NOT. AGRIF_Root() ) THEN
+            IF ((nbondi ==  1).OR.(nbondi == 2)) rotn(nlci-1 , :     ,jk) = 0.e0      ! east
+            IF ((nbondi == -1).OR.(nbondi == 2)) rotn(1      , :     ,jk) = 0.e0      ! west
+            IF ((nbondj ==  1).OR.(nbondj == 2)) rotn(:      ,nlcj-1 ,jk) = 0.e0      ! north
+            IF ((nbondj == -1).OR.(nbondj == 2)) rotn(:      ,1      ,jk) = 0.e0      ! south
+         ENDIF
          !                                             ! ===============
       END DO                                           !   End of slab
Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90	(revision 8010)
@@ -576,5 +576,5 @@
          ! Set fluxes during predictor step to ensure 
          ! volume conservation
-         IF( (.NOT.Agrif_Root()).AND.ln_bt_fw ) THEN
+         IF (.NOT.Agrif_Root().AND.ln_bt_fw) THEN
             IF((nbondi == -1).OR.(nbondi == 2)) THEN
                DO jj=1,jpj
@@ -1139,9 +1139,4 @@
          IF(lwp) WRITE(numout,*) '     ln_bt_fw =.false.=> Centred integration of barotropic variables '
       ENDIF
-      !
-#if defined key_agrif
-      ! Restrict the use of Agrif to the forward case only
-      IF ((.NOT.ln_bt_fw ).AND.(.NOT.Agrif_Root())) CALL ctl_stop( 'AGRIF not implemented if ln_bt_fw=.FALSE.' )
-#endif
       !
       IF(lwp) WRITE(numout,*)    '     Time filter choice, nn_bt_flt: ', nn_bt_flt
Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90	(revision 8010)
@@ -223,4 +223,12 @@
       ENDIF
 #endif
+#if defined key_agrif
+      IF( .NOT. AGRIF_Root() ) THEN
+         IF ((nbondi ==  1).OR.(nbondi == 2)) wn(nlci-1 , :     ,:) = 0.e0      ! east
+         IF ((nbondi == -1).OR.(nbondi == 2)) wn(2      , :     ,:) = 0.e0      ! west
+         IF ((nbondj ==  1).OR.(nbondj == 2)) wn(:      ,nlcj-1 ,:) = 0.e0      ! north
+         IF ((nbondj == -1).OR.(nbondj == 2)) wn(:      ,2      ,:) = 0.e0      ! south
+      ENDIF
+#endif
       !
       IF( nn_timing == 1 )  CALL timing_stop('wzv')
Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/step.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/step.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/step.F90	(revision 8010)
@@ -353,4 +353,7 @@
                                CALL Agrif_Update_Tra()      ! Update active tracers
                                CALL Agrif_Update_Dyn()      ! Update momentum
+#if defined key_top
+                               CALL Agrif_Update_Trc()      ! Update passive tracers
+#endif
       ENDIF
 #endif
Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/step_oce.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/step_oce.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/OPA_SRC/step_oce.F90	(revision 8010)
@@ -114,4 +114,7 @@
    USE agrif_opa_sponge ! Momemtum and tracers sponges
    USE agrif_opa_update ! Update (2-way nesting)
+#if defined key_top
+   USE agrif_top_update ! Update (2-way nesting)
+#endif
 #endif
 #if defined key_top
Index: /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90
===================================================================
--- /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90	(revision 8009)
+++ /branches/2017/dev_r7963_nemo_v3_6_AGRIF-3_AGRIFVVL/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90	(revision 8010)
@@ -30,5 +30,4 @@
 #if defined key_agrif
    USE agrif_top_sponge ! tracers sponges
-   USE agrif_top_update ! tracers updates
 #endif
 
@@ -85,8 +84,4 @@
          IF( ln_trcdmp_clo )    CALL trc_dmp_clo( kstp )        ! internal damping trends on closed seas only
 
-#if defined key_agrif
-      IF( .NOT. Agrif_Root())   CALL Agrif_Update_Trc( kstp )   ! Update tracer at AGRIF zoom boundaries : children only
-#endif
-
       ELSE                                               ! 1D vertical configuration
                                 CALL trc_sbc( kstp )            ! surface boundary condition
