Index: NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/src/OCE/ICB/icbdia.F90
===================================================================
--- NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/src/OCE/ICB/icbdia.F90	(revision 14360)
+++ NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/src/OCE/ICB/icbdia.F90	(revision 14361)
@@ -86,5 +86,5 @@
    INTEGER                       ::  nbergs_start, nbergs_end, nbergs_calved
    INTEGER                       ::  nbergs_melted
-   INTEGER                       ::  nspeeding_tickets
+   INTEGER                       ::  nspeeding_tickets, nspeeding_tickets_all
    INTEGER , DIMENSION(nclasses) ::  nbergs_calved_by_class
 
@@ -125,4 +125,5 @@
       nbergs_calved_by_class(:) = 0
       nspeeding_tickets         = 0
+      nspeeding_tickets_all     = 0
       stored_heat_end           = 0._wp
       floating_heat_end         = 0._wp
@@ -271,8 +272,8 @@
             CALL mpp_sum( 'icbdia', nsumbuf(1:nclasses+4), nclasses+4 )
             !
-            nbergs_end        = nsumbuf(1)
-            nbergs_calved     = nsumbuf(2)
-            nbergs_melted     = nsumbuf(3)
-            nspeeding_tickets = nsumbuf(4)
+            nbergs_end            = nsumbuf(1)
+            nbergs_calved         = nsumbuf(2)
+            nbergs_melted         = nsumbuf(3)
+            nspeeding_tickets_all = nsumbuf(4)
             DO ik = 1,nclasses
                nbergs_calved_by_class(ik)= nsumbuf(4+ik)
@@ -329,5 +330,8 @@
          IF (nn_verbose_level > 0) THEN
             WRITE( numicb, '("calved by class = ",i6,20(",",i6))') (nbergs_calved_by_class(ik),ik=1,nclasses)
-            IF( nspeeding_tickets > 0 )   WRITE( numicb, '("speeding tickets issued = ",i6)') nspeeding_tickets
+            IF( nspeeding_tickets_all > 0 ) THEN
+                WRITE( numicb, '("speeding tickets issued (this domain)  = ",i6)') nspeeding_tickets
+                WRITE( numicb, '("speeding tickets issued (all domains)  = ",i6)') nspeeding_tickets_all
+            END IF
          ENDIF
          !
@@ -338,4 +342,5 @@
          nbergs_calved_by_class(:) = 0
          nspeeding_tickets         = 0
+         nspeeding_tickets_all     = 0
          stored_heat_start         = stored_heat_end
          floating_heat_start       = floating_heat_end
Index: NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/src/OCE/ICB/icbdyn.F90
===================================================================
--- NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/src/OCE/ICB/icbdyn.F90	(revision 14360)
+++ NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/src/OCE/ICB/icbdyn.F90	(revision 14361)
@@ -85,6 +85,6 @@
 
          !                                         !**   A1 = A(X1,V1)
-         CALL icb_accel( berg , zxi1, ze1, zuvel1, zuvel1, zax1,     &
-            &                   zyj1, ze2, zvvel1, zvvel1, zay1, zdt_2, 1./2. )
+         CALL icb_accel( kt, berg , zxi1, ze1, zuvel1, zuvel1, zax1,     &
+            &                   zyj1, ze2, zvvel1, zvvel1, zay1, zdt_2, 0.5_wp )
          !
          zu1 = zuvel1 / ze1                           !**   V1 in d(i,j)/dt
@@ -102,6 +102,6 @@
 
          !                                         !**   A2 = A(X2,V2)
-         CALL icb_accel( berg , zxi2, ze1, zuvel2, zuvel1, zax2,    &
-            &                   zyj2, ze2, zvvel2, zvvel1, zay2, zdt_2, 1./2. )
+         CALL icb_accel( kt, berg , zxi2, ze1, zuvel2, zuvel1, zax2,    &
+            &                   zyj2, ze2, zvvel2, zvvel1, zay2, zdt_2, 0.5_wp )
          !
          zu2 = zuvel2 / ze1                           !**   V2 in d(i,j)/dt
