Index: /NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/lib_mpp.F90
===================================================================
--- /NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/lib_mpp.F90	(revision 10299)
+++ /NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/lib_mpp.F90	(revision 10300)
@@ -169,5 +169,6 @@
 
    ! timing summary report
-   REAL(wp), PUBLIC ::  waiting_time = 0._wp, compute_time = 0._wp, elapsed_time = 0._wp
+   REAL(wp), DIMENSION(2), PUBLIC ::  waiting_time = 0._wp
+   REAL(wp)              , PUBLIC ::  compute_time = 0._wp, elapsed_time = 0._wp
    
    REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE ::   tampon   ! buffer in case of bsend
@@ -596,6 +597,8 @@
       
       IF ( ireq /= -1 ) THEN   ! get ld_switch(2) from ll_switch (from previous call)
+         IF( ln_timing ) CALL tic_tac(.TRUE., ld_global = .TRUE.)
          CALL mpi_wait(ireq, MPI_STATUS_IGNORE, ierror )
          ld_switch(2) = ll_switch
+         IF( ln_timing ) CALL tic_tac(.FALSE., ld_global = .TRUE.)
       ENDIF
       IF( .NOT. ldlast ) &     ! send ll_switch to be received on next call
@@ -1464,18 +1467,25 @@
 
    
-   SUBROUTINE tic_tac (l_tic)
-
-    LOGICAL, INTENT(IN) :: l_tic
-    REAL(wp), SAVE :: tic_wt, tic_ct = 0._wp
+   SUBROUTINE tic_tac (ld_tic, ld_global)
+
+    LOGICAL,           INTENT(IN) :: ld_tic
+    LOGICAL, OPTIONAL, INTENT(IN) :: ld_global
+    REAL(wp), DIMENSION(2), SAVE :: tic_wt
+    REAL(wp),               SAVE :: tic_ct = 0._wp
+    INTEGER :: ii
 
     IF( ncom_stp <= nit000 ) RETURN
     IF( ncom_stp == nitend ) RETURN
+    ii = 1
+    IF( PRESENT( ld_global ) ) THEN
+       IF( ld_global ) ii = 2
+    END IF
     
 #if defined key_mpp_mpi
-    IF ( l_tic ) THEN
-       tic_wt = MPI_Wtime()                                                        ! start count tic->tac (waiting time)
+    IF ( ld_tic ) THEN
+       tic_wt(ii) = MPI_Wtime()                                                    ! start count tic->tac (waiting time)
        IF ( tic_ct > 0.0_wp ) compute_time = compute_time + MPI_Wtime() - tic_ct   ! cumulate count tac->tic
     ELSE
-       waiting_time = waiting_time + MPI_Wtime() - tic_wt                          ! cumulate count tic->tac
+       waiting_time(ii) = waiting_time(ii) + MPI_Wtime() - tic_wt(ii)              ! cumulate count tic->tac
        tic_ct = MPI_Wtime()                                                        ! start count tac->tic (waiting time)
     ENDIF
Index: /NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/mpp_allreduce_generic.h90
===================================================================
--- /NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/mpp_allreduce_generic.h90	(revision 10299)
+++ /NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/mpp_allreduce_generic.h90	(revision 10300)
@@ -56,4 +56,5 @@
       ENDIF
 
+      IF( ln_timing ) CALL tic_tac(.TRUE., ld_global = .TRUE.)
       ALLOCATE(work(ipi))
       CALL mpi_allreduce( ARRAY_IN(:), work, ipi, MPI_TYPE, MPI_OPERATION, ilocalcomm, ierror )
@@ -62,4 +63,5 @@
       ENDDO
       DEALLOCATE(work)
+      IF( ln_timing ) CALL tic_tac(.FALSE., ld_global = .TRUE.)
       !
       IF( narea == 1 .AND. ncom_stp == nit000+5 ) THEN
Index: /NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/timing.F90
===================================================================
--- /NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/timing.F90	(revision 10299)
+++ /NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/timing.F90	(revision 10300)
@@ -292,5 +292,5 @@
       REAL(wp), DIMENSION(:), ALLOCATABLE ::   timing_glob
       REAL(wp) ::   zsypd   ! simulated years per day (Balaji 2017)
-      REAL(wp) ::   zperc
+      REAL(wp) ::   zperc, ztot
 
       ll_averep = .TRUE.
@@ -370,7 +370,7 @@
 
 #if defined key_mpp_mpi
-      ALLOCATE(timing_glob(3*jpnij), stat=icode)
-      CALL MPI_GATHER( (/compute_time, waiting_time, elapsed_time/), 3, MPI_DOUBLE_PRECISION,   &
-         &                                              timing_glob, 3, MPI_DOUBLE_PRECISION, 0, MPI_COMM_OCE, icode)
+      ALLOCATE(timing_glob(4*jpnij), stat=icode)
+      CALL MPI_GATHER( (/compute_time, waiting_time(1), waiting_time(2), elapsed_time/),   &
+         &             4, MPI_DOUBLE_PRECISION, timing_glob, 4, MPI_DOUBLE_PRECISION, 0, MPI_COMM_OCE, icode)
       IF( narea == 1 ) THEN
          WRITE(numtime,*) ' '
@@ -380,11 +380,14 @@
          WRITE(numtime,*) ' '
          DO ji = 1, jpnij
-            zperc = timing_glob(3*ji-1) + timing_glob(3*ji-2)
-            IF (zperc /= 0. ) zperc = timing_glob(3*ji-1) / zperc * 100.
-            WRITE(numtime,'(A20,F11.6,            A34,I8)') 'Computing time : ',timing_glob(3*ji-2), ' on MPI rank : ', ji
-            WRITE(numtime,'(A20,F11.6,A2, F4.1,A3,A25,I8)') 'Waiting   time : ',timing_glob(3*ji-1)   &
+            ztot = SUM( timing_glob(4*ji-3:4*ji-1) )
+            WRITE(numtime,'(A28,F11.6,            A34,I8)') 'Computing       time : ',timing_glob(4*ji-3), ' on MPI rank : ', ji
+            IF ( ztot /= 0. ) zperc = timing_glob(4*ji-2) / ztot * 100.
+            WRITE(numtime,'(A28,F11.6,A2, F4.1,A3,A25,I8)') 'Waiting lbc_lnk time : ',timing_glob(4*ji-2)   &
                &                                                         , ' (',      zperc,' %)',   ' on MPI rank : ', ji
-            zsypd = rn_rdt * REAL(nitend-nit000-1, wp) / (timing_glob(3*ji) * 365.)
-            WRITE(numtime,'(A20,F11.6,A7,F10.3,A2,A15,I8)') 'Total     time : ',timing_glob(3*ji  )   &
+            IF ( ztot /= 0. ) zperc = timing_glob(4*ji-1) / ztot * 100.
+            WRITE(numtime,'(A28,F11.6,A2, F4.1,A3,A25,I8)') 'Waiting  global time : ',timing_glob(4*ji-1)   &
+               &                                                         , ' (',      zperc,' %)',   ' on MPI rank : ', ji
+            zsypd = rn_rdt * REAL(nitend-nit000-1, wp) / (timing_glob(4*ji) * 365.)
+            WRITE(numtime,'(A28,F11.6,A7,F10.3,A2,A15,I8)') 'Total           time : ',timing_glob(4*ji  )   &
                &                                                         , ' (SYPD: ', zsypd, ')',   ' on MPI rank : ', ji
          END DO
