Index: /NEMO/trunk/src/OCE/DYN/sshwzv.F90
===================================================================
--- /NEMO/trunk/src/OCE/DYN/sshwzv.F90	(revision 10906)
+++ /NEMO/trunk/src/OCE/DYN/sshwzv.F90	(revision 10907)
@@ -297,7 +297,6 @@
          IF(lwp) WRITE(numout,*) 'wAimp : Courant number-based partitioning of now vertical velocity '
          IF(lwp) WRITE(numout,*) '~~~~~ '
-         !
-         Cu_adv(:,:,jpk) = 0._wp              ! bottom value : Cu_adv=0 (set once for all)
-      ENDIF
+      ENDIF
+      !
       !
       DO jk = 1, jpkm1            ! calculate Courant numbers
@@ -305,27 +304,27 @@
             DO ji = 2, fs_jpim1   ! vector opt.
                z1_e3w = 1._wp / e3w_n(ji,jj,jk)
-               Cu_adv(ji,jj,jk) = r2dt * ( ( MAX( wn(ji,jj,jk) , 0._wp ) - MIN( wn(ji,jj,jk+1) , 0._wp ) )    &
-                  &                      + ( MAX( e2u(ji  ,jj)*e3uw_n(ji  ,jj,jk)*un(ji  ,jj,jk), 0._wp ) -   &
-                  &                          MIN( e2u(ji-1,jj)*e3uw_n(ji-1,jj,jk)*un(ji-1,jj,jk), 0._wp ) )   &
-                  &                        * r1_e1e2t(ji,jj)                                                  &
-                  &                      + ( MAX( e1v(ji,jj  )*e3vw_n(ji,jj  ,jk)*vn(ji,jj  ,jk), 0._wp ) -   &
-                  &                          MIN( e1v(ji,jj-1)*e3vw_n(ji,jj-1,jk)*vn(ji,jj-1,jk), 0._wp ) )   &
-                  &                        * r1_e1e2t(ji,jj)                                                  &
-                  &                      ) * z1_e3w
+               Cu_adv(ji,jj,jk) = 2._wp * rdt * ( ( MAX( wn(ji,jj,jk) , 0._wp ) - MIN( wn(ji,jj,jk+1) , 0._wp ) )    &  ! 2*rdt and not r2dt (for restartability)
+                  &                             + ( MAX( e2u(ji  ,jj)*e3uw_n(ji  ,jj,jk)*un(ji  ,jj,jk), 0._wp ) -   &
+                  &                                 MIN( e2u(ji-1,jj)*e3uw_n(ji-1,jj,jk)*un(ji-1,jj,jk), 0._wp ) )   &
+                  &                               * r1_e1e2t(ji,jj)                                                  &
+                  &                             + ( MAX( e1v(ji,jj  )*e3vw_n(ji,jj  ,jk)*vn(ji,jj  ,jk), 0._wp ) -   &
+                  &                                 MIN( e1v(ji,jj-1)*e3vw_n(ji,jj-1,jk)*vn(ji,jj-1,jk), 0._wp ) )   &
+                  &                               * r1_e1e2t(ji,jj)                                                  &
+                  &                             ) * z1_e3w
             END DO
          END DO
       END DO
+      CALL lbc_lnk( 'sshwzv', Cu_adv, 'T', 1. )
       !
       CALL iom_put("Courant",Cu_adv)
       !
-      wi(:,:,:) = 0._wp                                 ! Includes top and bottom values set to zero
       IF( MAXVAL( Cu_adv(:,:,:) ) > Cu_min ) THEN       ! Quick check if any breaches anywhere
          DO jk = 1, jpkm1                               ! or scan Courant criterion and partition
-            DO jj = 2, jpjm1                            ! w where necessary
-               DO ji = 2, fs_jpim1   ! vector opt.
+            DO jj = 1, jpj                              ! w where necessary
+               DO ji = 1, jpi
                   !
                   zCu = MAX( Cu_adv(ji,jj,jk) , Cu_adv(ji,jj,jk+1) )
                   !
-                  IF( zCu < Cu_min ) THEN               !<-- Fully explicit
+                  IF( zCu <= Cu_min ) THEN              !<-- Fully explicit
                      zcff = 0._wp
                   ELSEIF( zCu < Cu_cut ) THEN           !<-- Mixed explicit
@@ -346,5 +345,6 @@
       ELSE
          ! Fully explicit everywhere
-         Cu_adv = 0.0_wp                                ! Reuse array to output coefficient
+         Cu_adv(:,:,:) = 0._wp                          ! Reuse array to output coefficient
+         wi    (:,:,:) = 0._wp
       ENDIF
       CALL iom_put("wimp",wi) 
Index: /NEMO/trunk/src/OCE/ZDF/zdfphy.F90
===================================================================
--- /NEMO/trunk/src/OCE/ZDF/zdfphy.F90	(revision 10906)
+++ /NEMO/trunk/src/OCE/ZDF/zdfphy.F90	(revision 10907)
@@ -132,6 +132,7 @@
       IF( ln_zad_Aimp ) THEN
          IF( zdf_phy_alloc() /= 0 )   &
-        &       CALL ctl_stop( 'STOP', 'zdf_phy_init : unable to allocate adaptive-implicit z-advection arrays' )
-         wi(:,:,:) = 0._wp
+            &       CALL ctl_stop( 'STOP', 'zdf_phy_init : unable to allocate adaptive-implicit z-advection arrays' )
+         Cu_adv(:,:,:) = 0._wp
+         wi    (:,:,:) = 0._wp
       ENDIF
       !                          !==  Background eddy viscosity and diffusivity  ==!