@@ -118,6 +118,6 @@
 
          !                                         !**   A3 = A(X3,V3)
-         CALL icb_accel( berg , zxi3, ze1, zuvel3, zuvel1, zax3,    &
-            &                   zyj3, ze2, zvvel3, zvvel1, zay3, zdt, 1. )
+         CALL icb_accel( kt, berg , zxi3, ze1, zuvel3, zuvel1, zax3,    &
+            &                   zyj3, ze2, zvvel3, zvvel1, zay3, zdt, 1._wp )
          !
          zu3 = zuvel3 / ze1                           !**   V3 in d(i,j)/dt
@@ -134,6 +134,6 @@
 
          !                                         !**   A4 = A(X4,V4)
-         CALL icb_accel( berg , zxi4, ze1, zuvel4, zuvel1, zax4,    &
-            &                   zyj4, ze2, zvvel4, zvvel1, zay4, zdt, 1. )
+         CALL icb_accel( kt, berg , zxi4, ze1, zuvel4, zuvel1, zax4,    &
+            &                   zyj4, ze2, zvvel4, zvvel1, zay4, zdt, 1._wp )
 
          zu4 = zuvel4 / ze1                           !**   V4 in d(i,j)/dt
@@ -235,6 +235,6 @@
 
 
-   SUBROUTINE icb_accel( berg , pxi, pe1, puvel, puvel0, pax,                &
-      &                         pyj, pe2, pvvel, pvvel0, pay, pdt, pcfl_scale )
+   SUBROUTINE icb_accel( kt, berg , pxi, pe1, puvel, puvel0, pax,                 &
+      &                             pyj, pe2, pvvel, pvvel0, pay, pdt, pcfl_scale )
       !!----------------------------------------------------------------------
       !!                  ***  ROUTINE icb_accel  ***
@@ -245,4 +245,5 @@
       !!----------------------------------------------------------------------
       TYPE(iceberg ), POINTER, INTENT(in   ) ::   berg             ! berg
+      INTEGER                , INTENT(in   ) ::   kt               ! time step
       REAL(wp)               , INTENT(in   ) ::   pcfl_scale
       REAL(wp)               , INTENT(in   ) ::   pxi   , pyj      ! berg position in (i,j) referential
@@ -371,6 +372,12 @@
                pax = (zuveln - puvel0)/pdt
                pay = (zvveln - pvvel0)/pdt
-               WRITE(numout,*) 'speeding ticket (zspeed_new, zspeed): ',zspeed_new, zspeed, pdt, pcfl_scale   
-               CALL FLUSH(numout)
+               !
+               ! print speeding ticket
+               IF (nn_verbose_level > 0) THEN
+                  WRITE(numicb, 9200) 'icb speeding : ',kt, nknberg, zspeed, &
+                       &                pxi, pyj, zuo, zvo, zua, zva, zui, zvi
+                  9200 FORMAT(a,i9,i6,f9.2,1x,4(1x,2f9.2))
+               END IF
+               !
                CALL icb_dia_speed()
             ENDIF
Index: NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/src/OCE/ICB/icbutl.F90
===================================================================
--- NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/src/OCE/ICB/icbutl.F90	(revision 14360)
+++ NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/src/OCE/ICB/icbutl.F90	(revision 14361)
@@ -428,5 +428,10 @@
       IF( ij == jpj ) THEN ; ij = ij-1 ; ierr = ierr + 1 ; END IF
       !
-      IF ( ierr > 0 ) CALL ctl_stop('STOP','icb_utl_bilin_e: an icebergs coordinates is out of valid range (out of bound error)')
+      IF ( ierr > 0 ) THEN
+          CALL FLUSH(numicb)
+          CALL ctl_stop('STOP','icb_utl_bilin_e: an icebergs coordinates is out of valid range (out of bound error).'       , &
+               &                                'This can be fixed using rn_speed_limit=0.4 in &namberg.'                   , &
+               &                                'More details in the corresponding iceberg.stat file (nn_verbose_level > 0).' )
+      END IF
       !
       IF(    0.0_wp <= zi .AND. zi < 0.5_wp   ) THEN
