diff --git a/src/ABL/ablmod.F90 b/src/ABL/ablmod.F90
index 84a2a99d389cdd865aa3c9de3dc9d91c53ba637b..d14691e4e56216314d10e8143d85aca8b7cace4c 100644
--- a/src/ABL/ablmod.F90
+++ b/src/ABL/ablmod.F90
@@ -1241,21 +1241,21 @@ CONTAINS
 
       DO_2D( 0, 0, 1, 0 )
          zFY ( ji, jj  ) =   zdY ( ji, jj   )                        &
-            & +  smth_a*  ( (zdX ( ji, jj+1 ) - zdX( ji-1, jj+1 ))   &
+            & +  smth_a*  ( (zdX ( ji, jj+1 ) - zdX( ji-1, jj+1 ))   &   ! add () for NP repro
             &            -  (zdX ( ji, jj   ) - zdX( ji-1, jj   ))  )
       END_2D
 
       DO_2D( 1, 0, 0, 0 )
          zFX( ji, jj  ) =    zdX( ji, jj   )                         &
-           &    + smth_a*(  (zdY( ji+1, jj ) - zdY( ji+1, jj-1))     &
+           &    + smth_a*(  (zdY( ji+1, jj ) - zdY( ji+1, jj-1))     &   ! add () for NP repro
            &             -  (zdY( ji  , jj ) - zdY( ji  , jj-1)) )
       END_2D
 
       DO_2D( 0, 0, 0, 0 )
          pvar2d( ji  ,jj ) = pvar2d( ji  ,jj )              &
   &         + msk(ji,jj) * smth_b * (                       &
-  &                  zFX( ji, jj ) - zFX( ji-1, jj )        &
-  &                 +zFY( ji, jj ) - zFY( ji, jj-1 )  )
+  &                   ( zFX( ji, jj ) - zFX( ji-1, jj ) )   &   ! add () for NP repro
+  &                 + ( zFY( ji, jj ) - zFY( ji, jj-1 ) ) )
       END_2D
 
 !---------------------------------------------------------------------------------------------------
diff --git a/src/ICE/icedyn.F90 b/src/ICE/icedyn.F90
index 687cd916ed23110bcd9930e961649d6ab11dbe6a..4fdd22b66c271455802e33073ca4d366515639f9 100644
--- a/src/ICE/icedyn.F90
+++ b/src/ICE/icedyn.F90
@@ -164,8 +164,8 @@ CONTAINS
 
             ALLOCATE( zdivu_i(A2D(0)) )
             DO_2D( 0, 0, 0, 0 )
-               zdivu_i(ji,jj) = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
-                  &             + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) ) * r1_e1e2t(ji,jj)
+               zdivu_i(ji,jj) = ( ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) )   &   ! add () for NP repro
+                  &             + ( e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) ) ) * r1_e1e2t(ji,jj)
             END_2D
             CALL iom_put( 'icediv' , zdivu_i )
             DEALLOCATE( zdivu_i )
diff --git a/src/ICE/icedyn_adv.F90 b/src/ICE/icedyn_adv.F90
index a6d2e957735e1c0663619f52f663e237f61c3215..6afabac00bcf4adc66c8cbd98cfb577df3151843 100644
--- a/src/ICE/icedyn_adv.F90
+++ b/src/ICE/icedyn_adv.F90
@@ -25,7 +25,6 @@ MODULE icedyn_adv
    USE lib_mpp        ! MPP library
    USE lib_fortran    ! fortran utilities (glob_sum + no signed zero)
    USE timing         ! Timing
-   USE prtctl         ! Print control
 
    IMPLICIT NONE
    PRIVATE
@@ -108,6 +107,8 @@ CONTAINS
       ! controls
       IF( ln_icediachk )   CALL ice_cons_hsm(1, 'icedyn_adv', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) ! conservation
       IF( ln_icectl    )   CALL ice_prt     (kt, iiceprt, jiceprt,-1, ' - ice dyn & trp - ')                           ! prints
+      IF( sn_cfctl%l_prtctl )   &
+         &                 CALL ice_prt3D('icedyn_adv')                                                                ! prints
       IF( ln_timing    )   CALL timing_stop ('icedyn_adv')                                                             ! timing
       !
    END SUBROUTINE ice_dyn_adv
diff --git a/src/ICE/icedyn_adv_pra.F90 b/src/ICE/icedyn_adv_pra.F90
index 54a90afdc79fcc2a8de05e609900434e5927a3b1..763f71a6611c1f296982b755a5aeafb9b3de820e 100644
--- a/src/ICE/icedyn_adv_pra.F90
+++ b/src/ICE/icedyn_adv_pra.F90
@@ -318,8 +318,9 @@ CONTAINS
          ! derive open water from ice concentration
          zati2(:,:) = SUM( pa_i(A2D(0),:), dim=3 )
          DO_2D( 0, 0, 0, 0 )
-            pato_i(ji,jj) = pato_i(ji,jj) - ( zati2(ji,jj) - zati1(ji,jj) ) &                        !--- open water
-               &                          - ( zudy(ji,jj) - zudy(ji-1,jj) + zvdx(ji,jj) - zvdx(ji,jj-1) ) * r1_e1e2t(ji,jj) * zdt
+            pato_i(ji,jj) = pato_i(ji,jj) - ( zati2(ji,jj) - zati1(ji,jj) )      &                        !--- open water
+               &                          - (  ( zudy(ji,jj) - zudy(ji-1,jj) )   &    ! add () for NP repro
+               &                             + ( zvdx(ji,jj) - zvdx(ji,jj-1) )  ) * r1_e1e2t(ji,jj) * zdt
          END_2D
          CALL lbc_lnk( 'icedyn_adv_pra', pato_i, 'T',  1.0_wp )
          !
@@ -390,158 +391,152 @@ CONTAINS
       DO jl = 1, jcat   ! loop on categories
          !
          ! Limitation of moments.
-         DO jj = Njs0 - jj0, Nje0 + jj0
-
-            DO ji = Nis0 - 1, Nie0 + 1
-
-               zpsm  = psm (ji,jj,jl) ! optimization
-               zps0  = ps0 (ji,jj,jl)
-               zpsx  = psx (ji,jj,jl)
-               zpsxx = psxx(ji,jj,jl)
-               zpsy  = psy (ji,jj,jl)
-               zpsyy = psyy(ji,jj,jl)
-               zpsxy = psxy(ji,jj,jl)
-
-               !  Initialize volumes of boxes  (=area if adv_x first called, =psm otherwise)
-               zpsm = MAX( pcrh * e1e2t(ji,jj) + ( 1.0 - pcrh ) * zpsm , epsi20 )
-               !
-               zslpmax = MAX( 0._wp, zps0 )
-               zs1max  = 1.5 * zslpmax
-               zs1new  = MIN( zs1max, MAX( -zs1max, zpsx ) )
-               zs2new  = MIN( 2.0 * zslpmax - 0.3334 * ABS( zs1new ), MAX( ABS( zs1new ) - zslpmax, zpsxx ) )
-               rswitch = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tmask(ji,jj,1)   ! Case of empty boxes & Apply mask
-
-               zps0  = zslpmax
-               zpsx  = zs1new  * rswitch
-               zpsxx = zs2new  * rswitch
-               zpsy  = zpsy    * rswitch
-               zpsyy = zpsyy   * rswitch
-               zpsxy = MIN( zslpmax, MAX( -zslpmax, zpsxy ) ) * rswitch
-
-               !  Calculate fluxes and moments between boxes i<-->i+1
-               !                                !  Flux from i to i+1 WHEN u GT 0
-               zbet(ji,jj)  =  MAX( 0._wp, SIGN( 1._wp, put(ji,jj) ) )
-               zalf         =  MAX( 0._wp, put(ji,jj) ) * pdt / zpsm
-               zalfq        =  zalf * zalf
-               zalf1        =  1.0 - zalf
-               zalf1q       =  zalf1 * zalf1
-               !
-               zfm (ji,jj)  =  zalf  *   zpsm
-               zf0 (ji,jj)  =  zalf  * ( zps0  + zalf1 * ( zpsx + (zalf1 - zalf) * zpsxx ) )
-               zfx (ji,jj)  =  zalfq * ( zpsx  + 3.0 * zalf1 * zpsxx )
-               zfxx(ji,jj)  =  zalf  *   zpsxx * zalfq
-               zfy (ji,jj)  =  zalf  * ( zpsy  + zalf1 * zpsxy )
-               zfxy(ji,jj)  =  zalfq *   zpsxy
-               zfyy(ji,jj)  =  zalf  *   zpsyy
-
-               !                                !  Readjust moments remaining in the box.
-               zpsm  =  zpsm  - zfm(ji,jj)
-               zps0  =  zps0  - zf0(ji,jj)
-               zpsx  =  zalf1q * ( zpsx - 3.0 * zalf * zpsxx )
-               zpsxx =  zalf1  * zalf1q * zpsxx
-               zpsy  =  zpsy  - zfy (ji,jj)
-               zpsyy =  zpsyy - zfyy(ji,jj)
-               zpsxy =  zalf1q * zpsxy
-               !
-               psm (ji,jj,jl) = zpsm ! optimization
-               ps0 (ji,jj,jl) = zps0
-               psx (ji,jj,jl) = zpsx
-               psxx(ji,jj,jl) = zpsxx
-               psy (ji,jj,jl) = zpsy
-               psyy(ji,jj,jl) = zpsyy
-               psxy(ji,jj,jl) = zpsxy
-               !
-            END DO
-
-            DO ji = Nis0 - 1, Nie0
-               !                                !  Flux from i+1 to i when u LT 0.
-               zalf          = MAX( 0._wp, -put(ji,jj) ) * pdt / psm(ji+1,jj,jl)
-               zalg  (ji,jj) = zalf
-               zalfq         = zalf * zalf
-               zalf1         = 1.0 - zalf
-               zalg1 (ji,jj) = zalf1
-               zalf1q        = zalf1 * zalf1
-               zalg1q(ji,jj) = zalf1q
-               !
-               zfm   (ji,jj) = zfm (ji,jj) + zalf  *    psm (ji+1,jj,jl)
-               zf0   (ji,jj) = zf0 (ji,jj) + zalf  * (  ps0 (ji+1,jj,jl) &
-                  &                                   - zalf1 * ( psx(ji+1,jj,jl) - (zalf1 - zalf ) * psxx(ji+1,jj,jl) ) )
-               zfx   (ji,jj) = zfx (ji,jj) + zalfq * (  psx (ji+1,jj,jl) - 3.0 * zalf1 * psxx(ji+1,jj,jl) )
-               zfxx  (ji,jj) = zfxx(ji,jj) + zalf  *    psxx(ji+1,jj,jl) * zalfq
-               zfy   (ji,jj) = zfy (ji,jj) + zalf  * (  psy (ji+1,jj,jl) - zalf1 * psxy(ji+1,jj,jl) )
-               zfxy  (ji,jj) = zfxy(ji,jj) + zalfq *    psxy(ji+1,jj,jl)
-               zfyy  (ji,jj) = zfyy(ji,jj) + zalf  *    psyy(ji+1,jj,jl)
-            END DO
-
-            DO ji = Nis0, Nie0
-               !
-               zpsm  = psm (ji,jj,jl) ! optimization
-               zps0  = ps0 (ji,jj,jl)
-               zpsx  = psx (ji,jj,jl)
-               zpsxx = psxx(ji,jj,jl)
-               zpsy  = psy (ji,jj,jl)
-               zpsyy = psyy(ji,jj,jl)
-               zpsxy = psxy(ji,jj,jl)
-               !                                !  Readjust moments remaining in the box.
-               zbt  =       zbet(ji-1,jj)
-               zbt1 = 1.0 - zbet(ji-1,jj)
-               !
-               zpsm  = zbt * zpsm + zbt1 * ( zpsm - zfm(ji-1,jj) )
-               zps0  = zbt * zps0 + zbt1 * ( zps0 - zf0(ji-1,jj) )
-               zpsx  = zalg1q(ji-1,jj) * ( zpsx + 3.0 * zalg(ji-1,jj) * zpsxx )
-               zpsxx = zalg1 (ji-1,jj) * zalg1q(ji-1,jj) * zpsxx
-               zpsy  = zbt * zpsy  + zbt1 * ( zpsy  - zfy (ji-1,jj) )
-               zpsyy = zbt * zpsyy + zbt1 * ( zpsyy - zfyy(ji-1,jj) )
-               zpsxy = zalg1q(ji-1,jj) * zpsxy
+         DO_2D( 1, 1, jj0, jj0 )
+            !
+            zpsm  = psm (ji,jj,jl) ! optimization
+            zps0  = ps0 (ji,jj,jl)
+            zpsx  = psx (ji,jj,jl)
+            zpsxx = psxx(ji,jj,jl)
+            zpsy  = psy (ji,jj,jl)
+            zpsyy = psyy(ji,jj,jl)
+            zpsxy = psxy(ji,jj,jl)
+            
+            !  Initialize volumes of boxes  (=area if adv_x first called, =psm otherwise)
+            zpsm = MAX( pcrh * e1e2t(ji,jj) + ( 1.0 - pcrh ) * zpsm , epsi20 )
+            !
+            zslpmax = MAX( 0._wp, zps0 )
+            zs1max  = 1.5 * zslpmax
+            zs1new  = MIN( zs1max, MAX( -zs1max, zpsx ) )
+            zs2new  = MIN( 2.0 * zslpmax - 0.3334 * ABS( zs1new ), MAX( ABS( zs1new ) - zslpmax, zpsxx ) )
+            rswitch = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tmask(ji,jj,1)   ! Case of empty boxes & Apply mask
+            
+            zps0  = zslpmax
+            zpsx  = zs1new  * rswitch
+            zpsxx = zs2new  * rswitch
+            zpsy  = zpsy    * rswitch
+            zpsyy = zpsyy   * rswitch
+            zpsxy = MIN( zslpmax, MAX( -zslpmax, zpsxy ) ) * rswitch
+            
+            !  Calculate fluxes and moments between boxes i<-->i+1
+            !                                !  Flux from i to i+1 WHEN u GT 0
+            zbet(ji,jj)  =  MAX( 0._wp, SIGN( 1._wp, put(ji,jj) ) )
+            zalf         =  MAX( 0._wp, put(ji,jj) ) * pdt / zpsm
+            zalfq        =  zalf * zalf
+            zalf1        =  1.0 - zalf
+            zalf1q       =  zalf1 * zalf1
+            !
+            zfm (ji,jj)  =  zalf  *   zpsm
+            zf0 (ji,jj)  =  zalf  * ( zps0  + zalf1 * ( zpsx + (zalf1 - zalf) * zpsxx ) )
+            zfx (ji,jj)  =  zalfq * ( zpsx  + 3.0 * zalf1 * zpsxx )
+            zfxx(ji,jj)  =  zalf  *   zpsxx * zalfq
+            zfy (ji,jj)  =  zalf  * ( zpsy  + zalf1 * zpsxy )
+            zfxy(ji,jj)  =  zalfq *   zpsxy
+            zfyy(ji,jj)  =  zalf  *   zpsyy
+            
+            !                                !  Readjust moments remaining in the box.
+            zpsm  =  zpsm  - zfm(ji,jj)
+            zps0  =  zps0  - zf0(ji,jj)
+            zpsx  =  zalf1q * ( zpsx - 3.0 * zalf * zpsxx )
+            zpsxx =  zalf1  * zalf1q * zpsxx
+            zpsy  =  zpsy  - zfy (ji,jj)
+            zpsyy =  zpsyy - zfyy(ji,jj)
+            zpsxy =  zalf1q * zpsxy
+            !
+            psm (ji,jj,jl) = zpsm ! optimization
+            ps0 (ji,jj,jl) = zps0
+            psx (ji,jj,jl) = zpsx
+            psxx(ji,jj,jl) = zpsxx
+            psy (ji,jj,jl) = zpsy
+            psyy(ji,jj,jl) = zpsyy
+            psxy(ji,jj,jl) = zpsxy
+            !
+         END_2D
 
-               !   Put the temporary moments into appropriate neighboring boxes.
-               !                                !   Flux from i to i+1 IF u GT 0.
-               zbt   =       zbet(ji-1,jj)
-               zbt1  = 1.0 - zbet(ji-1,jj)
-               zpsm  = zbt * ( zpsm + zfm(ji-1,jj) ) + zbt1 * zpsm
-               zalf  = zbt * zfm(ji-1,jj) / zpsm
-               zalf1 = 1.0 - zalf
-               ztemp = zalf * zps0 - zalf1 * zf0(ji-1,jj)
-               !
-               zps0  =  zbt  * ( zps0 + zf0(ji-1,jj) ) + zbt1 * zps0
-               zpsx  =  zbt  * ( zalf * zfx(ji-1,jj) + zalf1 * zpsx + 3.0 * ztemp ) + zbt1 * zpsx
-               zpsxx =  zbt  * ( zalf * zalf * zfxx(ji-1,jj) + zalf1 * zalf1 * zpsxx                            &
-                  &            + 5.0 * ( zalf * zalf1 * ( zpsx  - zfx(ji-1,jj) ) - ( zalf1 - zalf ) * ztemp ) ) &
-                  &            + zbt1 * zpsxx
-               zpsxy =  zbt  * ( zalf * zfxy(ji-1,jj) + zalf1 * zpsxy            &
-                  &            + 3.0 * (- zalf1*zfy(ji-1,jj)  + zalf * zpsy ) )  &
-                  &            + zbt1 * zpsxy
-               zpsy  =  zbt  * ( zpsy  + zfy (ji-1,jj) ) + zbt1 * zpsy
-               zpsyy =  zbt  * ( zpsyy + zfyy(ji-1,jj) ) + zbt1 * zpsyy
+         DO_2D( 1, 0, jj0, jj0 )
+            !                                !  Flux from i+1 to i when u LT 0.
+            zalf          = MAX( 0._wp, -put(ji,jj) ) * pdt / psm(ji+1,jj,jl)
+            zalg  (ji,jj) = zalf
+            zalfq         = zalf * zalf
+            zalf1         = 1.0 - zalf
+            zalg1 (ji,jj) = zalf1
+            zalf1q        = zalf1 * zalf1
+            zalg1q(ji,jj) = zalf1q
+            !
+            zfm   (ji,jj) = zfm (ji,jj) + zalf  *    psm (ji+1,jj,jl)
+            zf0   (ji,jj) = zf0 (ji,jj) + zalf  * (  ps0 (ji+1,jj,jl) &
+               &                                   - zalf1 * ( psx(ji+1,jj,jl) - (zalf1 - zalf ) * psxx(ji+1,jj,jl) ) )
+            zfx   (ji,jj) = zfx (ji,jj) + zalfq * (  psx (ji+1,jj,jl) - 3.0 * zalf1 * psxx(ji+1,jj,jl) )
+            zfxx  (ji,jj) = zfxx(ji,jj) + zalf  * (  psxx(ji+1,jj,jl) * zalfq )
+            zfy   (ji,jj) = zfy (ji,jj) + zalf  * (  psy (ji+1,jj,jl) - zalf1 * psxy(ji+1,jj,jl) )
+            zfxy  (ji,jj) = zfxy(ji,jj) + zalfq *    psxy(ji+1,jj,jl)
+            zfyy  (ji,jj) = zfyy(ji,jj) + zalf  *    psyy(ji+1,jj,jl)
+         END_2D
 
-               !                                !  Flux from i+1 to i IF u LT 0.
-               zbt   =       zbet(ji,jj)
-               zbt1  = 1.0 - zbet(ji,jj)
-               zpsm  = zbt * zpsm + zbt1 * ( zpsm + zfm(ji,jj) )
-               zalf  = zbt1 * zfm(ji,jj) / zpsm
-               zalf1 = 1.0 - zalf
-               ztemp = - zalf * zps0 + zalf1 * zf0(ji,jj)
-               !
-               zps0  = zbt * zps0  + zbt1 * ( zps0 + zf0(ji,jj) )
-               zpsx  = zbt * zpsx  + zbt1 * ( zalf * zfx(ji,jj) + zalf1 * zpsx + 3.0 * ztemp )
-               zpsxx = zbt * zpsxx + zbt1 * ( zalf * zalf * zfxx(ji,jj) + zalf1 * zalf1 * zpsxx &
-                  &                         + 5.0 * ( zalf * zalf1 * ( - zpsx + zfx(ji,jj) )    &
-                  &                         + ( zalf1 - zalf ) * ztemp ) )
-               zpsxy = zbt * zpsxy + zbt1 * ( zalf * zfxy(ji,jj) + zalf1 * zpsxy  &
-                  &                         + 3.0 * ( zalf1 * zfy(ji,jj) - zalf * zpsy ) )
-               zpsy  = zbt * zpsy  + zbt1 * ( zpsy  + zfy (ji,jj) )
-               zpsyy = zbt * zpsyy + zbt1 * ( zpsyy + zfyy(ji,jj) )
-               !
-               psm (ji,jj,jl) = zpsm  ! optimization
-               ps0 (ji,jj,jl) = zps0
-               psx (ji,jj,jl) = zpsx
-               psxx(ji,jj,jl) = zpsxx
-               psy (ji,jj,jl) = zpsy
-               psyy(ji,jj,jl) = zpsyy
-               psxy(ji,jj,jl) = zpsxy
-            END DO
+         DO_2D( 0, 0, jj0, jj0 )
             !
-         END DO
+            zpsm  = psm (ji,jj,jl) ! optimization
+            zps0  = ps0 (ji,jj,jl)
+            zpsx  = psx (ji,jj,jl)
+            zpsxx = psxx(ji,jj,jl)
+            zpsy  = psy (ji,jj,jl)
+            zpsyy = psyy(ji,jj,jl)
+            zpsxy = psxy(ji,jj,jl)
+            !                                !  Readjust moments remaining in the box.
+            zbt  =       zbet(ji-1,jj)
+            zbt1 = 1.0 - zbet(ji-1,jj)
+            !
+            zpsm  = zbt  * zpsm  + zbt1 * ( zpsm - zfm(ji-1,jj) )
+            zps0  = zbt  * zps0  + zbt1 * ( zps0 - zf0(ji-1,jj) )
+            zpsx  = zalg1q(ji-1,jj) * ( zpsx + 3.0 * zalg(ji-1,jj) * zpsxx )
+            zpsxx = zalg1 (ji-1,jj) * zalg1q(ji-1,jj) * zpsxx
+            zpsy  = zbt  * zpsy  + zbt1 * ( zpsy  - zfy (ji-1,jj) )
+            zpsyy = zbt  * zpsyy + zbt1 * ( zpsyy - zfyy(ji-1,jj) )
+            zpsxy = zalg1q(ji-1,jj) * zpsxy
+            
+            !   Put the temporary moments into appropriate neighboring boxes.
+            !                                !   Flux from i to i+1 IF u GT 0.
+            zbt   =       zbet(ji-1,jj)
+            zbt1  = 1.0 - zbet(ji-1,jj)
+            zpsm  = zbt1 * zpsm  + zbt  * ( zpsm + zfm(ji-1,jj) )
+            zalf  =                zbt  *          zfm(ji-1,jj) / zpsm
+            zalf1 = 1.0 - zalf
+            ztemp =  zalf * zps0 - zalf1 * zf0(ji-1,jj)
+            !
+            zps0  = zbt1 * zps0  + zbt  * ( zps0 + zf0(ji-1,jj) )
+            zpsx  = zbt1 * zpsx  + zbt  * ( ( zalf * zfx(ji-1,jj) + zalf1 * zpsx ) + 3.0 * ztemp )
+            zpsxx = zbt1 * zpsxx + zbt  * ( ( zalf * zalf * zfxx(ji-1,jj) + zalf1 * zalf1 * zpsxx )               &
+               &                           + 5.0 * ( zalf * zalf1 * ( zpsx  - zfx(ji-1,jj) ) - ( zalf1 - zalf ) * ztemp ) )
+            zpsxy = zbt1 * zpsxy + zbt  * ( ( zalf * zfxy(ji-1,jj) + zalf1 * zpsxy )            &
+               &                           + 3.0 * ( -zalf1 * zfy(ji-1,jj) + zalf * zpsy ) )
+            zpsy  = zbt1 * zpsy  + zbt  * ( zpsy  + zfy (ji-1,jj) )
+            zpsyy = zbt1 * zpsyy + zbt  * ( zpsyy + zfyy(ji-1,jj) )
+            
+            !                                !  Flux from i+1 to i IF u LT 0.
+            zbt   =       zbet(ji,jj)
+            zbt1  = 1.0 - zbet(ji,jj)
+            zpsm  = zbt  * zpsm  + zbt1 * ( zpsm + zfm(ji  ,jj) )
+            zalf  =                zbt1 *           zfm(ji  ,jj) / zpsm
+            zalf1 = 1.0 - zalf
+            ztemp = -zalf * zps0 + zalf1 * zf0(ji  ,jj)
+            !
+            zps0  = zbt  * zps0  + zbt1 * ( zps0 + zf0(ji  ,jj) )
+            zpsx  = zbt  * zpsx  + zbt1 * ( ( zalf * zfx(ji  ,jj) + zalf1 * zpsx ) + 3.0 * ztemp )
+            zpsxx = zbt  * zpsxx + zbt1 * ( ( zalf * zalf * zfxx(ji  ,jj) + zalf1 * zalf1 * zpsxx ) &
+               &                           + 5.0 * ( zalf * zalf1 * ( -zpsx + zfx(ji  ,jj) ) + ( zalf1 - zalf ) * ztemp ) )
+            zpsxy = zbt  * zpsxy + zbt1 * ( ( zalf * zfxy(ji  ,jj) + zalf1 * zpsxy )  &
+               &                           + 3.0 * (  zalf1 * zfy(ji  ,jj) - zalf * zpsy ) )
+            zpsy  = zbt  * zpsy  + zbt1 * ( zpsy  + zfy (ji  ,jj) )
+            zpsyy = zbt  * zpsyy + zbt1 * ( zpsyy + zfyy(ji  ,jj) )
+            !
+            psm (ji,jj,jl) = zpsm  ! optimization
+            ps0 (ji,jj,jl) = zps0
+            psx (ji,jj,jl) = zpsx
+            psxx(ji,jj,jl) = zpsxx
+            psy (ji,jj,jl) = zpsy
+            psyy(ji,jj,jl) = zpsyy
+            psxy(ji,jj,jl) = zpsxy
+            !
+         END_2D
          !
       END DO
       !
@@ -601,14 +596,14 @@ CONTAINS
             zslpmax = MAX( 0._wp, zps0 )
             zs1max  = 1.5 * zslpmax
             zs1new  = MIN( zs1max, MAX( -zs1max, zpsy ) )
-            zs2new  = MIN( ( 2.0 * zslpmax - 0.3334 * ABS( zs1new ) ), MAX( ABS( zs1new )-zslpmax, zpsyy ) )
+            zs2new  = MIN( ( 2.0 * zslpmax - 0.3334 * ABS( zs1new ) ), MAX( ABS( zs1new ) - zslpmax, zpsyy ) )
             rswitch = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tmask(ji,jj,1)   ! Case of empty boxes & Apply mask
             !
             zps0  = zslpmax
-            zpsx  = zpsx  * rswitch
-            zpsxx = zpsxx * rswitch
-            zpsy  = zs1new         * rswitch
-            zpsyy = zs2new         * rswitch
+            zpsx  = zpsx    * rswitch
+            zpsxx = zpsxx   * rswitch
+            zpsy  = zs1new  * rswitch
+            zpsyy = zs2new  * rswitch
             zpsxy = MIN( zslpmax, MAX( -zslpmax, zpsxy ) ) * rswitch
 
             !  Calculate fluxes and moments between boxes j<-->j+1
@@ -619,19 +614,19 @@ CONTAINS
             zalf1        =  1.0 - zalf
             zalf1q       =  zalf1 * zalf1
             !
-            zfm (ji,jj)  =  zalf  * zpsm
-            zf0 (ji,jj)  =  zalf  * ( zps0 + zalf1 * ( zpsy  + (zalf1-zalf) * zpsyy ) )
-            zfy (ji,jj)  =  zalfq *( zpsy + 3.0*zalf1*zpsyy )
-            zfyy(ji,jj)  =  zalf  * zalfq * zpsyy
-            zfx (ji,jj)  =  zalf  * ( zpsx + zalf1 * zpsxy )
-            zfxy(ji,jj)  =  zalfq * zpsxy
-            zfxx(ji,jj)  =  zalf  * zpsxx
+            zfm (ji,jj)  =  zalf  *   zpsm
+            zf0 (ji,jj)  =  zalf  * ( zps0  + zalf1 * ( zpsy + (zalf1 - zalf) * zpsyy ) )
+            zfy (ji,jj)  =  zalfq * ( zpsy  + 3.0 * zalf1 * zpsyy )
+            zfyy(ji,jj)  =  zalf  *   zpsyy * zalfq 
+            zfx (ji,jj)  =  zalf  * ( zpsx  + zalf1 * zpsxy )
+            zfxy(ji,jj)  =  zalfq *   zpsxy
+            zfxx(ji,jj)  =  zalf  *   zpsxx
             !
             !                                !  Readjust moments remaining in the box.
             zpsm   =  zpsm  - zfm(ji,jj)
             zps0   =  zps0  - zf0(ji,jj)
             zpsy   =  zalf1q * ( zpsy -3.0 * zalf * zpsyy )
-            zpsyy  =  zalf1 * zalf1q * zpsyy
+            zpsyy  =  zalf1  * zalf1q * zpsyy
             zpsx   =  zpsx  - zfx(ji,jj)
             zpsxx  =  zpsxx - zfxx(ji,jj)
             zpsxy  =  zalf1q * zpsxy
@@ -659,16 +654,13 @@ CONTAINS
             zf0   (ji,jj) = zf0 (ji,jj) + zalf  * (  ps0 (ji,jj+1,jl) &
                &                                   - zalf1 * (psy(ji,jj+1,jl) - (zalf1 - zalf ) * psyy(ji,jj+1,jl) ) )
             zfy   (ji,jj) = zfy (ji,jj) + zalfq * (  psy (ji,jj+1,jl) - 3.0 * zalf1 * psyy(ji,jj+1,jl) )
-            zfyy  (ji,jj) = zfyy(ji,jj) + zalf  *    psyy(ji,jj+1,jl) * zalfq
+            zfyy  (ji,jj) = zfyy(ji,jj) + zalf  * (  psyy(ji,jj+1,jl) * zalfq )
             zfx   (ji,jj) = zfx (ji,jj) + zalf  * (  psx (ji,jj+1,jl) - zalf1 * psxy(ji,jj+1,jl) )
             zfxy  (ji,jj) = zfxy(ji,jj) + zalfq *    psxy(ji,jj+1,jl)
             zfxx  (ji,jj) = zfxx(ji,jj) + zalf  *    psxx(ji,jj+1,jl)
          END_2D
 
          DO_2D( ji0, ji0, 0, 0 )
-            !                                !  Readjust moments remaining in the box.
-            zbt  =         zbet(ji,jj-1)
-            zbt1 = ( 1.0 - zbet(ji,jj-1) )
             !
             zpsm  = psm (ji,jj,jl) ! optimization
             zps0  = ps0 (ji,jj,jl)
@@ -677,53 +669,52 @@ CONTAINS
             zpsy  = psy (ji,jj,jl)
             zpsyy = psyy(ji,jj,jl)
             zpsxy = psxy(ji,jj,jl)
+            !                                !  Readjust moments remaining in the box.
+            zbt  =         zbet(ji,jj-1)
+            zbt1 = ( 1.0 - zbet(ji,jj-1) )
             !
-            zpsm  = zbt * zpsm + zbt1 * ( zpsm - zfm(ji,jj-1) )
-            zps0  = zbt * zps0 + zbt1 * ( zps0 - zf0(ji,jj-1) )
+            zpsm  = zbt  * zpsm  + zbt1 * ( zpsm - zfm(ji,jj-1) )
+            zps0  = zbt  * zps0  + zbt1 * ( zps0 - zf0(ji,jj-1) )
             zpsy  = zalg1q(ji,jj-1) * ( zpsy + 3.0 * zalg(ji,jj-1) * zpsyy )
             zpsyy = zalg1 (ji,jj-1) * zalg1q(ji,jj-1) * zpsyy
-            zpsx  = zbt * zpsx  + zbt1 * ( zpsx  - zfx (ji,jj-1) )
-            zpsxx = zbt * zpsxx + zbt1 * ( zpsxx - zfxx(ji,jj-1) )
+            zpsx  = zbt  * zpsx  + zbt1 * ( zpsx  - zfx (ji,jj-1) )
+            zpsxx = zbt  * zpsxx + zbt1 * ( zpsxx - zfxx(ji,jj-1) )
             zpsxy = zalg1q(ji,jj-1) * zpsxy
 
             !   Put the temporary moments into appropriate neighboring boxes.
             !                                !   Flux from j to j+1 IF v GT 0.
             zbt   =       zbet(ji,jj-1)
             zbt1  = 1.0 - zbet(ji,jj-1)
-            zpsm  = zbt * ( zpsm + zfm(ji,jj-1) ) + zbt1 * zpsm
-            zalf  = zbt * zfm(ji,jj-1) / zpsm
+            zpsm  = zbt1 * zpsm  + zbt  * ( zpsm + zfm(ji,jj-1) ) 
+            zalf  =                zbt  *          zfm(ji,jj-1) / zpsm
             zalf1 = 1.0 - zalf
-            ztemp = zalf * zps0 - zalf1 * zf0(ji,jj-1)
+            ztemp =  zalf * zps0 - zalf1 * zf0(ji,jj-1)
             !
-            zps0  =   zbt  * ( zps0 + zf0(ji,jj-1) ) + zbt1 * zps0
-            zpsy  =   zbt  * ( zalf * zfy(ji,jj-1) + zalf1 * zpsy + 3.0 * ztemp )  &
-               &             + zbt1 * zpsy
-            zpsyy =   zbt  * ( zalf * zalf * zfyy(ji,jj-1) + zalf1 * zalf1 * zpsyy                           &
-               &             + 5.0 * ( zalf * zalf1 * ( zpsy - zfy(ji,jj-1) ) - ( zalf1 - zalf ) * ztemp ) ) &
-               &             + zbt1 * zpsyy
-            zpsxy =   zbt  * ( zalf * zfxy(ji,jj-1) + zalf1 * zpsxy             &
-               &             + 3.0 * (- zalf1 * zfx(ji,jj-1) + zalf * zpsx ) )  &
-               &             + zbt1 * zpsxy
-            zpsx  =   zbt * ( zpsx  + zfx (ji,jj-1) ) + zbt1 * zpsx
-            zpsxx =   zbt * ( zpsxx + zfxx(ji,jj-1) ) + zbt1 * zpsxx
+            zps0  = zbt1 * zps0  + zbt  * ( zps0 + zf0(ji,jj-1) ) 
+            zpsy  = zbt1 * zpsy  + zbt  * ( ( zalf * zfy(ji,jj-1) + zalf1 * zpsy ) + 3.0 * ztemp )
+            zpsyy = zbt1 * zpsyy + zbt  * ( ( zalf * zalf * zfyy(ji,jj-1) + zalf1 * zalf1 * zpsyy )                       &
+               &                           + 5.0 * ( zalf * zalf1 * ( zpsy - zfy(ji,jj-1) ) - ( zalf1 - zalf ) * ztemp ) ) 
+            zpsxy = zbt1 * zpsxy + zbt  * ( ( zalf * zfxy(ji,jj-1) + zalf1 * zpsxy )             &
+               &                           + 3.0 * ( -zalf1 * zfx(ji,jj-1) + zalf * zpsx ) )
+            zpsx  = zbt1 * zpsx  + zbt  * ( zpsx  + zfx (ji,jj-1) )
+            zpsxx = zbt1 * zpsxx + zbt  * ( zpsxx + zfxx(ji,jj-1) )
 
             !                                !  Flux from j+1 to j IF v LT 0.
             zbt   =       zbet(ji,jj)
             zbt1  = 1.0 - zbet(ji,jj)
-            zpsm  = zbt * zpsm + zbt1 * ( zpsm + zfm(ji,jj) )
-            zalf  = zbt1 * zfm(ji,jj) / zpsm
+            zpsm  = zbt  * zpsm  + zbt1 * ( zpsm + zfm(ji,jj) )
+            zalf  =                zbt1 *          zfm(ji,jj) / zpsm
             zalf1 = 1.0 - zalf
-            ztemp = - zalf * zps0 + zalf1 * zf0(ji,jj)
+            ztemp = -zalf * zps0 + zalf1 * zf0(ji,jj)
             !
-            zps0  = zbt * zps0  + zbt1 * (  zps0 + zf0(ji,jj) )
-            zpsy  = zbt * zpsy  + zbt1 * (  zalf * zfy(ji,jj) + zalf1 * zpsy + 3.0 * ztemp )
-            zpsyy = zbt * zpsyy + zbt1 * (  zalf * zalf * zfyy(ji,jj) + zalf1 * zalf1 * zpsyy &
-               &                         + 5.0 * ( zalf * zalf1 * ( - zpsy + zfy(ji,jj) )     &
-               &                         + ( zalf1 - zalf ) * ztemp ) )
-            zpsxy = zbt * zpsxy + zbt1 * (  zalf * zfxy(ji,jj) + zalf1 * zpsxy  &
-               &                         + 3.0 * ( zalf1 * zfx(ji,jj) - zalf * zpsx ) )
-            zpsx  = zbt * zpsx  + zbt1 * ( zpsx  + zfx (ji,jj) )
-            zpsxx = zbt * zpsxx + zbt1 * ( zpsxx + zfxx(ji,jj) )
+            zps0  = zbt  * zps0  + zbt1 * ( zps0 + zf0(ji,jj  ) )
+            zpsy  = zbt  * zpsy  + zbt1 * ( ( zalf * zfy(ji,jj  ) + zalf1 * zpsy ) + 3.0 * ztemp )
+            zpsyy = zbt  * zpsyy + zbt1 * ( ( zalf * zalf * zfyy(ji,jj  ) + zalf1 * zalf1 * zpsyy ) &
+               &                           + 5.0 * ( zalf * zalf1 * ( - zpsy + zfy(ji,jj  ) ) + ( zalf1 - zalf ) * ztemp ) )
+            zpsxy = zbt  * zpsxy + zbt1 * ( ( zalf * zfxy(ji,jj  ) + zalf1 * zpsxy ) &
+               &                           + 3.0 * (  zalf1 * zfx(ji,jj  ) - zalf * zpsx ) )
+            zpsx  = zbt  * zpsx  + zbt1 * ( zpsx  + zfx (ji,jj  ) )
+            zpsxx = zbt  * zpsxx + zbt1 * ( zpsxx + zfxx(ji,jj  ) )
             !
             psm (ji,jj,jl) = zpsm ! optimization
             ps0 (ji,jj,jl) = zps0
diff --git a/src/ICE/icedyn_adv_umx.F90 b/src/ICE/icedyn_adv_umx.F90
index d46b056b8fb94c4e8dbaaa5530e81e4390d050d8..f15c2349f2a5f7fa8df0ab4d6493a3f8b2ffc86a 100644
--- a/src/ICE/icedyn_adv_umx.F90
+++ b/src/ICE/icedyn_adv_umx.F90
@@ -375,7 +375,8 @@ CONTAINS
          zati2(:,:) = SUM( pa_i(:,:,:), dim=3 )
          DO_2D( 0, 0, 0, 0 )
             pato_i(ji,jj) = pato_i(ji,jj) - ( zati2(ji,jj) - zati1(ji,jj) ) &
-               &                          - ( zudy(ji,jj) - zudy(ji-1,jj) + zvdx(ji,jj) - zvdx(ji,jj-1) ) * r1_e1e2t(ji,jj) * zdt
+               &                          - (   ( zudy(ji,jj) - zudy(ji-1,jj) ) &   ! ad () for NP repro
+               &                              + ( zvdx(ji,jj) - zvdx(ji,jj-1) )   ) * r1_e1e2t(ji,jj) * zdt
          END_2D
          CALL lbc_lnk( 'icedyn_adv_umx', pato_i, 'T',  1._wp )
          !
@@ -516,7 +517,8 @@ CONTAINS
          ! thus we calculate the upstream solution and apply a limiter again
          DO jl = 1, jpl
             DO_2D( 0, 0, 0, 0 )
-               ztra = - ( zfu_ups(ji,jj,jl) - zfu_ups(ji-1,jj,jl) + zfv_ups(ji,jj,jl) - zfv_ups(ji,jj-1,jl) )
+               ztra = - (  ( zfu_ups(ji,jj,jl) - zfu_ups(ji-1,jj,jl) ) &   ! add () for NP repro
+                  &      + ( zfv_ups(ji,jj,jl) - zfv_ups(ji,jj-1,jl) ) )
                !
                zt_ups(ji,jj,jl) = ( ptc(ji,jj,jl) + ztra * r1_e1e2t(ji,jj) * pdt ) * tmask(ji,jj,1)
             END_2D
@@ -551,7 +553,8 @@ CONTAINS
       ! ---------------------------------
       DO jl = 1, jpl
          DO_2D( 0, 0, 0, 0 )
-            ztra = - ( zfu_ho(ji,jj,jl) - zfu_ho(ji-1,jj,jl) + zfv_ho(ji,jj,jl) - zfv_ho(ji,jj-1,jl) )
+            ztra = - (  ( zfu_ho(ji,jj,jl) - zfu_ho(ji-1,jj,jl) ) &   ! add () for NP repro
+               &      + ( zfv_ho(ji,jj,jl) - zfv_ho(ji,jj-1,jl) ) )
             !
             ptc(ji,jj,jl) = ( ptc(ji,jj,jl) + ztra * r1_e1e2t(ji,jj) * pdt ) * tmask(ji,jj,1)
          END_2D
@@ -643,10 +646,10 @@ CONTAINS
       !
       DO jl = 1, jpl                    !-- after tracer with upstream scheme
          DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 )
-            ztra = - (   pfu_ups(ji,jj,jl) - pfu_ups(ji-1,jj  ,jl)   &
-               &       + pfv_ups(ji,jj,jl) - pfv_ups(ji  ,jj-1,jl) ) &
-               &   + (   pu     (ji,jj   ) - pu     (ji-1,jj     )   &
-               &       + pv     (ji,jj   ) - pv     (ji  ,jj-1   ) ) * pt(ji,jj,jl) * (1.-pamsk)
+            ztra = - (   ( pfu_ups(ji,jj,jl) - pfu_ups(ji-1,jj  ,jl) )   &   ! add () for NP repro
+               &       + ( pfv_ups(ji,jj,jl) - pfv_ups(ji  ,jj-1,jl) ) ) &
+               &   + (   ( pu     (ji,jj   ) - pu     (ji-1,jj     ) )   &
+               &       + ( pv     (ji,jj   ) - pv     (ji  ,jj-1   ) ) ) * pt(ji,jj,jl) * (1.-pamsk)
             !
             pt_ups(ji,jj,jl) = ( pt(ji,jj,jl) + ztra * pdt * r1_e1e2t(ji,jj) ) * tmask(ji,jj,1)
          END_2D
@@ -910,7 +913,7 @@ CONTAINS
          !
          DO jl = 1, jpl
             DO_2D( 1, 0, kloop, kloop )
-               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (                                pt(ji+1,jj,jl) + pt(ji,jj,jl)   &
+               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (                              ( pt(ji+1,jj,jl) + pt(ji,jj,jl) ) &
                   &                                         - SIGN( 1._wp, pu(ji,jj) ) * ( pt(ji+1,jj,jl) - pt(ji,jj,jl) ) )
             END_2D
          END DO
@@ -920,7 +923,7 @@ CONTAINS
          DO jl = 1, jpl
             DO_2D( 1, 0, kloop, kloop )
                zcu  = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj)
-               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (                                pt(ji+1,jj,jl) + pt(ji,jj,jl)   &
+               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (                              ( pt(ji+1,jj,jl) + pt(ji,jj,jl) )  &
                   &                                                            - zcu   * ( pt(ji+1,jj,jl) - pt(ji,jj,jl) ) )
             END_2D
          END DO
@@ -932,9 +935,9 @@ CONTAINS
                zcu  = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj)
                zdx2 = e1u(ji,jj) * e1u(ji,jj)
 !!rachid          zdx2 = e1u(ji,jj) * e1t(ji,jj)
-               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (         (                      pt  (ji+1,jj,jl) + pt  (ji,jj,jl)     &
+               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (         (                    ( pt  (ji+1,jj,jl) + pt  (ji,jj,jl) )   &
                   &                                                            - zcu   * ( pt  (ji+1,jj,jl) - pt  (ji,jj,jl) ) ) &
-                  &        + r1_6 * zdx2 * ( zcu*zcu - 1._wp ) *    (                      ztu2(ji+1,jj,jl) + ztu2(ji,jj,jl)     &
+                  &        + r1_6 * zdx2 * ( zcu*zcu - 1._wp ) *    (                    ( ztu2(ji+1,jj,jl) + ztu2(ji,jj,jl) )   &
                   &                                               - SIGN( 1._wp, zcu ) * ( ztu2(ji+1,jj,jl) - ztu2(ji,jj,jl) ) ) )
             END_2D
          END DO
@@ -946,9 +949,9 @@ CONTAINS
                zcu  = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj)
                zdx2 = e1u(ji,jj) * e1u(ji,jj)
 !!rachid          zdx2 = e1u(ji,jj) * e1t(ji,jj)
-               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (         (                      pt  (ji+1,jj,jl) + pt  (ji,jj,jl)     &
+               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (         (                    ( pt  (ji+1,jj,jl) + pt  (ji,jj,jl) )   &
                   &                                                            - zcu   * ( pt  (ji+1,jj,jl) - pt  (ji,jj,jl) ) ) &
-                  &        + r1_6 * zdx2 * ( zcu*zcu - 1._wp ) *    (                      ztu2(ji+1,jj,jl) + ztu2(ji,jj,jl)     &
+                  &        + r1_6 * zdx2 * ( zcu*zcu - 1._wp ) *    (                    ( ztu2(ji+1,jj,jl) + ztu2(ji,jj,jl) )   &
                   &                                                   - 0.5_wp * zcu   * ( ztu2(ji+1,jj,jl) - ztu2(ji,jj,jl) ) ) )
             END_2D
          END DO
@@ -963,11 +966,11 @@ CONTAINS
                zdx2 = e1u(ji,jj) * e1u(ji,jj)
 !!rachid          zdx2 = e1u(ji,jj) * e1t(ji,jj)
                zdx4 = zdx2 * zdx2
-               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (        (                       pt  (ji+1,jj,jl) + pt  (ji,jj,jl)     &
+               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (        (                     ( pt  (ji+1,jj,jl) + pt  (ji,jj,jl) )   &
                   &                                                            - zcu   * ( pt  (ji+1,jj,jl) - pt  (ji,jj,jl) ) ) &
-                  &        + r1_6   * zdx2 * ( zcu*zcu - 1._wp ) * (                       ztu2(ji+1,jj,jl) + ztu2(ji,jj,jl)     &
+                  &        + r1_6   * zdx2 * ( zcu*zcu - 1._wp ) * (                     ( ztu2(ji+1,jj,jl) + ztu2(ji,jj,jl) )   &
                   &                                                   - 0.5_wp * zcu   * ( ztu2(ji+1,jj,jl) - ztu2(ji,jj,jl) ) ) &
-                  &        + r1_120 * zdx4 * ( zcu*zcu - 1._wp ) * ( zcu*zcu - 4._wp ) * ( ztu4(ji+1,jj,jl) + ztu4(ji,jj,jl)     &
+                  &        + r1_120 * zdx4 * ( zcu*zcu - 1._wp ) * ( zcu*zcu - 4._wp ) * ((ztu4(ji+1,jj,jl) + ztu4(ji,jj,jl) )   &
                   &                                               - SIGN( 1._wp, zcu ) * ( ztu4(ji+1,jj,jl) - ztu4(ji,jj,jl) ) ) )
             END_2D
          END DO
@@ -981,7 +984,7 @@ CONTAINS
          DO jl = 1, jpl
             DO_2D( 1, 0, kloop, kloop )
                IF( pt_u(ji,jj,jl) < 0._wp .OR. ( imsk_small(ji,jj,jl) == 0 .AND. pamsk == 0. ) ) THEN
-                  pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (                                pt(ji+1,jj,jl) + pt(ji,jj,jl)   &
+                  pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (                              ( pt(ji+1,jj,jl) + pt(ji,jj,jl) ) &
                      &                                         - SIGN( 1._wp, pu(ji,jj) ) * ( pt(ji+1,jj,jl) - pt(ji,jj,jl) ) )
                ENDIF
             END_2D
@@ -1048,7 +1051,7 @@ CONTAINS
       CASE( 1 )                                                !==  1st order central TIM  ==! (Eq. 21)
          DO jl = 1, jpl
             DO_2D( kloop, kloop, 1, 0 )
-               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (                                pt(ji,jj+1,jl) + pt(ji,jj,jl)   &
+               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (                              ( pt(ji,jj+1,jl) + pt(ji,jj,jl) ) &
                   &                                         - SIGN( 1._wp, pv(ji,jj) ) * ( pt(ji,jj+1,jl) - pt(ji,jj,jl) ) )
             END_2D
          END DO
@@ -1057,7 +1060,7 @@ CONTAINS
          DO jl = 1, jpl
             DO_2D( kloop, kloop, 1, 0 )
                zcv  = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj)
-               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (                                pt(ji,jj+1,jl) + pt(ji,jj,jl)   &
+               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (                              ( pt(ji,jj+1,jl) + pt(ji,jj,jl) ) &
                   &                                                            - zcv *   ( pt(ji,jj+1,jl) - pt(ji,jj,jl) ) )
             END_2D
          END DO
@@ -1068,9 +1071,9 @@ CONTAINS
                zcv  = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj)
                zdy2 = e2v(ji,jj) * e2v(ji,jj)
 !!rachid          zdy2 = e2v(ji,jj) * e2t(ji,jj)
-               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (      (                         pt  (ji,jj+1,jl) + pt  (ji,jj,jl)     &
+               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (      (                       ( pt  (ji,jj+1,jl) + pt  (ji,jj,jl) )   &
                   &                                                            - zcv   * ( pt  (ji,jj+1,jl) - pt  (ji,jj,jl) ) ) &
-                  &        + r1_6 * zdy2 * ( zcv*zcv - 1._wp ) * (                         ztv2(ji,jj+1,jl) + ztv2(ji,jj,jl)     &
+                  &        + r1_6 * zdy2 * ( zcv*zcv - 1._wp ) * (                       ( ztv2(ji,jj+1,jl) + ztv2(ji,jj,jl) )   &
                   &                                               - SIGN( 1._wp, zcv ) * ( ztv2(ji,jj+1,jl) - ztv2(ji,jj,jl) ) ) )
             END_2D
          END DO
@@ -1081,9 +1084,9 @@ CONTAINS
                zcv  = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj)
                zdy2 = e2v(ji,jj) * e2v(ji,jj)
 !!rachid          zdy2 = e2v(ji,jj) * e2t(ji,jj)
-               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (      (                         pt  (ji,jj+1,jl) + pt  (ji,jj,jl)     &
+               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (      (                       ( pt  (ji,jj+1,jl) + pt  (ji,jj,jl) )   &
                   &                                                            - zcv   * ( pt  (ji,jj+1,jl) - pt  (ji,jj,jl) ) ) &
-                  &        + r1_6 * zdy2 * ( zcv*zcv - 1._wp ) * (                         ztv2(ji,jj+1,jl) + ztv2(ji,jj,jl)     &
+                  &        + r1_6 * zdy2 * ( zcv*zcv - 1._wp ) * (                       ( ztv2(ji,jj+1,jl) + ztv2(ji,jj,jl) )   &
                   &                                                   - 0.5_wp * zcv   * ( ztv2(ji,jj+1,jl) - ztv2(ji,jj,jl) ) ) )
             END_2D
          END DO
@@ -1098,11 +1101,11 @@ CONTAINS
                zdy2 = e2v(ji,jj) * e2v(ji,jj)
 !!rachid          zdy2 = e2v(ji,jj) * e2t(ji,jj)
                zdy4 = zdy2 * zdy2
-               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (                              ( pt  (ji,jj+1,jl) + pt  (ji,jj,jl)     &
+               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (        (                     ( pt  (ji,jj+1,jl) + pt  (ji,jj,jl) )   &
                   &                                                            - zcv   * ( pt  (ji,jj+1,jl) - pt  (ji,jj,jl) ) ) &
-                  &        + r1_6   * zdy2 * ( zcv*zcv - 1._wp ) * (                       ztv2(ji,jj+1,jl) + ztv2(ji,jj,jl)     &
+                  &        + r1_6   * zdy2 * ( zcv*zcv - 1._wp ) * (                     ( ztv2(ji,jj+1,jl) + ztv2(ji,jj,jl) )   &
                   &                                                   - 0.5_wp * zcv   * ( ztv2(ji,jj+1,jl) - ztv2(ji,jj,jl) ) ) &
-                  &        + r1_120 * zdy4 * ( zcv*zcv - 1._wp ) * ( zcv*zcv - 4._wp ) * ( ztv4(ji,jj+1,jl) + ztv4(ji,jj,jl)     &
+                  &        + r1_120 * zdy4 * ( zcv*zcv - 1._wp ) * ( zcv*zcv - 4._wp ) * ((ztv4(ji,jj+1,jl) + ztv4(ji,jj,jl) )   &
                   &                                               - SIGN( 1._wp, zcv ) * ( ztv4(ji,jj+1,jl) - ztv4(ji,jj,jl) ) ) )
             END_2D
          END DO
@@ -1242,10 +1245,10 @@ CONTAINS
             zneg = MAX( 0._wp, pfu_ho(ji  ,jj  ,jl) ) - MIN( 0._wp, pfu_ho(ji-1,jj  ,jl) ) &
                & + MAX( 0._wp, pfv_ho(ji  ,jj  ,jl) ) - MIN( 0._wp, pfv_ho(ji  ,jj-1,jl) )
             !
-            zpos = zpos - (pt(ji,jj,jl) * MIN( 0., pu(ji,jj) - pu(ji-1,jj) ) + pt(ji,jj,jl) * MIN( 0., pv(ji,jj) - pv(ji,jj-1) ) &
-               &          ) * ( 1. - pamsk )
-            zneg = zneg + (pt(ji,jj,jl) * MAX( 0., pu(ji,jj) - pu(ji-1,jj) ) + pt(ji,jj,jl) * MAX( 0., pv(ji,jj) - pv(ji,jj-1) ) &
-               &          ) * ( 1. - pamsk )
+            zpos = zpos - (  pt(ji,jj,jl) * MIN( 0., pu(ji,jj) - pu(ji-1,jj) )   &
+               &           + pt(ji,jj,jl) * MIN( 0., pv(ji,jj) - pv(ji,jj-1) ) ) * ( 1. - pamsk )
+            zneg = zneg + (  pt(ji,jj,jl) * MAX( 0., pu(ji,jj) - pu(ji-1,jj) )   &
+               &           + pt(ji,jj,jl) * MAX( 0., pv(ji,jj) - pv(ji,jj-1) ) ) * ( 1. - pamsk )
             !
             !                                  ! up & down beta terms
             ! clem: zbetup and zbetdo must be 0 for zpos>1.e-10 & zneg>1.e-10 (do not put 0 instead of 1.e-10 !!!)
diff --git a/src/ICE/icedyn_rdgrft.F90 b/src/ICE/icedyn_rdgrft.F90
index e083da9c5dab0cb933b894ee34a245e80046c911..214d6234996fd2ad8391cbbd4f8b70e86a0dbe61 100644
--- a/src/ICE/icedyn_rdgrft.F90
+++ b/src/ICE/icedyn_rdgrft.F90
@@ -960,8 +960,8 @@ CONTAINS
          DO_2D( 0, 0, 0, 0 )
             IF ( SUM( a_i(ji,jj,:) ) > 0._wp ) THEN
                zworka(ji,jj) = ( 4._wp * strength(ji,jj)              &
-                  &                    + strength(ji-1,jj) * tmask(ji-1,jj,1) + strength(ji+1,jj) * tmask(ji+1,jj,1) &
-                  &                    + strength(ji,jj-1) * tmask(ji,jj-1,1) + strength(ji,jj+1) * tmask(ji,jj+1,1) &
+                  &                    + ( ( strength(ji-1,jj) * tmask(ji-1,jj,1) + strength(ji+1,jj) * tmask(ji+1,jj,1) ) &
+                  &                      + ( strength(ji,jj-1) * tmask(ji,jj-1,1) + strength(ji,jj+1) * tmask(ji,jj+1,1) ) ) &
                   &            ) / ( 4._wp + tmask(ji-1,jj,1) + tmask(ji+1,jj,1) + tmask(ji,jj-1,1) + tmask(ji,jj+1,1) )
             ELSE
                zworka(ji,jj) = 0._wp
diff --git a/src/ICE/icedyn_rhg_eap.F90 b/src/ICE/icedyn_rhg_eap.F90
index 55b1392ac6a5e8ffeda9e8c44c516e5b2c009630..e87e879a335e79f09dbc60fe8e5d4d7ab1a4f11a 100644
--- a/src/ICE/icedyn_rhg_eap.F90
+++ b/src/ICE/icedyn_rhg_eap.F90
@@ -306,9 +306,9 @@ CONTAINS
          zmassU = 0.5_wp * ( zm1 * e1e2t(ji,jj) + zm2 * e1e2t(ji+1,jj) ) * r1_e1e2u(ji,jj) * umask(ji,jj,1)
          zmassV = 0.5_wp * ( zm1 * e1e2t(ji,jj) + zm3 * e1e2t(ji,jj+1) ) * r1_e1e2v(ji,jj) * vmask(ji,jj,1)
 
-         ! Ocean currents at U-V points
-         v_oceU(ji,jj)   = 0.25_wp * ( v_oce(ji,jj) + v_oce(ji,jj-1) + v_oce(ji+1,jj) + v_oce(ji+1,jj-1) ) * umask(ji,jj,1)
-         u_oceV(ji,jj)   = 0.25_wp * ( u_oce(ji,jj) + u_oce(ji-1,jj) + u_oce(ji,jj+1) + u_oce(ji-1,jj+1) ) * vmask(ji,jj,1)
+         ! Ocean currents at U-V point, warning: add () for the North Pole reproducibility
+         v_oceU(ji,jj)   = 0.25_wp * ( ( v_oce(ji,jj) + v_oce(ji,jj-1) ) + ( v_oce(ji+1,jj) + v_oce(ji+1,jj-1) ) ) * umask(ji,jj,1)
+         u_oceV(ji,jj)   = 0.25_wp * ( ( u_oce(ji,jj) + u_oce(ji-1,jj) ) + ( u_oce(ji,jj+1) + u_oce(ji-1,jj+1) ) ) * vmask(ji,jj,1)
 
          ! m/dt
          zmU_t(ji,jj)    = zmassU * z1_dtevp
@@ -390,14 +390,14 @@ CONTAINS
 
          DO_2D( 0, 0, 0, 0 )
 
-            ! shear**2 at T points (doc eq. A16)
-            zds2 = ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  &
-               &   + zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  &
+            ! shear**2 at T points (doc eq. A16), warning: add () for the North Pole reproducibility
+            zds2 = ( ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  ) )  &
+               &   + ( zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1) )  &
                &   ) * 0.25_wp * r1_e1e2t(ji,jj)
 
-            ! divergence at T points
-            zdiv  = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
-               &    + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
+            ! divergence at T points, warning: add () for the North Pole reproducibility
+            zdiv  = ( ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) )   &
+               &    + ( e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) )   &
                &    ) * r1_e1e2t(ji,jj)
             zdiv2 = zdiv * zdiv
 
@@ -418,14 +418,14 @@ CONTAINS
 
          DO_2D( 0, 0, 0, 0 )
 
-             ! shear at T points
-            zdsT = ( zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  &
-               &   + zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  &
+             ! shear at T points, warning: add () for the North Pole reproducibility
+            zdsT = ( ( zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * e1e2f(ji-1,jj  ) )  &
+               &   + ( zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * e1e2f(ji-1,jj-1) )  &
                &   ) * 0.25_wp * r1_e1e2t(ji,jj)
 
-           ! divergence at T points (duplication to avoid communications)
-            zdiv  = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
-               &    + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
+           ! divergence at T points (duplication to avoid communications), warning: add () for the North Pole reproducibility
+            zdiv  = ( ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) )   &
+               &    + ( e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) )  &
                &    ) * r1_e1e2t(ji,jj)
 
             ! tension at T points (duplication to avoid communications)
@@ -760,9 +760,9 @@ CONTAINS
 
          zten_i(ji,jj) = zdt
 
-         ! shear**2 at T points (doc eq. A16)
-         zds2 = ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  &
-            &   + zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  &
+         ! shear**2 at T points (doc eq. A16), warning: add () for the North Pole reproducibility
+         zds2 = ( ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  ) )  &
+            &   + ( zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1) )  &
             &   ) * 0.25_wp * r1_e1e2t(ji,jj)
 
          ! maximum shear rate at T points (includes tension, output only)
@@ -771,9 +771,9 @@ CONTAINS
         ! shear at T-points
          zshear(ji,jj)   = SQRT( zds2 )
 
-         ! divergence at T points
-         pdivu_i(ji,jj) = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
-            &             + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
+         ! divergence at T points, warning: add () for the North Pole reproducibility
+         pdivu_i(ji,jj) = ( ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) )   &
+            &             + ( e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) )   &
             &             ) * r1_e1e2t(ji,jj)
 
          ! delta at T points
diff --git a/src/ICE/icedyn_rhg_evp.F90 b/src/ICE/icedyn_rhg_evp.F90
index 49e7753c2ae939a3c6a5a6a9a5ea74665ecdb7bf..136f13d122b5d03a3416906f729bae42f3befb41 100644
--- a/src/ICE/icedyn_rhg_evp.F90
+++ b/src/ICE/icedyn_rhg_evp.F90
@@ -290,7 +290,7 @@ CONTAINS
          zmassV = 0.5_wp * ( zm1 * e1e2t(ji,jj) + zm3 * e1e2t(ji,jj+1) ) * r1_e1e2v(ji,jj) * vmask(ji,jj,1)
 
          ! Ocean currents at U-V points
-         ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility)
+         ! (brackets added to fix the order of floating point operations for the North Pole reproducibility)
          v_oceU(ji,jj)   = 0.25_wp * ( (v_oce(ji,jj) + v_oce(ji,jj-1)) + (v_oce(ji+1,jj) + v_oce(ji+1,jj-1)) ) * umask(ji,jj,1)
          u_oceV(ji,jj)   = 0.25_wp * ( (u_oce(ji,jj) + u_oce(ji-1,jj)) + (u_oce(ji,jj+1) + u_oce(ji-1,jj+1)) ) * vmask(ji,jj,1)
 
@@ -377,13 +377,13 @@ CONTAINS
          DO_2D( 0, 0, 0, 0 )
 
             ! shear**2 at T points (doc eq. A16)
-            zds2 = ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  &
-               &   + zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  &
+            zds2 = ( ( zds(ji,jj  )*zds(ji,jj  )*e1e2f(ji,jj  ) + zds(ji-1,jj  )*zds(ji-1,jj  )*e1e2f(ji-1,jj  ) ) & ! add () for
+               &   + ( zds(ji,jj-1)*zds(ji,jj-1)*e1e2f(ji,jj-1) + zds(ji-1,jj-1)*zds(ji-1,jj-1)*e1e2f(ji-1,jj-1) ) & ! NP repro
                &   ) * 0.25_wp * r1_e1e2t(ji,jj)
 
             ! divergence at T points
-            zdiv  = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
-               &    + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
+            zdiv  = ( ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) )   &   ! add () for
+               &    + ( e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) )   &   ! NP repro
                &    ) * r1_e1e2t(ji,jj)
             zdiv2 = zdiv * zdiv
 
@@ -406,9 +406,8 @@ CONTAINS
          DO_2D( nn_hls-1, nn_hls, nn_hls-1, nn_hls )   ! loop ends at jpi,jpj so that no lbc_lnk are needed for zs1 and zs2
 
             ! divergence at T points (duplication to avoid communications)
-            ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility)
-            zdiv  = ( (e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj))   &
-               &    + (e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1))   &
+            zdiv  = ( ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) )   &   ! add () for
+               &    + ( e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) )   &   ! NP repro
                &    ) * r1_e1e2t(ji,jj)
 
             ! tension at T points (duplication to avoid communications)
@@ -458,8 +457,8 @@ CONTAINS
             ENDIF
 
             ! P/delta at F points
-            ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility)
-            zp_delf = 0.25_wp * ( (zp_delt(ji,jj) + zp_delt(ji+1,jj)) + (zp_delt(ji,jj+1) + zp_delt(ji+1,jj+1)) )
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility)
+            zp_delf = 0.25_wp * ( ( zp_delt(ji,jj) + zp_delt(ji+1,jj) ) + ( zp_delt(ji,jj+1) + zp_delt(ji+1,jj+1) ) )
 
             ! stress at F points (zkt/=0 if landfast)
             zs12(ji,jj)= ( zs12(ji,jj) * zalph2 + zp_delf * ( zds(ji,jj) * z1_ecc2 * (1._wp + zkt) ) * 0.5_wp ) &
@@ -471,24 +470,24 @@ CONTAINS
          ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility)
          DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 )
             !                   !--- U points
-            zfU(ji,jj) = 0.5_wp * ( (( zs1(ji+1,jj) - zs1(ji,jj) ) * e2u(ji,jj)                                             &
-               &                  + ( zs2(ji+1,jj) * e2t(ji+1,jj) * e2t(ji+1,jj) - zs2(ji,jj) * e2t(ji,jj) * e2t(ji,jj)    &
-               &                    ) * r1_e2u(ji,jj))                                                                      &
+            zfU(ji,jj) = 0.5_wp * ( ( ( zs1(ji+1,jj) - zs1(ji,jj) ) * e2u(ji,jj)                                             &
+               &                    + ( zs2(ji+1,jj) * e2t(ji+1,jj) * e2t(ji+1,jj) - zs2(ji,jj) * e2t(ji,jj) * e2t(ji,jj)    &
+               &                      ) * r1_e2u(ji,jj) )                                                                      &
                &                  + ( zs12(ji,jj) * e1f(ji,jj) * e1f(ji,jj) - zs12(ji,jj-1) * e1f(ji,jj-1) * e1f(ji,jj-1)  &
                &                    ) * 2._wp * r1_e1u(ji,jj)                                                              &
                &                  ) * r1_e1e2u(ji,jj)
             !
             !                !--- V points
-            zfV(ji,jj) = 0.5_wp * ( (( zs1(ji,jj+1) - zs1(ji,jj) ) * e1v(ji,jj)                                             &
-               &                  - ( zs2(ji,jj+1) * e1t(ji,jj+1) * e1t(ji,jj+1) - zs2(ji,jj) * e1t(ji,jj) * e1t(ji,jj)    &
-               &                    ) * r1_e1v(ji,jj))                                                                      &
+            zfV(ji,jj) = 0.5_wp * ( ( ( zs1(ji,jj+1) - zs1(ji,jj) ) * e1v(ji,jj)                                             &
+               &                    - ( zs2(ji,jj+1) * e1t(ji,jj+1) * e1t(ji,jj+1) - zs2(ji,jj) * e1t(ji,jj) * e1t(ji,jj)    &
+               &                      ) * r1_e1v(ji,jj) )                                                                      &
                &                  + ( zs12(ji,jj) * e2f(ji,jj) * e2f(ji,jj) - zs12(ji-1,jj) * e2f(ji-1,jj) * e2f(ji-1,jj)  &
                &                    ) * 2._wp * r1_e2v(ji,jj)                                                              &
                &                  ) * r1_e1e2v(ji,jj)
             !
-            !                !--- ice currents at U-V point
-            v_iceU(ji,jj) = 0.25_wp * ( (v_ice(ji,jj) + v_ice(ji,jj-1)) + (v_ice(ji+1,jj) + v_ice(ji+1,jj-1)) ) * umask(ji,jj,1)
-            u_iceV(ji,jj) = 0.25_wp * ( (u_ice(ji,jj) + u_ice(ji-1,jj)) + (u_ice(ji,jj+1) + u_ice(ji-1,jj+1)) ) * vmask(ji,jj,1)
+            !                !--- ice currents at U-V point, warning: add () for NP repro
+            v_iceU(ji,jj) = 0.25_wp * ( ( v_ice(ji,jj) + v_ice(ji,jj-1) ) + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) ) * umask(ji,jj,1)
+            u_iceV(ji,jj) = 0.25_wp * ( ( u_ice(ji,jj) + u_ice(ji-1,jj) ) + ( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) ) * vmask(ji,jj,1)
             !
          END_2D
          !
@@ -755,8 +754,8 @@ CONTAINS
          zten_i(ji,jj) = zdt
 
          ! shear**2 at T points (doc eq. A16)
-         zds2 = ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  &
-            &   + zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  &
+         zds2 = ( ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  ) )  & ! add () 
+            &   + ( zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1) )  & ! NP rep
             &   ) * 0.25_wp * r1_e1e2t(ji,jj)
 
          ! maximum shear rate at T points (includes tension, output only)
@@ -766,8 +765,8 @@ CONTAINS
          zshear(ji,jj)   = SQRT( zds2 ) * zmsk(ji,jj)
 
          ! divergence at T points
-         pdivu_i(ji,jj) = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
-            &             + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
+         pdivu_i(ji,jj) = ( ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) )  & ! add () for NP repro
+            &             + ( e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) )  &
             &             ) * r1_e1e2t(ji,jj) * zmsk(ji,jj)
 
          ! delta at T points
@@ -1127,7 +1126,8 @@ CONTAINS
          ENDIF
          !
          DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 )
-            ztra         = - ( zfu_ups(ji,jj) - zfu_ups(ji-1,jj) + zfv_ups(ji,jj) - zfv_ups(ji,jj-1) )
+            ztra         = - (  ( zfu_ups(ji,jj) - zfu_ups(ji-1,jj) )   & ! add () for NP repro
+               &              + ( zfv_ups(ji,jj) - zfv_ups(ji,jj-1) )  )
             pt(ji,jj,jl) =   ( pt(ji,jj,jl) + ztra * pdt * r1_e1e2t(ji,jj) ) * tmask(ji,jj,1)
          END_2D
       END DO
diff --git a/src/ICE/icedyn_rhg_vp.F90 b/src/ICE/icedyn_rhg_vp.F90
index b2c344993dbf9b471bc971d48c4bcf9301560228..1553424ea429d9093bdefb34aeca86ab0887dddc 100644
--- a/src/ICE/icedyn_rhg_vp.F90
+++ b/src/ICE/icedyn_rhg_vp.F90
@@ -328,7 +328,7 @@ CONTAINS
          zmU_t(ji,jj)    = zmassU_t(ji,jj) * u_ice(ji,jj)
          
          ! Ocean currents at U-V points
-         ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility)
+         ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
          v_oceU(ji,jj)   = 0.25_wp * ( (v_oce(ji,jj) + v_oce(ji,jj-1)) + (v_oce(ji+1,jj) + v_oce(ji+1,jj-1)) ) * umask(ji,jj,1)
          
          ! Wind stress
@@ -368,7 +368,7 @@ CONTAINS
          zmV_t(ji,jj)    = zmassV_t(ji,jj) * v_ice(ji,jj)
          
          ! Ocean currents at U-V points
-         ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility)
+         ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
          u_oceV(ji,jj)   = 0.25_wp * ( (u_oce(ji,jj) + u_oce(ji-1,jj)) + (u_oce(ji,jj+1) + u_oce(ji-1,jj+1)) ) * vmask(ji,jj,1)
          
          ! Wind stress
@@ -436,14 +436,15 @@ CONTAINS
             ! loop to jpi,jpj to avoid making a communication for zs1,zs2,zs12
 
             ! shear**2 at T points (doc eq. A16)
-            zds2  = ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  &
-               &    + zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  &
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
+            zds2  = ( ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  ) )  &
+               &    + ( zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1) )  &
                &    ) * 0.25_wp * r1_e1e2t(ji,jj)
               
             ! divergence at T points
-            ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility)
-            zdiv  = ( (e2u(ji,jj) * zu_c(ji,jj) - e2u(ji-1,jj) * zu_c(ji-1,jj))   &
-               &    + (e1v(ji,jj) * zv_c(ji,jj) - e1v(ji,jj-1) * zv_c(ji,jj-1))   &
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
+            zdiv  = ( ( e2u(ji,jj) * zu_c(ji,jj) - e2u(ji-1,jj) * zu_c(ji-1,jj) )   &
+               &    + ( e1v(ji,jj) * zv_c(ji,jj) - e1v(ji,jj-1) * zv_c(ji,jj-1) )   &
                &    ) * r1_e1e2t(ji,jj)
             zdiv2 = zdiv * zdiv
                
@@ -474,7 +475,7 @@ CONTAINS
          DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 )! 1-> jpj-1; 1->jpi-1
          
             ! P/delta* at F points
-            ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility)
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
             zvisc_f = 0.25_wp * ( (zvisc_t(ji,jj) + zvisc_t(ji+1,jj)) + (zvisc_t(ji,jj+1) + zvisc_t(ji+1,jj+1)) )
             
             ! Temporary zef factor at F-point
@@ -489,7 +490,7 @@ CONTAINS
          DO_2D( nn_hls, nn_hls-1, nn_hls-1, nn_hls )
          
             !--- ice u-velocity @V points, v-velocity @U points (for non-linear drag computation)
-            ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility)
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
             zv_cU            = 0.25_wp * ( (zv_c(ji,jj) + zv_c(ji,jj-1)) + (zv_c(ji+1,jj) + zv_c(ji+1,jj-1)) ) * umask(ji,jj,1)
                 
             !--- non-linear drag coefficients (need to be updated at each outer loop, see Lemieux and Tremblay JGR09, p.3, beginning of Section 3)
@@ -509,7 +510,7 @@ CONTAINS
          DO_2D( nn_hls-1, nn_hls, nn_hls, nn_hls-1 )
          
             !--- ice u-velocity @V points, v-velocity @U points (for non-linear drag computation)
-            ! (brackets added to fix the order of floating point operations for halo 1 - halo 2 compatibility)
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
             zu_cV            = 0.25_wp * ( (zu_c(ji,jj) + zu_c(ji-1,jj)) + (zu_c(ji,jj+1) + zu_c(ji-1,jj+1)) ) * vmask(ji,jj,1)
                 
             !--- non-linear drag coefficients (need to be updated at each outer loop, see Lemieux and Tremblay JGR09, p.3, beginning of Section 3)
@@ -1066,8 +1067,9 @@ CONTAINS
       DO_2D( 0, 0, 0, 0 ) ! 2->jpj-1; 2->jpi-1
             
             ! shear**2 at T points (doc eq. A16)
-            zds2 = ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  )  &
-               &   + zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1)  &
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
+            zds2 = ( ( zds(ji,jj  ) * zds(ji,jj  ) * e1e2f(ji,jj  ) + zds(ji-1,jj  ) * zds(ji-1,jj  ) * e1e2f(ji-1,jj  ) )  &
+               &   + ( zds(ji,jj-1) * zds(ji,jj-1) * e1e2f(ji,jj-1) + zds(ji-1,jj-1) * zds(ji-1,jj-1) * e1e2f(ji-1,jj-1) )  &
                &   ) * 0.25_wp * r1_e1e2t(ji,jj)
             
             ! tension**2 at T points
@@ -1085,8 +1087,9 @@ CONTAINS
             zshear(ji,jj)   = SQRT( zds2 ) * zmsk(ji,jj)
 
             ! divergence at T points
-            pdivu_i(ji,jj) = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj)   &
-               &             + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1)   &
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
+            pdivu_i(ji,jj) = ( ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) )  &
+               &             + ( e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) )  &
                &             ) * r1_e1e2t(ji,jj) * zmsk(ji,jj)
             
             ! delta at T points
@@ -1157,22 +1160,22 @@ CONTAINS
          !--- Recalculate oceanic stress at last inner iteration
          DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) ! 2->jpj-1; 2->jpi-1
 
-                !--- ice u-velocity @V points, v-velocity @U points (for non-linear drag computation)
-                zu_cV            = 0.25_wp * ( u_ice(ji,jj) + u_ice(ji-1,jj) + u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * vmask(ji,jj,1)
-                zv_cU            = 0.25_wp * ( v_ice(ji,jj) + v_ice(ji,jj-1) + v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * umask(ji,jj,1)
-                
-                !--- non-linear drag coefficients (need to be updated at each outer loop, see Lemieux and Tremblay JGR09, p.3, beginning of Section 3)
-                zCwU(ji,jj)          = za_iU(ji,jj) * zrhoco * SQRT( ( u_ice(ji,jj) - u_oce (ji,jj) ) * ( u_ice(ji,jj) - u_oce (ji,jj) )  &
-                  &                                                + ( zv_cU - v_oceU(ji,jj) ) * ( zv_cU - v_oceU(ji,jj) ) )
-                zCwV(ji,jj)          = za_iV(ji,jj) * zrhoco * SQRT( ( v_ice(ji,jj) - v_oce (ji,jj) ) * ( v_ice(ji,jj) - v_oce (ji,jj) )  &
-                  &                                                + ( zu_cV - u_oceV(ji,jj) ) * ( zu_cV - u_oceV(ji,jj) ) )
-                 
-                !--- Ocean-ice stress
-                ztaux_oi(ji,jj) = zCwU(ji,jj) * ( u_oce(ji,jj) - u_ice(ji,jj) )
-                ztauy_oi(ji,jj) = zCwV(ji,jj) * ( v_oce(ji,jj) - v_ice(ji,jj) )
-                
+            !--- ice u-velocity @V points, v-velocity @U points (for non-linear drag computation)
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
+            zu_cV = 0.25_wp * ( ( u_ice(ji,jj) + u_ice(ji-1,jj) ) + ( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) ) * vmask(ji,jj,1)
+            zv_cU = 0.25_wp * ( ( v_ice(ji,jj) + v_ice(ji,jj-1) ) + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) ) * umask(ji,jj,1)
+            
+            !--- non-linear drag coefficients (need to be updated at each outer loop, see Lemieux and Tremblay JGR09, p.3, beginning of Section 3)
+            zCwU(ji,jj) = za_iU(ji,jj) * zrhoco * SQRT( ( u_ice(ji,jj) - u_oce (ji,jj) ) * ( u_ice(ji,jj) - u_oce (ji,jj) )  &
+               &                                             + ( zv_cU - v_oceU(ji,jj) ) * ( zv_cU - v_oceU(ji,jj) ) )
+            zCwV(ji,jj) = za_iV(ji,jj) * zrhoco * SQRT( ( v_ice(ji,jj) - v_oce (ji,jj) ) * ( v_ice(ji,jj) - v_oce (ji,jj) )  &
+               &                                             + ( zu_cV - u_oceV(ji,jj) ) * ( zu_cV - u_oceV(ji,jj) ) )
+            
+            !--- Ocean-ice stress
+            ztaux_oi(ji,jj) = zCwU(ji,jj) * ( u_oce(ji,jj) - u_ice(ji,jj) )
+            ztauy_oi(ji,jj) = zCwV(ji,jj) * ( v_oce(ji,jj) - v_ice(ji,jj) )
+            
          END_2D
-         
          !
          CALL lbc_lnk( 'icedyn_rhg_vp', ztaux_oi, 'U', -1., ztauy_oi, 'V', -1., ztaux_ai, 'U', -1., ztauy_ai, 'V', -1. ) !, &
 !            &                          ztaux_bi, 'U', -1., ztauy_bi, 'V', -1. )
@@ -1567,17 +1570,18 @@ CONTAINS
          
          DO_2D( 0, 0, 0, 0 ) !clem check bounds
 
-               zu_res(ji,jj)  = ( prhsu(ji,jj) + pDU(ji,jj) * pu(ji,jj-1) + pEU(ji,jj) * pu(ji,jj+1)               &
-                  &             - pAU(ji,jj) * pu(ji-1,jj) - pBU(ji,jj) * pu(ji,jj) - pCU(ji,jj) * pu(ji+1,jj) )
-               zv_res(ji,jj)  = ( prhsv(ji,jj) + pDV(ji,jj) * pv(ji-1,jj) + pEV(ji,jj) * pv(ji+1,jj)               &
-                  &             - pAV(ji,jj) * pv(ji,jj-1) - pBV(ji,jj) * pv(ji,jj) - pCV(ji,jj) * pv(ji,jj+1) )
-
-!              zu_res(ji,jj)  = pFU(ji,jj) - pAU(ji,jj) * pu(ji-1,jj) - pBU(ji,jj) * pu(ji,jj) - pCU(ji,jj) * pu(ji+1,jj)
-!              zv_res(ji,jj)  = pFV(ji,jj) - pAV(ji,jj) * pv(ji,jj-1) - pBV(ji,jj) * pv(ji,jj) - pCV(ji,jj) * pv(ji,jj+1)
-   
-               zu_res(ji,jj)  = SQRT( zu_res(ji,jj) * zu_res(ji,jj) ) * umask(ji,jj,1) * pat_iu(ji,jj) * e1e2u(ji,jj) * z1_pglob_area
-               zv_res(ji,jj)  = SQRT( zv_res(ji,jj) * zv_res(ji,jj) ) * vmask(ji,jj,1) * pat_iv(ji,jj) * e1e2v(ji,jj) * z1_pglob_area
-   
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
+            zu_res(ji,jj)  = prhsu(ji,jj)             + ( pDU(ji,jj) * pu(ji  ,jj-1) + pEU(ji,jj) * pu(ji  ,jj+1) )   &
+               &             - pBU(ji,jj) * pu(ji,jj) - ( pAU(ji,jj) * pu(ji-1,jj  ) + pCU(ji,jj) * pu(ji+1,jj  ) )
+            zv_res(ji,jj)  = prhsv(ji,jj)             + ( pDV(ji,jj) * pv(ji-1,jj  ) + pEV(ji,jj) * pv(ji+1,jj  ) )   &
+               &             - pBV(ji,jj) * pv(ji,jj) - ( pAV(ji,jj) * pv(ji  ,jj-1) + pCV(ji,jj) * pv(ji  ,jj+1) )
+            
+            ! zu_res(ji,jj)  = pFU(ji,jj) - pAU(ji,jj) * pu(ji-1,jj) - pBU(ji,jj) * pu(ji,jj) - pCU(ji,jj) * pu(ji+1,jj)
+            ! zv_res(ji,jj)  = pFV(ji,jj) - pAV(ji,jj) * pv(ji,jj-1) - pBV(ji,jj) * pv(ji,jj) - pCV(ji,jj) * pv(ji,jj+1)
+            
+            zu_res(ji,jj)  = SQRT( zu_res(ji,jj) * zu_res(ji,jj) ) * umask(ji,jj,1) * pat_iu(ji,jj) * e1e2u(ji,jj) * z1_pglob_area
+            zv_res(ji,jj)  = SQRT( zv_res(ji,jj) * zv_res(ji,jj) ) * vmask(ji,jj,1) * pat_iv(ji,jj) * e1e2v(ji,jj) * z1_pglob_area
+            
          END_2D
          
          ! Global ice-concentration, grid-cell-area weighted mean   
@@ -1607,21 +1611,22 @@ CONTAINS
 
          DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 )
 
-               zu_res(ji,jj)  = ( prhsu(ji,jj) + pDU(ji,jj) * pu(ji,jj-1) + pEU(ji,jj) * pu(ji,jj+1)               &
-                  &             - pAU(ji,jj) * pu(ji-1,jj) - pBU(ji,jj) * pu(ji,jj) - pCU(ji,jj) * pu(ji+1,jj) )
-               zv_res(ji,jj)  = ( prhsv(ji,jj) + pDV(ji,jj) * pv(ji-1,jj) + pEV(ji,jj) * pv(ji+1,jj)               &
-                  &             - pAV(ji,jj) * pv(ji,jj-1) - pBV(ji,jj) * pv(ji,jj) - pCV(ji,jj) * pv(ji,jj+1) )
-
-               zu_res(ji,jj)  = SQRT( zu_res(ji,jj) * zu_res(ji,jj) ) * umask(ji,jj,1) 
-               zv_res(ji,jj)  = SQRT( zv_res(ji,jj) * zv_res(ji,jj) ) * vmask(ji,jj,1) 
-
+            ! (brackets added to fix the order of floating point operations for the North Pole reproducibility
+            zu_res(ji,jj)  = prhsu(ji,jj)             + ( pDU(ji,jj) * pu(ji  ,jj-1) + pEU(ji,jj) * pu(ji  ,jj+1) )   &
+               &             - pBU(ji,jj) * pu(ji,jj) - ( pAU(ji,jj) * pu(ji-1,jj  ) + pCU(ji,jj) * pu(ji+1,jj  ) )
+            zv_res(ji,jj)  = prhsv(ji,jj)             + ( pDV(ji,jj) * pv(ji-1,jj  ) + pEV(ji,jj) * pv(ji+1,jj  ) )   &
+               &             - pBV(ji,jj) * pv(ji,jj) - ( pAV(ji,jj) * pv(ji  ,jj-1) + pCV(ji,jj) * pv(ji  ,jj+1) )
+            
+            zu_res(ji,jj)  = SQRT( zu_res(ji,jj) * zu_res(ji,jj) ) * umask(ji,jj,1) 
+            zv_res(ji,jj)  = SQRT( zv_res(ji,jj) * zv_res(ji,jj) ) * vmask(ji,jj,1) 
+            
          END_2D
          
          IF( nn_hls == 1 )   CALL lbc_lnk( 'icedyn_rhg_cvg_vp', zu_res,  'U',  1., zv_res , 'V',  1. )
 
          DO_2D( 0, 0, 0, 0 ) !clem check bounds
         
-               pvel_res(ji,jj) = 0.25_wp * ( zu_res(ji-1,jj) + zu_res(ji,jj) + zv_res(ji,jj-1) + zv_res(ji,jj) )
+               pvel_res(ji,jj) = 0.25_wp * ( ( zu_res(ji-1,jj) + zu_res(ji,jj) ) + ( zv_res(ji,jj-1) + zv_res(ji,jj) ) )
          
          END_2D
          CALL lbc_lnk( 'icedyn_rhg_cvg_vp', pvel_res, 'T', 1. )
diff --git a/src/ICE/icesbc.F90 b/src/ICE/icesbc.F90
index d9406ce66d2b685a391ee1eb45ab06889c0574f2..1efec20999ec2afcb1d7f6103d63025536862e56 100644
--- a/src/ICE/icesbc.F90
+++ b/src/ICE/icesbc.F90
@@ -308,7 +308,8 @@ CONTAINS
             zv_io   = v_ice(ji  ,jj  ) - ssv_m(ji  ,jj  )
             zv_iom1 = v_ice(ji  ,jj-1) - ssv_m(ji  ,jj-1)
             !
-            zfric(ji,jj) = rn_cio * ( 0.5_wp * ( zu_io*zu_io + zu_iom1*zu_iom1 + zv_io*zv_io + zv_iom1*zv_iom1 ) ) * smask0(ji,jj)
+            zfric(ji,jj) = rn_cio * ( 0.5_wp * (  ( zu_io*zu_io + zu_iom1*zu_iom1 )   &   ! add () for NP repro
+               &                                + ( zv_io*zv_io + zv_iom1*zv_iom1 ) ) ) * smask0(ji,jj)
             zvel (ji,jj) = 0.5_wp * SQRT( ( u_ice(ji-1,jj  ) + u_ice(ji,jj) ) * ( u_ice(ji-1,jj  ) + u_ice(ji,jj) ) + &
                &                          ( v_ice(ji  ,jj-1) + v_ice(ji,jj) ) * ( v_ice(ji  ,jj-1) + v_ice(ji,jj) ) )
          END_2D
diff --git a/src/ICE/iceupdate.F90 b/src/ICE/iceupdate.F90
index 8efb5c2d0b2f2eb2c7c6d5e2f00afaa15264bcd5..8a0f233cb892a74bb56e877d883191ce5ab2f808 100644
--- a/src/ICE/iceupdate.F90
+++ b/src/ICE/iceupdate.F90
@@ -361,8 +361,8 @@ CONTAINS
       IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN     !==  Ice time-step only  ==!   (i.e. surface module time-step)
          DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 )    !*  rhoco * |U_ice-U_oce| at T-point
             !                                               ! 2*(U_ice-U_oce) at T-point
-            zu_t = u_ice(ji,jj) + u_ice(ji-1,jj) - u_oce(ji,jj) - u_oce(ji-1,jj) ! u_oce = ssu_m
-            zv_t = v_ice(ji,jj) + v_ice(ji,jj-1) - v_oce(ji,jj) - v_oce(ji,jj-1) ! v_oce = ssv_m
+            zu_t = ( u_ice(ji,jj) + u_ice(ji-1,jj) ) - ( u_oce(ji,jj) + u_oce(ji-1,jj) ) ! u_oce = ssu_m       add () for
+            zv_t = ( v_ice(ji,jj) + v_ice(ji,jj-1) ) - ( v_oce(ji,jj) + v_oce(ji,jj-1) ) ! v_oce = ssv_m       NP repro
             !                                               ! |U_ice-U_oce|^2
             zmodt =  0.25_wp * (  zu_t * zu_t + zv_t * zv_t  )
             !
@@ -372,8 +372,8 @@ CONTAINS
          !
          DO_2D( 0, 0, 0, 0 )                                !* save the air-ocean stresses at ice time-step
             !                                               ! 2*(U_ice-U_oce) at T-point
-            zu_t = u_ice(ji,jj) + u_ice(ji-1,jj) - u_oce(ji,jj) - u_oce(ji-1,jj) ! u_oce = ssu_m
-            zv_t = v_ice(ji,jj) + v_ice(ji,jj-1) - v_oce(ji,jj) - v_oce(ji,jj-1) ! v_oce = ssv_m
+            zu_t = ( u_ice(ji,jj) + u_ice(ji-1,jj) ) - ( u_oce(ji,jj) + u_oce(ji-1,jj) ) ! u_oce = ssu_m       add () for
+            zv_t = ( v_ice(ji,jj) + v_ice(ji,jj-1) ) - ( v_oce(ji,jj) + v_oce(ji,jj-1) ) ! v_oce = ssv_m       NP repro
             !                                               ! |U_ice-U_oce|^2
             zmodt =  0.25_wp * (  zu_t * zu_t + zv_t * zv_t  )
             !                                               ! update the ocean stress modulus
@@ -398,8 +398,10 @@ CONTAINS
       !
       DO_2D( 0, 0, 0, 0 )                             !* update the stress WITHOUT an ice-ocean rotation angle
          !                                                   ! linearized quadratic drag formulation
-         zutau_ice   = 0.5_wp * tmod_io(ji,jj) * ( u_ice(ji,jj) + u_ice(ji-1,jj) - pu_oce(ji,jj) - pu_oce(ji-1,jj) )
-         zvtau_ice   = 0.5_wp * tmod_io(ji,jj) * ( v_ice(ji,jj) + v_ice(ji,jj-1) - pv_oce(ji,jj) - pv_oce(ji,jj-1) )
+         zutau_ice   = 0.5_wp * tmod_io(ji,jj)   &
+            &                 * ( ( u_ice(ji,jj) + u_ice(ji-1,jj) ) - ( pu_oce(ji,jj) + pu_oce(ji-1,jj) ) )   ! add () for
+         zvtau_ice   = 0.5_wp * tmod_io(ji,jj)   &
+            &                 * ( ( v_ice(ji,jj) + v_ice(ji,jj-1) ) - ( pv_oce(ji,jj) + pv_oce(ji,jj-1) ) )   ! NP repro
          !                                                   ! stresses at the ocean surface
          utau(ji,jj) = ( 1._wp - at_i(ji,jj) ) * utau_oce(ji,jj) + at_i(ji,jj) * zutau_ice
          vtau(ji,jj) = ( 1._wp - at_i(ji,jj) ) * vtau_oce(ji,jj) + at_i(ji,jj) * zvtau_ice
diff --git a/src/NST/agrif_oce_sponge.F90 b/src/NST/agrif_oce_sponge.F90
index 7d9e58852fc14f1635a9a49b88111f68d50b9d9c..2067c64a462c2c59a576842a56b22f26321b2265 100644
--- a/src/NST/agrif_oce_sponge.F90
+++ b/src/NST/agrif_oce_sponge.F90
@@ -239,8 +239,8 @@ CONTAINS
       fspt(:,:) = 0._wp
       fspf(:,:) = 0._wp
       DO_2D( 0, 0, 0, 0 )
-         fspt(ji,jj) = 0.25_wp * ( ztabramp(ji  ,jj  ) + ztabramp(ji-1,jj  ) &
-                               &  +ztabramp(ji  ,jj-1) + ztabramp(ji-1,jj-1) ) * ssmask(ji,jj)
+         fspt(ji,jj) = 0.25_wp * (  ( ztabramp(ji  ,jj  ) + ztabramp(ji-1,jj  ) ) &   ! add () for NP repro
+            &                     + ( ztabramp(ji  ,jj-1) + ztabramp(ji-1,jj-1) ) ) * ssmask(ji,jj)
          fspf(ji,jj) = ztabramp(ji,jj) * ssvmask(ji,jj) * ssvmask(ji,jj+1)
       END_2D
       
@@ -372,8 +372,8 @@ CONTAINS
       fspt_2d(:,:) = 0._wp
       fspf_2d(:,:) = 0._wp
       DO_2D( 0, 0, 0, 0 )
-         fspt_2d(ji,jj) = 0.25_wp * ( ztabramp(ji  ,jj  ) + ztabramp(ji-1,jj  ) &
-                               &  +ztabramp(ji  ,jj-1) + ztabramp(ji-1,jj-1) ) * ssmask(ji,jj)
+         fspt_2d(ji,jj) = 0.25_wp * (  ( ztabramp(ji  ,jj  ) + ztabramp(ji-1,jj  ) ) &   ! add () for NP repro
+            &                        + ( ztabramp(ji  ,jj-1) + ztabramp(ji-1,jj-1) ) ) * ssmask(ji,jj)
          fspf_2d(ji,jj) = ztabramp(ji,jj) * ssvmask(ji,jj) * ssvmask(ji,jj+1)
          END_2D
       CALL lbc_lnk( 'agrif_Sponge_2d', fspu_2d, 'U', 1._wp, fspv_2d, 'V', 1._wp, fspt_2d, 'T', 1._wp, fspf_2d, 'F', 1._wp )
@@ -593,8 +593,8 @@ CONTAINS
                      IF (.NOT. tabspongedone_tsn(ji,jj)) THEN 
                         zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm_a)
                         ! horizontal diffusive trends
-                        ztsa = zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk)   & 
-                          &           + ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) &
+                        ztsa = zbtr * ( ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) )   &   ! add () for NP repro
+                          &           + ( ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) ) &
                           &   - rn_trelax_tra * r1_Dt * fspt(ji,jj) * tsbdiff(ji,jj,jk,jn)
                         ! add it to the general tracer trends
                         ts(ji,jj,jk,jn,Krhs_a) = ts(ji,jj,jk,jn,Krhs_a) + ztsa
diff --git a/src/NST/agrif_top_sponge.F90 b/src/NST/agrif_top_sponge.F90
index 641b9de74e96a4e352885b4c0cadddabd210ab70..00b159c615198b9580084372885d668d3e4c5c61 100644
--- a/src/NST/agrif_top_sponge.F90
+++ b/src/NST/agrif_top_sponge.F90
@@ -265,8 +265,8 @@ CONTAINS
                      IF (.NOT. tabspongedone_trn(ji,jj)) THEN 
                         zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm_a)
                         ! horizontal diffusive trends
-                        ztra = zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk)   & 
-                          &           + ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) &
+                        ztra = zbtr * ( ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) )   &   ! add () for NP repro
+                          &           + ( ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) ) &
                           &   - rn_trelax_tra * r1_Dt * fspt(ji,jj) * trbdiff(ji,jj,jk,jn)
                         ! add it to the general tracer trends
                         tr(ji,jj,jk,jn,Krhs_a) = tr(ji,jj,jk,jn,Krhs_a) + ztra
diff --git a/src/OCE/DOM/domqco.F90 b/src/OCE/DOM/domqco.F90
index 5944f59c1057780287cc63828673d090415ce239..678fd864db49e27b9bca9dc2a2a07b04b88a7a86 100644
--- a/src/OCE/DOM/domqco.F90
+++ b/src/OCE/DOM/domqco.F90
@@ -180,9 +180,9 @@ CONTAINS
             ! round brackets added to fix the order of floating point operations
             ! needed to ensure halo 1 - halo 2 compatibility
             pr3f(ji,jj) = 0.25_wp * (   (  e1e2t(ji  ,jj  ) * pssh(ji  ,jj  )      &
-               &                         + e1e2t(ji+1,jj  ) * pssh(ji+1,jj  )  )   & ! bracket for halo 1 - halo 2 compatibility
+               &                         + e1e2t(ji+1,jj  ) * pssh(ji+1,jj  )  )   & ! add () for  NP reproducibility
                &                     +  (  e1e2t(ji  ,jj+1) * pssh(ji  ,jj+1)      &
-               &                         + e1e2t(ji+1,jj+1) * pssh(ji+1,jj+1)  )   & ! bracket for halo 1 - halo 2 compatibility
+               &                         + e1e2t(ji+1,jj+1) * pssh(ji+1,jj+1)  )   & ! add () for NP reproducibility
                &                    ) * r1_hf_0(ji,jj) * r1_e1e2f(ji,jj)
          END_2D
          !                                                 ! lbc on ratio at u-,v-,f-points
@@ -247,9 +247,9 @@ CONTAINS
          ! round brackets added to fix the order of floating point operations
          ! needed to ensure halo 1 - halo 2 compatibility
          pr3f(ji,jj) = 0.25_wp * (   (  e1e2t(ji  ,jj  ) * pssh(ji  ,jj  )      &
-            &                         + e1e2t(ji+1,jj  ) * pssh(ji+1,jj  )  )   & ! bracket for halo 1 - halo 2 compatibility
+            &                         + e1e2t(ji+1,jj  ) * pssh(ji+1,jj  )  )   & ! add () for  NP reproducibility
             &                     +  (  e1e2t(ji  ,jj+1) * pssh(ji  ,jj+1)      &
-            &                         + e1e2t(ji+1,jj+1) * pssh(ji+1,jj+1)  )   & ! bracket for halo 1 - halo 2 compatibility
+            &                         + e1e2t(ji+1,jj+1) * pssh(ji+1,jj+1)  )   & ! add () for  NP reproducibility
             &                    ) * r1_hf_0(ji,jj) * r1_e1e2f(ji,jj)
       END_2D
 !!st         ELSE                                      !- Flux Form   (simple averaging)
@@ -258,7 +258,7 @@ CONTAINS
          ! round brackets added to fix the order of floating point operations
          ! needed to ensure halo 1 - halo 2 compatibility
          pr3f(ji,jj) = 0.25_wp * (   (  pssh(ji,jj  ) + pssh(ji+1,jj  )  )   &
-            &                     +  (  pssh(ji,jj+1) + pssh(ji+1,jj+1)  )   & ! bracket for halo 1 - halo 2 compatibility
+            &                     +  (  pssh(ji,jj+1) + pssh(ji+1,jj+1)  )   & ! add () for  NP reproducibility
             &                    ) * r1_hf_0(ji,jj)
       END_2D
 !!st         ENDIF
diff --git a/src/OCE/DOM/domvvl.F90 b/src/OCE/DOM/domvvl.F90
index 2de0762a7223f14face860df5c22b6729158807d..d0d585fc147558d6aca8f815b434d01a29042a29 100644
--- a/src/OCE/DOM/domvvl.F90
+++ b/src/OCE/DOM/domvvl.F90
@@ -422,9 +422,8 @@ CONTAINS
             vn_td(ji,jj,mbkv(ji,jj)) = vn_td(ji,jj,mbkv(ji,jj)) - zwv(ji,jj)
          END_2D
          DO_3D( 0, 0, 0, 0, 1, jpkm1 )   ! c - second derivative: divergence of diffusive fluxes
-            tilde_e3t_a(ji,jj,jk) = tilde_e3t_a(ji,jj,jk) + (   un_td(ji-1,jj  ,jk) - un_td(ji,jj,jk)    &
-               &                                          +     vn_td(ji  ,jj-1,jk) - vn_td(ji,jj,jk)    &
-               &                                            ) * r1_e1e2t(ji,jj)
+            tilde_e3t_a(ji,jj,jk) = tilde_e3t_a(ji,jj,jk) + ( ( un_td(ji-1,jj  ,jk) - un_td(ji,jj,jk) )   &   ! add () for NP repro
+               &                                            + ( vn_td(ji  ,jj-1,jk) - vn_td(ji,jj,jk) ) ) * r1_e1e2t(ji,jj)
          END_3D
          !                               ! d - thickness diffusion transport: boundary conditions
          !                             (stored for tracer advction and continuity equation)
diff --git a/src/OCE/DYN/divhor.F90 b/src/OCE/DYN/divhor.F90
index 795277715a0371243c155a465409880efb24177b..5e4188a2bd785fb6e81b295bd716fe9f7bcdce1e 100644
--- a/src/OCE/DYN/divhor.F90
+++ b/src/OCE/DYN/divhor.F90
@@ -83,11 +83,11 @@ CONTAINS
       ENDIF
       ! 
       DO_3D_OVR( 0, 0, 0, 0, 1, jpkm1 )
-         hdiv(ji,jj,jk) = (   e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm) * puu(ji  ,jj,jk)      &
-            &               - e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) * puu(ji-1,jj,jk)      &
-            &               + e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm) * pvv(ji,jj  ,jk)      &
-            &               - e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm) * pvv(ji,jj-1,jk)  )   &
-            &            * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)
+         hdiv(ji,jj,jk) = (  (  e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm) * puu(ji  ,jj,jk)       &   ! add () for NP repro
+            &                 - e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) * puu(ji-1,jj,jk) )     &
+            &              + (  e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm) * pvv(ji,jj  ,jk)       &
+            &                 - e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm) * pvv(ji,jj-1,jk) )     &
+            &             ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)
       END_3D
       !
       IF( ln_rnf )   CALL sbc_rnf_div( hdiv, Kmm )             !==  + runoffs divergence  ==!
@@ -149,15 +149,11 @@ CONTAINS
       ENDIF
       !
       DO_3D_OVR( 0, 0, 0, 0, 1, jpkm1 )                                          !==  Horizontal divergence  ==!
-         ! round brackets added to fix the order of floating point operations
-         ! needed to ensure halo 1 - halo 2 compatibility
-         hdiv(ji,jj,jk) = (  ( e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm) * uu(ji  ,jj,jk,Kmm)     &
-            &                - e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) * uu(ji-1,jj,jk,Kmm)     &
-            &                )                                                             & ! bracket for halo 1 - halo 2 compatibility
-            &              + ( e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm) * vv(ji,jj  ,jk,Kmm)     &
-            &                - e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm) * vv(ji,jj-1,jk,Kmm)     &
-            &                )                                                             & ! bracket for halo 1 - halo 2 compatibility
-            &             )  * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)
+         hdiv(ji,jj,jk) = (  (  e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm) * uu(ji  ,jj,jk,Kmm)     &   ! add () for NP repro
+            &                 - e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) * uu(ji-1,jj,jk,Kmm) )   &
+            &              + (  e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm) * vv(ji,jj  ,jk,Kmm)     &
+            &                 - e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm) * vv(ji,jj-1,jk,Kmm) )   &
+            &             ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)
       END_3D
       !
       IF( ln_rnf )   CALL sbc_rnf_div( hdiv, Kmm )                               !==  runoffs    ==!   (update hdiv field)
diff --git a/src/OCE/DYN/dynadv_cen2.F90 b/src/OCE/DYN/dynadv_cen2.F90
index 07dd931129ed0b4474092915e3b6c83abcaf2ff5..38306ccd6a2ebd83c8aa04249852327a36235387 100644
--- a/src/OCE/DYN/dynadv_cen2.F90
+++ b/src/OCE/DYN/dynadv_cen2.F90
@@ -103,11 +103,11 @@ CONTAINS
             zfv_t(ji  ,jj+1) = ( zfv(ji,jj) + zfv(ji,jj+1) ) * ( pvv(ji,jj,jk,Kmm) + pvv(ji  ,jj+1,jk,Kmm) )
          END_2D
          DO_2D( 0, 0, 0, 0 )              ! divergence of horizontal momentum fluxes
-            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - (  zfu_t(ji+1,jj) - zfu_t(ji,jj  )    &
-               &                                       + zfv_f(ji  ,jj) - zfv_f(ji,jj-1)  ) * r1_e1e2u(ji,jj)   &
+            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - (  ( zfu_t(ji+1,jj) - zfu_t(ji,jj  ) )    &   ! add () for NP repro
+               &                                       + ( zfv_f(ji  ,jj) - zfv_f(ji,jj-1) )  ) * r1_e1e2u(ji,jj)   &
                &                                    / e3u(ji,jj,jk,Kmm)
-            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - (  zfu_f(ji,jj  ) - zfu_f(ji-1,jj)    &
-               &                                       + zfv_t(ji,jj+1) - zfv_t(ji  ,jj)  ) * r1_e1e2v(ji,jj)   &
+            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - (  ( zfu_f(ji,jj  ) - zfu_f(ji-1,jj) )    &   ! add () for NP repro
+               &                                       + ( zfv_t(ji,jj+1) - zfv_t(ji  ,jj) )  ) * r1_e1e2v(ji,jj)   &
                &                                    / e3v(ji,jj,jk,Kmm)
          END_2D
       END DO
diff --git a/src/OCE/DYN/dynadv_ubs.F90 b/src/OCE/DYN/dynadv_ubs.F90
index 8ab908124d5b85beb120d5726d2d6ec12b8d28f7..f4f08f75b0bc3ce6a92b10e5df7093c51eefba0a 100644
--- a/src/OCE/DYN/dynadv_ubs.F90
+++ b/src/OCE/DYN/dynadv_ubs.F90
@@ -123,37 +123,23 @@ CONTAINS
          END_2D
          !            
          DO_2D( 1, 1, 1, 1 )                       ! laplacian
-            ! round brackets added to fix the order of floating point operations
-            ! needed to ensure halo 1 - halo 2 compatibility (north fold)
-!!            zlu_uu(ji,jj,1) = (  ( puu(ji+1,jj  ,jk,Kbb) + puu(ji-1,jj  ,jk,Kbb) ) - 2._wp * puu(ji,jj,jk,Kbb)  ) * umask(ji,jj,jk)
-!!            zlv_vv(ji,jj,1) = (  ( pvv(ji  ,jj+1,jk,Kbb) + pvv(ji  ,jj-1,jk,Kbb) ) - 2._wp * pvv(ji,jj,jk,Kbb)  ) * vmask(ji,jj,jk)
-            zlu_uu(ji,jj,1) = ( ( puu (ji+1,jj  ,jk,Kbb) - puu (ji  ,jj  ,jk,Kbb) &
-               &                )                                                 & ! bracket for halo 1 - halo 2 compatibility
-               &              + ( puu (ji-1,jj  ,jk,Kbb) - puu (ji  ,jj  ,jk,Kbb) &
-               &                )                                                   ) * umask(ji  ,jj  ,jk)
-            zlv_vv(ji,jj,1) = ( ( pvv (ji  ,jj+1,jk,Kbb) - pvv (ji  ,jj  ,jk,Kbb) &
-               &                )                                                 & ! bracket for halo 1 - halo 2 compatibility
-               &              + ( pvv (ji  ,jj-1,jk,Kbb) - pvv (ji  ,jj  ,jk,Kbb) &
-               &                )                                                   ) * vmask(ji  ,jj  ,jk)
+            zlu_uu(ji,jj,1) = ( ( puu (ji+1,jj  ,jk,Kbb) - puu (ji  ,jj  ,jk,Kbb) ) &                      ! add () for NP repro
+               &              + ( puu (ji-1,jj  ,jk,Kbb) - puu (ji  ,jj  ,jk,Kbb) ) ) * umask(ji  ,jj  ,jk)
+            zlv_vv(ji,jj,1) = ( ( pvv (ji  ,jj+1,jk,Kbb) - pvv (ji  ,jj  ,jk,Kbb) ) &                      ! add () for NP repro
+               &              + ( pvv (ji  ,jj-1,jk,Kbb) - pvv (ji  ,jj  ,jk,Kbb) ) ) * vmask(ji  ,jj  ,jk)
             zlu_uv(ji,jj,1) = (    puu(ji  ,jj+1,jk,Kbb) - puu(ji  ,jj  ,jk,Kbb)    ) * fmask(ji  ,jj  ,jk)   &
                &            - (    puu(ji  ,jj  ,jk,Kbb) - puu(ji  ,jj-1,jk,Kbb)    ) * fmask(ji  ,jj-1,jk)
             zlv_vu(ji,jj,1) = (    pvv(ji+1,jj  ,jk,Kbb) - pvv(ji  ,jj  ,jk,Kbb)    ) * fmask(ji  ,jj  ,jk)   &
                &            - (    pvv(ji  ,jj  ,jk,Kbb) - pvv(ji-1,jj  ,jk,Kbb)    ) * fmask(ji-1,jj  ,jk)
             !
-!!            zlu_uu(ji,jj,2) = (  ( zfu(ji+1,jj  ) + zfu(ji-1,jj  ) ) - 2._wp * zfu(ji,jj)  ) * umask(ji  ,jj  ,jk)
-!!            zlv_vv(ji,jj,2) = (  ( zfv(ji  ,jj+1) + zfv(ji  ,jj-1) ) - 2._wp * zfv(ji,jj)  ) * vmask(ji  ,jj  ,jk)
-            zlu_uu(ji,jj,2) = ( ( zfu(ji+1,jj  ) - zfu(ji  ,jj  )           &
-               &                )                                           & ! bracket for halo 1 - halo 2 compatibility
-               &              + ( zfu(ji-1,jj  ) - zfu(ji  ,jj  )           &
-               &                )                                             ) * umask(ji  ,jj  ,jk)
-            zlv_vv(ji,jj,2) = ( ( zfv(ji  ,jj+1) - zfv(ji  ,jj  )           &
-               &                )                                           & ! bracket for halo 1 - halo 2 compatibility
-               &              + ( zfv(ji  ,jj-1) - zfv(ji  ,jj  )           &
-               &                )                                             ) * vmask(ji  ,jj  ,jk)
-            zlu_uv(ji,jj,2) = (    zfu(ji  ,jj+1) - zfu(ji  ,jj  )    ) * fmask(ji  ,jj  ,jk)             &
-               &            - (    zfu(ji  ,jj  ) - zfu(ji  ,jj-1)    ) * fmask(ji  ,jj-1,jk)
-            zlv_vu(ji,jj,2) = (    zfv(ji+1,jj  ) - zfv(ji  ,jj  )    ) * fmask(ji  ,jj  ,jk)             &
-               &            - (    zfv(ji  ,jj  ) - zfv(ji-1,jj  )    ) * fmask(ji-1,jj  ,jk)
+            zlu_uu(ji,jj,2) = ( ( zfu(ji+1,jj  ) - zfu(ji  ,jj  ) ) &                      ! add () for NP repro
+               &              + ( zfu(ji-1,jj  ) - zfu(ji  ,jj  ) ) ) * umask(ji  ,jj  ,jk)
+            zlv_vv(ji,jj,2) = ( ( zfv(ji  ,jj+1) - zfv(ji  ,jj  ) ) &                      ! add () for NP repro
+               &              + ( zfv(ji  ,jj-1) - zfv(ji  ,jj  ) ) ) * vmask(ji  ,jj  ,jk)
+            zlu_uv(ji,jj,2) = (   zfu(ji  ,jj+1) - zfu(ji  ,jj  )   ) * fmask(ji  ,jj  ,jk)             &
+               &            - (   zfu(ji  ,jj  ) - zfu(ji  ,jj-1)   ) * fmask(ji  ,jj-1,jk)
+            zlv_vu(ji,jj,2) = (   zfv(ji+1,jj  ) - zfv(ji  ,jj  )   ) * fmask(ji  ,jj  ,jk)             &
+               &            - (   zfv(ji  ,jj  ) - zfv(ji-1,jj  )   ) * fmask(ji-1,jj  ,jk)
          END_2D
          !
          !                                      ! ====================== !
@@ -196,11 +182,11 @@ CONTAINS
                &             * ( pvv(ji,jj,jk,Kmm) + pvv(ji+1,jj  ,jk,Kmm) - gamma1 * zl_v )
          END_2D
          DO_2D( 0, 0, 0, 0 )                       ! divergence of horizontal momentum fluxes
-            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - (  zfu_t(ji+1,jj) - zfu_t(ji,jj  )    &
-               &                                       + zfv_f(ji  ,jj) - zfv_f(ji,jj-1)  ) * r1_e1e2u(ji,jj)   &
+            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - (  ( zfu_t(ji+1,jj) - zfu_t(ji,jj  ) )    &   ! add () for NP repro
+               &                                       + ( zfv_f(ji  ,jj) - zfv_f(ji,jj-1) )  ) * r1_e1e2u(ji,jj)   &
                &                                    / e3u(ji,jj,jk,Kmm)
-            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - (  zfu_f(ji,jj  ) - zfu_f(ji-1,jj)    &
-               &                                       + zfv_t(ji,jj+1) - zfv_t(ji  ,jj)  ) * r1_e1e2v(ji,jj)   &
+            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - (  ( zfu_f(ji,jj  ) - zfu_f(ji-1,jj) )    &   ! add () for NP repro
+               &                                       + ( zfv_t(ji,jj+1) - zfv_t(ji  ,jj) )  ) * r1_e1e2v(ji,jj)   &
                &                                    / e3v(ji,jj,jk,Kmm)
          END_2D
       END DO
@@ -244,10 +230,8 @@ CONTAINS
             zzfu_kp1 = ( zfw(ji,jj) + zfw(ji+1,jj  ) ) * ( puu(ji,jj,jk+1,Kmm) + puu(ji,jj,jk,Kmm) )
             zzfv_kp1 = ( zfw(ji,jj) + zfw(ji  ,jj+1) ) * ( pvv(ji,jj,jk+1,Kmm) + pvv(ji,jj,jk,Kmm) )
             !                                 ! divergence of vertical momentum flux
-            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - ( zfu_uw(ji,jj) - zzfu_kp1 ) * r1_e1e2u(ji,jj)   &
-               &                                      / e3u(ji,jj,jk,Kmm)
-            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - ( zfv_vw(ji,jj) - zzfv_kp1 ) * r1_e1e2v(ji,jj)   &
-               &                                      / e3v(ji,jj,jk,Kmm) 
+            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - ( zfu_uw(ji,jj) - zzfu_kp1 ) * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm)
+            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - ( zfv_vw(ji,jj) - zzfv_kp1 ) * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm) 
             !                                 ! store vertical flux for next level calculation
             zfu_uw(ji,jj) = zzfu_kp1
             zfv_vw(ji,jj) = zzfv_kp1
@@ -256,10 +240,8 @@ CONTAINS
       !
       jk = jpkm1                              ! compute last level (zzfu_kp1 = 0)
       DO_2D( 0, 0, 0, 0 )
-         puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - zfu_uw(ji,jj) * r1_e1e2u(ji,jj)   &
-            &                                      / e3u(ji,jj,jk,Kmm)
-         pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - zfv_vw(ji,jj) * r1_e1e2v(ji,jj)   &
-            &                                      / e3v(ji,jj,jk,Kmm) 
+         puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - zfu_uw(ji,jj) * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm)
+         pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - zfv_vw(ji,jj) * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm) 
       END_2D
       !
       IF( l_trddyn ) THEN                     ! trends: send trend to trddyn for diagnostic
@@ -366,45 +348,31 @@ CONTAINS
          END_2D
          !            
          DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 )                       ! laplacian
-            ! round brackets added to fix the order of floating point operations
-            ! needed to ensure halo 1 - halo 2 compatibility
-            zlu_uu(ji,jj,jk,1) = ( ( puu (ji+1,jj  ,jk,Kbb) - puu (ji  ,jj  ,jk,Kbb) &
-               &                   )                                                 & ! bracket for halo 1 - halo 2 compatibility
-               &                 + ( puu (ji-1,jj  ,jk,Kbb) - puu (ji  ,jj  ,jk,Kbb) &
-               &                   )                                                 & ! bracket for halo 1 - halo 2 compatibility
-               &                 ) * umask(ji  ,jj  ,jk)
-            zlv_vv(ji,jj,jk,1) = ( ( pvv (ji  ,jj+1,jk,Kbb) - pvv (ji  ,jj  ,jk,Kbb) &
-               &                   )                                                 & ! bracket for halo 1 - halo 2 compatibility
-               &                 + ( pvv (ji  ,jj-1,jk,Kbb) - pvv (ji  ,jj  ,jk,Kbb) &
-               &                   )                                                 & ! bracket for halo 1 - halo 2 compatibility
-               &                 ) * vmask(ji  ,jj  ,jk)
-            zlu_uv(ji,jj,jk,1) = (  puu (ji  ,jj+1,jk,Kbb) - puu (ji  ,jj  ,jk,Kbb)  ) * fmask(ji  ,jj  ,jk)   &
-               &               - (  puu (ji  ,jj  ,jk,Kbb) - puu (ji  ,jj-1,jk,Kbb)  ) * fmask(ji  ,jj-1,jk)
-            zlv_vu(ji,jj,jk,1) = (  pvv (ji+1,jj  ,jk,Kbb) - pvv (ji  ,jj  ,jk,Kbb)  ) * fmask(ji  ,jj  ,jk)   &
-               &               - (  pvv (ji  ,jj  ,jk,Kbb) - pvv (ji-1,jj  ,jk,Kbb)  ) * fmask(ji-1,jj  ,jk)
+            zlu_uu(ji,jj,jk,1) = ( ( puu (ji+1,jj  ,jk,Kbb) - puu (ji  ,jj  ,jk,Kbb) )   &                    ! add () for NP repro
+               &                 + ( puu (ji-1,jj  ,jk,Kbb) - puu (ji  ,jj  ,jk,Kbb) ) ) * umask(ji  ,jj  ,jk)
+            zlv_vv(ji,jj,jk,1) = ( ( pvv (ji  ,jj+1,jk,Kbb) - pvv (ji  ,jj  ,jk,Kbb) )   &                    ! add () for NP repro
+               &                 + ( pvv (ji  ,jj-1,jk,Kbb) - pvv (ji  ,jj  ,jk,Kbb) ) ) * vmask(ji  ,jj  ,jk)
+            zlu_uv(ji,jj,jk,1) = (   puu (ji  ,jj+1,jk,Kbb) - puu (ji  ,jj  ,jk,Kbb)   ) * fmask(ji  ,jj  ,jk)   &
+               &               - (   puu (ji  ,jj  ,jk,Kbb) - puu (ji  ,jj-1,jk,Kbb)   ) * fmask(ji  ,jj-1,jk)
+            zlv_vu(ji,jj,jk,1) = (   pvv (ji+1,jj  ,jk,Kbb) - pvv (ji  ,jj  ,jk,Kbb)   ) * fmask(ji  ,jj  ,jk)   &
+               &               - (   pvv (ji  ,jj  ,jk,Kbb) - pvv (ji-1,jj  ,jk,Kbb)   ) * fmask(ji-1,jj  ,jk)
             !
             ! round brackets added to fix the order of floating point operations
             ! needed to ensure halo 1 - halo 2 compatibility
-            zlu_uu(ji,jj,jk,2) = ( ( zfu(ji+1,jj  ,jk) - zfu(ji  ,jj  ,jk)           &
-               &                   )                                                 & ! bracket for halo 1 - halo 2 compatibility
-               &                 + ( zfu(ji-1,jj  ,jk) - zfu(ji  ,jj  ,jk)           &
-               &                   )                                                 & ! bracket for halo 1 - halo 2 compatibility
-               &                 ) * umask(ji  ,jj  ,jk)
-            zlv_vv(ji,jj,jk,2) = ( ( zfv(ji  ,jj+1,jk) - zfv(ji  ,jj  ,jk)           &
-               &                   )                                                 & ! bracket for halo 1 - halo 2 compatibility
-               &                 + ( zfv(ji  ,jj-1,jk) - zfv(ji  ,jj  ,jk)           &
-               &                   )                                                 & ! bracket for halo 1 - halo 2 compatibility
-               &                 ) * vmask(ji  ,jj  ,jk)
-            zlu_uv(ji,jj,jk,2) = (  zfu(ji  ,jj+1,jk) - zfu(ji  ,jj  ,jk)  ) * fmask(ji  ,jj  ,jk)             &
-               &               - (  zfu(ji  ,jj  ,jk) - zfu(ji  ,jj-1,jk)  ) * fmask(ji  ,jj-1,jk)
-            zlv_vu(ji,jj,jk,2) = (  zfv(ji+1,jj  ,jk) - zfv(ji  ,jj  ,jk)  ) * fmask(ji  ,jj  ,jk)             &
-               &               - (  zfv(ji  ,jj  ,jk) - zfv(ji-1,jj  ,jk)  ) * fmask(ji-1,jj  ,jk)
+            zlu_uu(ji,jj,jk,2) = ( ( zfu(ji+1,jj  ,jk) - zfu(ji  ,jj  ,jk) )   &                    ! add () for NP repro
+               &                 + ( zfu(ji-1,jj  ,jk) - zfu(ji  ,jj  ,jk) ) ) * umask(ji  ,jj  ,jk)
+            zlv_vv(ji,jj,jk,2) = ( ( zfv(ji  ,jj+1,jk) - zfv(ji  ,jj  ,jk) )   &                    ! add () for NP repro
+               &                 + ( zfv(ji  ,jj-1,jk) - zfv(ji  ,jj  ,jk) ) ) * vmask(ji  ,jj  ,jk)
+            zlu_uv(ji,jj,jk,2) = (   zfu(ji  ,jj+1,jk) - zfu(ji  ,jj  ,jk)   ) * fmask(ji  ,jj  ,jk)   &
+               &               - (   zfu(ji  ,jj  ,jk) - zfu(ji  ,jj-1,jk)   ) * fmask(ji  ,jj-1,jk)
+            zlv_vu(ji,jj,jk,2) = (   zfv(ji+1,jj  ,jk) - zfv(ji  ,jj  ,jk)   ) * fmask(ji  ,jj  ,jk)   &
+               &               - (   zfv(ji  ,jj  ,jk) - zfv(ji-1,jj  ,jk)   ) * fmask(ji-1,jj  ,jk)
          END_2D
       END DO
       IF( nn_hls == 1 ) CALL lbc_lnk( 'dynadv_ubs', zlu_uu(:,:,:,1), 'U', -1.0_wp , zlu_uv(:,:,:,1), 'U', -1.0_wp,  &
-                                              &   zlu_uu(:,:,:,2), 'U', -1.0_wp , zlu_uv(:,:,:,2), 'U', -1.0_wp,  &
-                                              &   zlv_vv(:,:,:,1), 'V', -1.0_wp , zlv_vu(:,:,:,1), 'V', -1.0_wp,  &
-                                              &   zlv_vv(:,:,:,2), 'V', -1.0_wp , zlv_vu(:,:,:,2), 'V', -1.0_wp   )
+                                                &   zlu_uu(:,:,:,2), 'U', -1.0_wp , zlu_uv(:,:,:,2), 'U', -1.0_wp,  &
+                                                &   zlv_vv(:,:,:,1), 'V', -1.0_wp , zlv_vu(:,:,:,1), 'V', -1.0_wp,  &
+                                                &   zlv_vv(:,:,:,2), 'V', -1.0_wp , zlv_vu(:,:,:,2), 'V', -1.0_wp   )
       !
       !                                      ! ====================== !
       !                                      !  Horizontal advection  !
@@ -426,16 +394,14 @@ CONTAINS
             ELSE                 ;   zl_v = zlv_vv(ji,jj+1,jk,1)
             ENDIF
             !
-            zfu_t(ji+1,jj  ,jk) = ( zfu(ji,jj,jk) + zfu(ji+1,jj  ,jk)                               &
-               &                    - gamma2 * ( zlu_uu(ji,jj,jk,2) + zlu_uu(ji+1,jj  ,jk,2) )  )   &
-               &                * ( zui - gamma1 * zl_u)
-            zfv_t(ji  ,jj+1,jk) = ( zfv(ji,jj,jk) + zfv(ji  ,jj+1,jk)                               &
-               &                    - gamma2 * ( zlv_vv(ji,jj,jk,2) + zlv_vv(ji  ,jj+1,jk,2) )  )   &
-               &                * ( zvj - gamma1 * zl_v)
+            zfu_t(ji+1,jj  ,jk) = (            (    zfu(ji,jj,jk  ) +    zfu(ji+1,jj  ,jk  ) )      &   ! add () for NP repro
+               &                    - gamma2 * ( zlu_uu(ji,jj,jk,2) + zlu_uu(ji+1,jj  ,jk,2) )  ) * ( zui - gamma1 * zl_u)
+            zfv_t(ji  ,jj+1,jk) = (            (    zfv(ji,jj,jk  ) +     zfv(ji  ,jj+1,jk ) )      &   ! add () for NP repro
+               &                    - gamma2 * ( zlv_vv(ji,jj,jk,2) + zlv_vv(ji  ,jj+1,jk,2) )  ) * ( zvj - gamma1 * zl_v)
             !
             zfuj = ( zfu(ji,jj,jk) + zfu(ji  ,jj+1,jk) )
             zfvi = ( zfv(ji,jj,jk) + zfv(ji+1,jj  ,jk) )
-            IF( zfuj > 0 ) THEN   ;    zl_v = zlv_vu( ji  ,jj  ,jk,1)
+            IF( zfuj > 0 ) THEN   ;    zl_v = zlv_vu( ji  ,jj,jk,1)
             ELSE                  ;    zl_v = zlv_vu( ji+1,jj,jk,1)
             ENDIF
             IF( zfvi > 0 ) THEN   ;    zl_u = zlu_uv( ji,jj  ,jk,1)
@@ -443,17 +409,17 @@ CONTAINS
             ENDIF
             !
             zfv_f(ji  ,jj  ,jk) = ( zfvi - gamma2 * ( zlv_vu(ji,jj,jk,2) + zlv_vu(ji+1,jj  ,jk,2) )  )   &
-               &                * ( puu(ji,jj,jk,Kmm) + puu(ji  ,jj+1,jk,Kmm) - gamma1 * zl_u )
+               &                * ( ( puu(ji,jj,jk,Kmm) + puu(ji  ,jj+1,jk,Kmm) ) - gamma1 * zl_u )   ! add () for NP repro
             zfu_f(ji  ,jj  ,jk) = ( zfuj - gamma2 * ( zlu_uv(ji,jj,jk,2) + zlu_uv(ji  ,jj+1,jk,2) )  )   &
-               &                * ( pvv(ji,jj,jk,Kmm) + pvv(ji+1,jj  ,jk,Kmm) - gamma1 * zl_v )
+               &                * ( ( pvv(ji,jj,jk,Kmm) + pvv(ji+1,jj  ,jk,Kmm) ) - gamma1 * zl_v )   ! add () for NP repro
          END_2D
          DO_2D( 0, 0, 0, 0 )                       ! divergence of horizontal momentum fluxes
-            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - (  zfu_t(ji+1,jj,jk) - zfu_t(ji,jj  ,jk)    &
-               &                           + zfv_f(ji  ,jj,jk) - zfv_f(ji,jj-1,jk)  ) * r1_e1e2u(ji,jj)   &
-               &                           / e3u(ji,jj,jk,Kmm)
-            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - (  zfu_f(ji,jj  ,jk) - zfu_f(ji-1,jj,jk)    &
-               &                           + zfv_t(ji,jj+1,jk) - zfv_t(ji  ,jj,jk)  ) * r1_e1e2v(ji,jj)   &
-               &                           / e3v(ji,jj,jk,Kmm)
+            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) - (  ( zfu_t(ji+1,jj,jk) - zfu_t(ji,jj  ,jk) )    &   ! add () for NP repro
+               &                                       + ( zfv_f(ji  ,jj,jk) - zfv_f(ji,jj-1,jk) )  ) * r1_e1e2u(ji,jj)   &
+               &                                      / e3u(ji,jj,jk,Kmm)
+            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) - (  ( zfu_f(ji,jj  ,jk) - zfu_f(ji-1,jj,jk) )    &   ! add () for NP repro
+               &                                       + ( zfv_t(ji,jj+1,jk) - zfv_t(ji  ,jj,jk) )  ) * r1_e1e2v(ji,jj)   &
+               &                                      / e3v(ji,jj,jk,Kmm)
          END_2D
       END DO
       IF( l_trddyn ) THEN                          ! trends: send trends to trddyn for diagnostic
@@ -484,15 +450,13 @@ CONTAINS
             zfw(ji,jj,jk) = 0.25_wp * e1e2t(ji,jj) * zpt_w(ji,jj,jk)
          END_2D
          DO_2D( 0, 0, 0, 0 )
-            zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji+1,jj,jk) ) * ( puu(ji,jj,jk,Kmm) + puu(ji,jj,jk-1,Kmm) )
-            zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji,jj+1,jk) ) * ( pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk-1,Kmm) )
+            zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk) + zfw(ji+1,jj,jk) ) * ( puu(ji,jj,jk,Kmm) + puu(ji,jj,jk-1,Kmm) )
+            zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk) + zfw(ji,jj+1,jk) ) * ( pvv(ji,jj,jk,Kmm) + pvv(ji,jj,jk-1,Kmm) )
          END_2D
       END DO
       DO_3D( 0, 0, 0, 0, 1, jpkm1 )             ! divergence of vertical momentum flux divergence
-         puu(ji,jj,jk,Krhs) =  puu(ji,jj,jk,Krhs) - ( zfu_uw(ji,jj,jk) - zfu_uw(ji,jj,jk+1) ) * r1_e1e2u(ji,jj)   &
-            &                                       / e3u(ji,jj,jk,Kmm)
-         pvv(ji,jj,jk,Krhs) =  pvv(ji,jj,jk,Krhs) - ( zfv_vw(ji,jj,jk) - zfv_vw(ji,jj,jk+1) ) * r1_e1e2v(ji,jj)   &
-            &                                       / e3v(ji,jj,jk,Kmm)
+         puu(ji,jj,jk,Krhs) =  puu(ji,jj,jk,Krhs) - ( zfu_uw(ji,jj,jk) - zfu_uw(ji,jj,jk+1) ) * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm)
+         pvv(ji,jj,jk,Krhs) =  pvv(ji,jj,jk,Krhs) - ( zfv_vw(ji,jj,jk) - zfv_vw(ji,jj,jk+1) ) * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm)
       END_3D
       !
       IF( l_trddyn ) THEN                       ! save the vertical advection trend for diagnostic
diff --git a/src/OCE/DYN/dynhpg.F90 b/src/OCE/DYN/dynhpg.F90
index 145c7f9e17407167fc54774c8fe282f407e31f8b..6cdd91ccd2919700cc6f4f06061130f19ab72d8c 100644
--- a/src/OCE/DYN/dynhpg.F90
+++ b/src/OCE/DYN/dynhpg.F90
@@ -369,13 +369,13 @@ CONTAINS
          IF( iku > 1 ) THEN            ! on i-direction (level 2 or more)
             puu  (ji,jj,iku,Krhs) = puu(ji,jj,iku,Krhs) - zhpi(ji,jj,iku)         ! subtract old value
             zhpi(ji,jj,iku) = zhpi(ji,jj,iku-1)                   &   ! compute the new one
-               &            + zcoef2 * ( rhd(ji+1,jj,iku-1) - rhd(ji,jj,iku-1) + zgru(ji,jj) ) * r1_e1u(ji,jj)
+               &            + zcoef2 * ( ( rhd(ji+1,jj,iku-1) - rhd(ji,jj,iku-1) ) + zgru(ji,jj) ) * r1_e1u(ji,jj)
             puu  (ji,jj,iku,Krhs) = puu(ji,jj,iku,Krhs) + zhpi(ji,jj,iku)         ! add the new one to the general momentum trend
          ENDIF
          IF( ikv > 1 ) THEN            ! on j-direction (level 2 or more)
             pvv  (ji,jj,ikv,Krhs) = pvv(ji,jj,ikv,Krhs) - zhpj(ji,jj,ikv)         ! subtract old value
             zhpj(ji,jj,ikv) = zhpj(ji,jj,ikv-1)                   &   ! compute the new one
-               &            + zcoef3 * ( rhd(ji,jj+1,ikv-1) - rhd(ji,jj,ikv-1) + zgrv(ji,jj) ) * r1_e2v(ji,jj)
+               &            + zcoef3 * ( ( rhd(ji,jj+1,ikv-1) - rhd(ji,jj,ikv-1) ) + zgrv(ji,jj) ) * r1_e2v(ji,jj)
             pvv  (ji,jj,ikv,Krhs) = pvv(ji,jj,ikv,Krhs) + zhpj(ji,jj,ikv)         ! add the new one to the general momentum trend
          ENDIF
       END_2D
@@ -456,8 +456,8 @@ CONTAINS
             zcpy(ji,jj) = 1.0_wp
           ELSE IF(ll_tmp2) THEN
             ! no worries about  ssh(ji,jj+1,Kmm) -  ssh(ji,jj  ,Kmm) = 0, it won't happen ! here
-            zcpy(ji,jj) = ABS( (ssh(ji,jj+1,Kmm) + ht_0(ji,jj+1) - ssh(ji,jj,Kmm) - ht_0(ji,jj)) &
-                        &    / (ssh(ji,jj+1,Kmm) - ssh(ji,jj  ,Kmm)) )
+            zcpy(ji,jj) = ABS( ( ( ssh(ji,jj+1,Kmm) + ht_0(ji,jj+1) ) - ( ssh(ji,jj,Kmm) + ht_0(ji,jj) ) ) &   ! add () for NP repro
+                        &      / ( ssh(ji,jj+1,Kmm)                   -   ssh(ji,jj,Kmm)                 ) )
           ELSE
             zcpy(ji,jj) = 0._wp
           END IF
@@ -473,9 +473,9 @@ CONTAINS
             &          * (  e3w(ji  ,jj+1,1,Kmm) * rhd(ji  ,jj+1,1)  &
             &             - e3w(ji  ,jj  ,1,Kmm) * rhd(ji  ,jj  ,1)  )
          !                                   ! s-coordinate pressure gradient correction
-         zuap = -zcoef0 * ( rhd    (ji+1,jj,1) + rhd    (ji,jj,1) )   &
+         zuap = -zcoef0 * ( rhd  (ji+1,jj,1) + rhd  (ji,jj,1) )   &
             &           * ( gde3w(ji+1,jj,1) - gde3w(ji,jj,1) ) * r1_e1u(ji,jj)
-         zvap = -zcoef0 * ( rhd    (ji,jj+1,1) + rhd    (ji,jj,1) )   &
+         zvap = -zcoef0 * ( rhd  (ji,jj+1,1) + rhd  (ji,jj,1) )   &
             &           * ( gde3w(ji,jj+1,1) - gde3w(ji,jj,1) ) * r1_e2v(ji,jj)
          !
          IF( ln_wd_il ) THEN
@@ -663,8 +663,8 @@ CONTAINS
             zcpx(ji,jj) = 1.0_wp
           ELSE IF(ll_tmp2) THEN
             ! no worries about  ssh(ji+1,jj,Kmm) -  ssh(ji  ,jj,Kmm) = 0, it won't happen ! here
-            zcpx(ji,jj) = ABS( (ssh(ji+1,jj,Kmm) + ht_0(ji+1,jj) - ssh(ji,jj,Kmm) - ht_0(ji,jj)) &
-                        &    / (ssh(ji+1,jj,Kmm) - ssh(ji  ,jj,Kmm)) )
+            zcpx(ji,jj) = ABS( ( ( ssh(ji+1,jj,Kmm) + ht_0(ji+1,jj) ) - ( ssh(ji,jj,Kmm) + ht_0(ji,jj) ) ) &  ! add () for NP repro
+                        &    / (   ssh(ji+1,jj,Kmm)                     - ssh(ji,jj,Kmm)                 ) )
           ELSE
             zcpx(ji,jj) = 0._wp
           END IF
@@ -681,8 +681,8 @@ CONTAINS
             zcpy(ji,jj) = 1.0_wp
           ELSE IF(ll_tmp2) THEN
             ! no worries about  ssh(ji,jj+1,Kmm) -  ssh(ji,jj  ,Kmm) = 0, it won't happen ! here
-            zcpy(ji,jj) = ABS( (ssh(ji,jj+1,Kmm) + ht_0(ji,jj+1) - ssh(ji,jj,Kmm) - ht_0(ji,jj)) &
-                        &    / (ssh(ji,jj+1,Kmm) - ssh(ji,jj  ,Kmm)) )
+            zcpy(ji,jj) = ABS( ( ( ssh(ji,jj+1,Kmm) + ht_0(ji,jj+1) ) - ( ssh(ji,jj,Kmm) + ht_0(ji,jj) ) ) &  ! add () for NP repro
+                        &    / (   ssh(ji,jj+1,Kmm)                   -   ssh(ji,jj,Kmm)                 ) )
           ELSE
             zcpy(ji,jj) = 0._wp
           END IF
@@ -709,7 +709,7 @@ CONTAINS
 !!bug gm   Not a true bug, but... zdzz=e3w  for zdzx, zdzy verify what it is really
 
       DO_3D( 1, 1, 1, 1, 2, jpkm1 )  
-         zdrhoz(ji,jj,jk) =   rhd    (ji  ,jj  ,jk) - rhd    (ji,jj,jk-1)
+         zdrhoz(ji,jj,jk) =   rhd  (ji  ,jj  ,jk) - rhd  (ji,jj,jk-1)
          zdzz  (ji,jj,jk) = - gde3w(ji  ,jj  ,jk) + gde3w(ji,jj,jk-1)
       END_3D
 
@@ -727,7 +727,7 @@ CONTAINS
          z1_cff = zdrhoz(ji,jj,jk) + zdrhoz(ji,jj,jk+1)
          zdrho_k(ji,jj,jk) = cffw / SIGN( MAX( ABS(z1_cff), zep ), z1_cff )
          zdz_k(ji,jj,jk) = 2._wp *   zdzz(ji,jj,jk) * zdzz(ji,jj,jk+1)   &
-            &                  / ( zdzz(ji,jj,jk) + zdzz(ji,jj,jk+1) )
+            &                    / ( zdzz(ji,jj,jk) + zdzz(ji,jj,jk+1) )
       END_3D
 
       !----------------------------------------------------------------------------------
@@ -743,7 +743,7 @@ CONTAINS
       DO_2D( 1, 1, 1, 1 )
          IF ( mbkt(ji,jj)>1 ) THEN
             iktb = mbkt(ji,jj)
-            zdrho_k(ji,jj,iktb) = aco_bc_vrt * (     rhd(ji,jj,iktb) -     rhd(ji,jj,iktb-1) ) - bco_bc_vrt * zdrho_k(ji,jj,iktb-1)
+            zdrho_k(ji,jj,iktb) = aco_bc_vrt * (   rhd(ji,jj,iktb) -   rhd(ji,jj,iktb-1) ) - bco_bc_vrt * zdrho_k(ji,jj,iktb-1)
             zdz_k  (ji,jj,iktb) = aco_bc_vrt * (-gde3w(ji,jj,iktb) + gde3w(ji,jj,iktb-1) ) - bco_bc_vrt * zdz_k  (ji,jj,iktb-1) 
          END IF
       END_2D
@@ -772,14 +772,14 @@ CONTAINS
       !-------------------------------------------------------------
 
       DO_3D( 0, 1, 0, 1, 2, jpkm1 )
-         z_rho_k(ji,jj,jk) = zcoef0 * (   rhd    (ji,jj,jk) + rhd    (ji,jj,jk-1) )                                   &
+         z_rho_k(ji,jj,jk) = zcoef0 * (   rhd  (ji,jj,jk) + rhd  (ji,jj,jk-1) )                                               &
             &                       * ( - gde3w(ji,jj,jk) + gde3w(ji,jj,jk-1) )                                               &
             &                       + z_grav_10 * (                                                                           &
-            &     (   zdrho_k  (ji,jj,jk) - zdrho_k  (ji,jj,jk-1) )                                                           &
-            &   * ( - gde3w(ji,jj,jk) + gde3w(ji,jj,jk-1) - z1_12 * ( zdz_k  (ji,jj,jk) + zdz_k  (ji,jj,jk-1) ) )             &
-            &   - ( zdz_k    (ji,jj,jk) - zdz_k    (ji,jj,jk-1) )                                                             &
-            &   * ( rhd    (ji,jj,jk) - rhd    (ji,jj,jk-1) - z1_12 * ( zdrho_k(ji,jj,jk) + zdrho_k(ji,jj,jk-1) ) )   &
-            &                             )
+            &     (     zdrho_k(ji,jj,jk) - zdrho_k(ji,jj,jk-1) )                                                             &
+            &   * ( - ( gde3w(  ji,jj,jk) - gde3w(  ji,jj,jk-1) ) - z1_12 * ( zdz_k  (ji,jj,jk) + zdz_k  (ji,jj,jk-1) ) )     &
+            &   - (     zdz_k(  ji,jj,jk) - zdz_k(  ji,jj,jk-1) )                                                             &
+            &   * (   (   rhd(  ji,jj,jk) -   rhd(  ji,jj,jk-1) ) - z1_12 * ( zdrho_k(ji,jj,jk) + zdrho_k(ji,jj,jk-1) ) )     &
+            &                                     )
       END_3D
 
       !----------------------------------------------------------------------------------------
@@ -835,28 +835,28 @@ CONTAINS
          ! Walls coming from left: should check from 2 to jpi-1 (and jpj=2-jpj)
          DO_2D( 0, 0, 0, 1 )
             IF ( umask(ji,jj,jk) > 0.5_wp .AND. umask(ji-1,jj,jk) < 0.5_wp .AND. umask(ji+1,jj,jk) > 0.5_wp)  THEN
-               zz_drho_i(ji,jj) = aco_bc_hor * ( rhd    (ji+1,jj,jk) - rhd    (ji,jj,jk) ) - bco_bc_hor * zdrho_i(ji+1,jj,jk)
+               zz_drho_i(ji,jj) = aco_bc_hor * ( rhd  (ji+1,jj,jk) - rhd  (ji,jj,jk) ) - bco_bc_hor * zdrho_i(ji+1,jj,jk)
                zz_dz_i  (ji,jj) = aco_bc_hor * (-gde3w(ji+1,jj,jk) + gde3w(ji,jj,jk) ) - bco_bc_hor * zdz_i  (ji+1,jj,jk)
             END IF
          END_2D
          ! Walls coming from right: should check from 3 to jpi (and jpj=2-jpj)
          DO_2D( -1, 1, 0, 1 )
             IF ( umask(ji,jj,jk) < 0.5_wp .AND. umask(ji-1,jj,jk) > 0.5_wp .AND. umask(ji-2,jj,jk) > 0.5_wp) THEN
-               zz_drho_i(ji,jj) = aco_bc_hor * ( rhd    (ji,jj,jk) - rhd    (ji-1,jj,jk) ) - bco_bc_hor * zdrho_i(ji-1,jj,jk)
+               zz_drho_i(ji,jj) = aco_bc_hor * ( rhd  (ji,jj,jk) - rhd  (ji-1,jj,jk) ) - bco_bc_hor * zdrho_i(ji-1,jj,jk)
                zz_dz_i  (ji,jj) = aco_bc_hor * (-gde3w(ji,jj,jk) + gde3w(ji-1,jj,jk) ) - bco_bc_hor * zdz_i  (ji-1,jj,jk)
             END IF
          END_2D
          ! Walls coming from left: should check from 2 to jpj-1 (and jpi=2-jpi)
          DO_2D( 0, 1, 0, 0 )
             IF ( vmask(ji,jj,jk) > 0.5_wp .AND. vmask(ji,jj-1,jk) < 0.5_wp .AND. vmask(ji,jj+1,jk) > 0.5_wp)  THEN
-               zz_drho_j(ji,jj) = aco_bc_hor * ( rhd    (ji,jj+1,jk) - rhd    (ji,jj,jk) ) - bco_bc_hor * zdrho_j(ji,jj+1,jk)
+               zz_drho_j(ji,jj) = aco_bc_hor * ( rhd  (ji,jj+1,jk) - rhd  (ji,jj,jk) ) - bco_bc_hor * zdrho_j(ji,jj+1,jk)
                zz_dz_j  (ji,jj) = aco_bc_hor * (-gde3w(ji,jj+1,jk) + gde3w(ji,jj,jk) ) - bco_bc_hor * zdz_j  (ji,jj+1,jk)
             END IF
          END_2D
          ! Walls coming from right: should check from 3 to jpj (and jpi=2-jpi)
          DO_2D( 0, 1, -1, 1 )
             IF ( vmask(ji,jj,jk) < 0.5_wp .AND. vmask(ji,jj-1,jk) > 0.5_wp .AND. vmask(ji,jj-2,jk) > 0.5_wp) THEN
-               zz_drho_j(ji,jj) = aco_bc_hor * ( rhd    (ji,jj,jk) - rhd    (ji,jj-1,jk) ) - bco_bc_hor * zdrho_j(ji,jj-1,jk)
+               zz_drho_j(ji,jj) = aco_bc_hor * ( rhd  (ji,jj,jk) - rhd  (ji,jj-1,jk) ) - bco_bc_hor * zdrho_j(ji,jj-1,jk)
                zz_dz_j  (ji,jj) = aco_bc_hor * (-gde3w(ji,jj,jk) + gde3w(ji,jj-1,jk) ) - bco_bc_hor * zdz_j  (ji,jj-1,jk)
             END IF
          END_2D
@@ -873,25 +873,25 @@ CONTAINS
       DO_3D( 0, 0, 0, 0, 1, jpkm1 )
 ! two -ve signs cancel in next two lines (within zcoef0 and because gde3w is a depth not a height)
          z_rho_i(ji,jj,jk) = zcoef0 * ( rhd    (ji+1,jj,jk) + rhd    (ji,jj,jk) )                                       &
-             &                    * ( gde3w(ji+1,jj,jk) - gde3w(ji,jj,jk) )                                    
+             &                      * ( gde3w(ji+1,jj,jk) - gde3w(ji,jj,jk) )                                    
          IF ( umask(ji-1, jj, jk) > 0.5 .OR. umask(ji+1, jj, jk) > 0.5 ) THEN
             z_rho_i(ji,jj,jk) = z_rho_i(ji,jj,jk) - z_grav_10 * (                                                               &
-             &     (   zdrho_i  (ji+1,jj,jk) - zdrho_i  (ji,jj,jk) )                                                            &
-             &   * ( - gde3w(ji+1,jj,jk) + gde3w(ji,jj,jk) - z1_12 * ( zdz_i  (ji+1,jj,jk) + zdz_i  (ji,jj,jk) ) )              &
-             &   - (   zdz_i    (ji+1,jj,jk) - zdz_i    (ji,jj,jk) )                                                            &
-             &   * (   rhd    (ji+1,jj,jk) - rhd    (ji,jj,jk) - z1_12 * ( zdrho_i(ji+1,jj,jk) + zdrho_i(ji,jj,jk) ) )  &
-             &                                               )
+             &     (     zdrho_i(ji+1,jj,jk) - zdrho_i(ji,jj,jk) )                                                              &
+             &   * ( - ( gde3w(  ji+1,jj,jk) - gde3w(  ji,jj,jk) ) - z1_12 * ( zdz_i  (ji+1,jj,jk) + zdz_i  (ji,jj,jk) ) )      &
+             &   - (     zdz_i(  ji+1,jj,jk) - zdz_i(  ji,jj,jk) )                                                              &
+             &   * (   (   rhd(  ji+1,jj,jk) -   rhd(  ji,jj,jk) ) - z1_12 * ( zdrho_i(ji+1,jj,jk) + zdrho_i(ji,jj,jk) ) )      &
+             &                                                  )
          END IF
   
          z_rho_j(ji,jj,jk) = zcoef0 * ( rhd    (ji,jj+1,jk) + rhd    (ji,jj,jk) )                                       &
              &                    * ( gde3w(ji,jj+1,jk) - gde3w(ji,jj,jk) )                                  
          IF ( vmask(ji, jj-1, jk) > 0.5 .OR. vmask(ji, jj+1, jk) > 0.5 ) THEN
             z_rho_j(ji,jj,jk) = z_rho_j(ji,jj,jk) - z_grav_10 * (                                                               &
-             &     (   zdrho_j  (ji,jj+1,jk) - zdrho_j  (ji,jj,jk) )                                                            &
-             &   * ( - gde3w(ji,jj+1,jk) + gde3w(ji,jj,jk) - z1_12 * ( zdz_j  (ji,jj+1,jk) + zdz_j  (ji,jj,jk) ) )              &
-             &   - (   zdz_j    (ji,jj+1,jk) - zdz_j    (ji,jj,jk) )                                                            &
-             &   * (   rhd    (ji,jj+1,jk) - rhd    (ji,jj,jk) - z1_12 * ( zdrho_j(ji,jj+1,jk) + zdrho_j(ji,jj,jk) ) )  &
-             &                                                 )
+             &     (     zdrho_j(ji,jj+1,jk) - zdrho_j(ji,jj,jk) )                                                              &
+             &   * ( - ( gde3w(  ji,jj+1,jk) - gde3w(  ji,jj,jk) ) - z1_12 * ( zdz_j  (ji,jj+1,jk) + zdz_j  (ji,jj,jk) ) )      &
+             &   - (     zdz_j(  ji,jj+1,jk) - zdz_j(  ji,jj,jk) )                                                              &
+             &   * (   (   rhd(  ji,jj+1,jk) -   rhd(  ji,jj,jk) ) - z1_12 * ( zdrho_j(ji,jj+1,jk) + zdrho_j(ji,jj,jk) ) )      &
+             &                                                  )
          END IF
       END_3D
 
@@ -903,8 +903,8 @@ CONTAINS
       !  Surface value
       ! ---------------
       DO_2D( 0, 0, 0, 0 )
-         zhpi(ji,jj,1) = ( z_rho_k(ji,jj,1) - z_rho_k(ji+1,jj  ,1) - z_rho_i(ji,jj,1) ) * r1_e1u(ji,jj)
-         zhpj(ji,jj,1) = ( z_rho_k(ji,jj,1) - z_rho_k(ji  ,jj+1,1) - z_rho_j(ji,jj,1) ) * r1_e2v(ji,jj)
+         zhpi(ji,jj,1) = ( ( z_rho_k(ji,jj,1) - z_rho_k(ji+1,jj  ,1) ) - z_rho_i(ji,jj,1) ) * r1_e1u(ji,jj)   ! add () for NP repro
+         zhpj(ji,jj,1) = ( ( z_rho_k(ji,jj,1) - z_rho_k(ji  ,jj+1,1) ) - z_rho_j(ji,jj,1) ) * r1_e2v(ji,jj)
          IF( ln_wd_il ) THEN
            zhpi(ji,jj,1) = zhpi(ji,jj,1) * zcpx(ji,jj)
            zhpj(ji,jj,1) = zhpj(ji,jj,1) * zcpy(ji,jj) 
@@ -1007,8 +1007,8 @@ CONTAINS
                zcpx(ji,jj) = 1.0_wp
             ELSE IF(ll_tmp2) THEN
                ! no worries about  ssh(ji+1,jj,Kmm) -  ssh(ji  ,jj,Kmm) = 0, it won't happen ! here
-               zcpx(ji,jj) = ABS( (ssh(ji+1,jj,Kmm) + ht_0(ji+1,jj) - ssh(ji,jj,Kmm) - ht_0(ji,jj)) &
-                           &    / (ssh(ji+1,jj,Kmm) -  ssh(ji  ,jj,Kmm)) )
+               zcpx(ji,jj) = ABS( ( ( ssh(ji+1,jj,Kmm) + ht_0(ji+1,jj) ) - ( ssh(ji,jj,Kmm) + ht_0(ji,jj) ) ) &
+                  &             / (   ssh(ji+1,jj,Kmm)                   -  ssh(ji,jj,Kmm)                  ) )
                zcpx(ji,jj) = MAX(MIN( zcpx(ji,jj) , 1.0_wp),0.0_wp)
             ELSE
                zcpx(ji,jj) = 0._wp
@@ -1026,8 +1026,8 @@ CONTAINS
                zcpy(ji,jj) = 1.0_wp
             ELSE IF(ll_tmp2) THEN
                ! no worries about  ssh(ji,jj+1,Kmm) -  ssh(ji,jj  ,Kmm) = 0, it won't happen ! here
-               zcpy(ji,jj) = ABS( (ssh(ji,jj+1,Kmm) + ht_0(ji,jj+1) - ssh(ji,jj,Kmm) - ht_0(ji,jj)) &
-                           &    / (ssh(ji,jj+1,Kmm) -  ssh(ji,jj  ,Kmm)) )
+               zcpy(ji,jj) = ABS( ( ( ssh(ji,jj+1,Kmm) + ht_0(ji,jj+1) ) - ( ssh(ji,jj,Kmm) + ht_0(ji,jj) ) ) &
+                           &    / (   ssh(ji,jj+1,Kmm)                   -   ssh(ji,jj,Kmm)                 ) )
                zcpy(ji,jj) = MAX(MIN( zcpy(ji,jj) , 1.0_wp),0.0_wp)
             ELSE
                zcpy(ji,jj) = 0._wp
diff --git a/src/OCE/DYN/dynldf_iso.F90 b/src/OCE/DYN/dynldf_iso.F90
index 891d8842cc5955dd9f3ea41c56aaf819a160d321..8ee3d4f7611f0417bf0f5eef8acd08ab057995b4 100644
--- a/src/OCE/DYN/dynldf_iso.F90
+++ b/src/OCE/DYN/dynldf_iso.F90
@@ -200,8 +200,8 @@ CONTAINS
                zcof1 = - zaht_0 * e2t(ji,jj) * zmskt * 0.5  * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) )
 
                ziut(ji,jj) = (  zabe1 * ( puu(ji,jj,jk,Kbb) - puu(ji-1,jj,jk,Kbb) )    &
-                  &           + zcof1 * ( zdku (ji,jj) + zdk1u(ji-1,jj)      &
-                  &                      +zdk1u(ji,jj) + zdku (ji-1,jj) )  ) * tmask(ji,jj,jk)
+                  &           + zcof1 * ( ( zdku (ji,jj) + zdk1u(ji-1,jj) )            & ! add () for NP repro
+                  &                      +( zdk1u(ji,jj) + zdku (ji-1,jj) ) )  ) * tmask(ji,jj,jk)
             END_2D
          ELSE                   ! other coordinate system (zco or sco) : e3t
             DO_2D( 0, 1, 0, 0 )
@@ -214,8 +214,8 @@ CONTAINS
                zcof1 = - zaht_0 * e2t(ji,jj) * zmskt * 0.5  * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) )
 
                ziut(ji,jj) = (  zabe1 * ( puu(ji,jj,jk,Kbb) - puu(ji-1,jj,jk,Kbb) )   &
-                  &           + zcof1 * ( zdku (ji,jj) + zdk1u(ji-1,jj)     &
-                  &                      +zdk1u(ji,jj) + zdku (ji-1,jj) )  ) * tmask(ji,jj,jk)
+                  &           + zcof1 * ( ( zdku (ji,jj) + zdk1u(ji-1,jj) )           & ! add () for NP repro
+                  &                      +( zdk1u(ji,jj) + zdku (ji-1,jj) ) )  ) * tmask(ji,jj,jk)
             END_2D
          ENDIF
 
@@ -230,8 +230,8 @@ CONTAINS
             zcof2 = - zaht_0 * e1f(ji,jj) * zmskf * 0.5  * ( vslp(ji+1,jj,jk) + vslp(ji,jj,jk) )
 
             zjuf(ji,jj) = (  zabe2 * ( puu(ji,jj+1,jk,Kbb) - puu(ji,jj,jk,Kbb) )   &
-               &           + zcof2 * ( zdku (ji,jj+1) + zdk1u(ji,jj)     &
-               &                      +zdk1u(ji,jj+1) + zdku (ji,jj) )  ) * fmask(ji,jj,jk)
+               &           + zcof2 * ( ( zdku (ji,jj+1) + zdk1u(ji,jj) )           & ! add () for NP repro
+               &                      +( zdk1u(ji,jj+1) + zdku (ji,jj) ) )  ) * fmask(ji,jj,jk)
          END_2D
 
          !                                |   t   |
@@ -250,8 +250,8 @@ CONTAINS
             zcof1 = - zaht_0 * e2f(ji,jj) * zmskf * 0.5 * ( uslp(ji,jj+1,jk) + uslp(ji,jj,jk) )
 
             zivf(ji,jj) = (  zabe1 * ( pvv(ji+1,jj,jk,Kbb) - pvv(ji,jj,jk,Kbb) )    &
-               &           + zcof1 * (  zdkv (ji,jj) + zdk1v(ji+1,jj)      &
-               &                      + zdk1v(ji,jj) + zdkv (ji+1,jj) )  ) * fmask(ji,jj,jk)
+               &           + zcof1 * (  ( zdkv (ji,jj) + zdk1v(ji+1,jj) )           & ! add () for NP repro
+               &                      + ( zdk1v(ji,jj) + zdkv (ji+1,jj) ) )  ) * fmask(ji,jj,jk)
          END_2D
 
          ! j-flux at t-point
@@ -267,8 +267,8 @@ CONTAINS
                zcof2 = - zaht_0 * e1t(ji,jj) * zmskt * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) )
 
                zjvt(ji,jj) = (  zabe2 * ( pvv(ji,jj,jk,Kbb) - pvv(ji,jj-1,jk,Kbb) )    &
-                  &           + zcof2 * ( zdkv (ji,jj-1) + zdk1v(ji,jj)      &
-                  &                      +zdk1v(ji,jj-1) + zdkv (ji,jj) )  ) * tmask(ji,jj,jk)
+                  &           + zcof2 * ( ( zdkv (ji,jj-1) + zdk1v(ji,jj) )            & ! add () for NP repro
+                  &                      +( zdk1v(ji,jj-1) + zdkv (ji,jj) ) )  ) * tmask(ji,jj,jk)
             END_2D
          ELSE                   ! other coordinate system (zco or sco) : e3t
             DO_2D( 1, 0, 0, 1 )
@@ -281,8 +281,8 @@ CONTAINS
                zcof2 = - zaht_0 * e1t(ji,jj) * zmskt * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) )
 
                zjvt(ji,jj) = (  zabe2 * ( pvv(ji,jj,jk,Kbb) - pvv(ji,jj-1,jk,Kbb) )   &
-                  &           + zcof2 * ( zdkv (ji,jj-1) + zdk1v(ji,jj)     &
-                  &                      +zdk1v(ji,jj-1) + zdkv (ji,jj) )  ) * tmask(ji,jj,jk)
+                  &           + zcof2 * ( ( zdkv (ji,jj-1) + zdk1v(ji,jj) )           & ! add () for NP repro
+                  &                      +( zdk1v(ji,jj-1) + zdkv (ji,jj) ) )  ) * tmask(ji,jj,jk)
             END_2D
          ENDIF
 
@@ -290,12 +290,10 @@ CONTAINS
          ! Second derivative (divergence) and add to the general trend
          ! -----------------------------------------------------------
          DO_2D( 0, 0, 0, 0 )      !!gm Question vectop possible??? !!bug
-            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + (  ziut(ji+1,jj) - ziut(ji,jj  )    &
-               &                           + zjuf(ji  ,jj) - zjuf(ji,jj-1)  ) * r1_e1e2u(ji,jj)   &
-               &                           / e3u(ji,jj,jk,Kmm)
-            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + (  zivf(ji,jj  ) - zivf(ji-1,jj)    &
-               &                           + zjvt(ji,jj+1) - zjvt(ji,jj  )  ) * r1_e1e2v(ji,jj)   &
-               &                           / e3v(ji,jj,jk,Kmm)
+            puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + (  ( ziut(ji+1,jj) - ziut(ji,jj  ) )    &   ! add () for NP repro
+               &                                       + ( zjuf(ji  ,jj) - zjuf(ji,jj-1) )  ) * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm)
+            pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + (  ( zivf(ji,jj  ) - zivf(ji-1,jj) )    &   ! add () for NP repro
+               &                                       + ( zjvt(ji,jj+1) - zjvt(ji,jj  ) )  ) * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm)
          END_2D
          !                                             ! ===============
       END DO                                           !   End of slab
@@ -366,10 +364,10 @@ CONTAINS
                zcof3 = - e2u(ji,jj) * zmkt * zuwslpi
                zcof4 = - e1u(ji,jj) * zmkf * zuwslpj
                ! vertical flux on u field
-               zfuw(ji,jk) = zcof3 * (  zdiu (ji,jk-1) + zdiu (ji+1,jk-1)      &
-                  &                   + zdiu (ji,jk  ) + zdiu (ji+1,jk  )  )   &
-                  &        + zcof4 * (  zdj1u(ji,jk-1) + zdju (ji  ,jk-1)      &
-                  &                   + zdj1u(ji,jk  ) + zdju (ji  ,jk  )  )
+               zfuw(ji,jk) = zcof3 * (  ( zdiu (ji,jk-1) + zdiu (ji+1,jk-1) )      &  ! add () for  NP repro
+                  &                   + ( zdiu (ji,jk  ) + zdiu (ji+1,jk  ) )  )   &
+                  &        + zcof4 * (  ( zdj1u(ji,jk-1) + zdju (ji  ,jk-1) )      &  ! add () for  NP repro
+                  &                   + ( zdj1u(ji,jk  ) + zdju (ji  ,jk  ) )  )
                ! vertical mixing coefficient (akzu)
                ! Note: zcof0 include zaht_0, so divided by zaht_0 to obtain slp^2 * zaht_0
                akzu(ji,jj,jk) = ( zuwslpi * zuwslpi + zuwslpj * zuwslpj ) / zaht_0
@@ -392,10 +390,10 @@ CONTAINS
                zcof3 = - e2v(ji,jj) * zmkf * zvwslpi
                zcof4 = - e1v(ji,jj) * zmkt * zvwslpj
                ! vertical flux on v field
-               zfvw(ji,jk) = zcof3 * (  zdiv (ji,jk-1) + zdiv (ji-1,jk-1)      &
-                  &                   + zdiv (ji,jk  ) + zdiv (ji-1,jk  )  )   &
-                  &        + zcof4 * (  zdjv (ji,jk-1) + zdj1v(ji  ,jk-1)      &
-                  &                   + zdjv (ji,jk  ) + zdj1v(ji  ,jk  )  )
+               zfvw(ji,jk) = zcof3 * (  ( zdiv (ji,jk-1) + zdiv (ji-1,jk-1) )      &  ! add () for  NP repro
+                  &                   + ( zdiv (ji,jk  ) + zdiv (ji-1,jk  ) )  )   &
+                  &        + zcof4 * (  ( zdjv (ji,jk-1) + zdj1v(ji  ,jk-1) )      &  ! add () for  NP repro
+                  &                   + ( zdjv (ji,jk  ) + zdj1v(ji  ,jk  ) )  )
                ! vertical mixing coefficient (akzv)
                ! Note: zcof0 include zaht_0, so divided by zaht_0 to obtain slp^2 * zaht_0
                akzv(ji,jj,jk) = ( zvwslpi * zvwslpi + zvwslpj * zvwslpj ) / zaht_0
@@ -407,10 +405,8 @@ CONTAINS
          ! -------------------------------------------------------------------
          DO jk = 1, jpkm1
             DO ji = ntsi, ntei
-               puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + ( zfuw(ji,jk) - zfuw(ji,jk+1) ) * r1_e1e2u(ji,jj)   &
-                  &               / e3u(ji,jj,jk,Kmm)
-               pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + ( zfvw(ji,jk) - zfvw(ji,jk+1) ) * r1_e1e2v(ji,jj)   &
-                  &               / e3v(ji,jj,jk,Kmm)
+               puu(ji,jj,jk,Krhs) = puu(ji,jj,jk,Krhs) + ( zfuw(ji,jk) - zfuw(ji,jk+1) ) * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm)
+               pvv(ji,jj,jk,Krhs) = pvv(ji,jj,jk,Krhs) + ( zfvw(ji,jk) - zfvw(ji,jk+1) ) * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm)
             END DO
          END DO
          !                                             ! ===============
diff --git a/src/OCE/DYN/dynldf_lap_blp.F90 b/src/OCE/DYN/dynldf_lap_blp.F90
index 09ae6fe78b107e89def6af8016a01409dffc6dea..2c23827f3ad18e7529099e3858c28f0e19d4b2bc 100644
--- a/src/OCE/DYN/dynldf_lap_blp.F90
+++ b/src/OCE/DYN/dynldf_lap_blp.F90
@@ -114,13 +114,13 @@ CONTAINS
             !
             DO_2D( iij-1, iij, iij-1, iij )
                !                                      ! ahm * e3 * curl  (warning: computed for ji-1,jj-1)
-               zcur(ji-1,jj-1) = ahmf(ji-1,jj-1,jk) * e3f(ji-1,jj-1,jk) * r1_e1e2f(ji-1,jj-1)       &   ! ahmf already * by fmask
-                  &     * (  e2v(ji  ,jj-1) * pv(ji  ,jj-1,jk) - e2v(ji-1,jj-1) * pv(ji-1,jj-1,jk)  &
-                  &        - e1u(ji-1,jj  ) * pu(ji-1,jj  ,jk) + e1u(ji-1,jj-1) * pu(ji-1,jj-1,jk)  )
+               zcur(ji-1,jj-1) = ahmf(ji-1,jj-1,jk) * e3f(ji-1,jj-1,jk) * r1_e1e2f(ji-1,jj-1)          &   ! ahmf already * by fmask
+                  &     * (  ( e2v(ji  ,jj-1) * pv(ji  ,jj-1,jk) - e2v(ji-1,jj-1) * pv(ji-1,jj-1,jk) ) &   ! add () for NP repro
+                  &        - ( e1u(ji-1,jj  ) * pu(ji-1,jj  ,jk) - e1u(ji-1,jj-1) * pu(ji-1,jj-1,jk) )  )
                !                                      ! ahm * div        (warning: computed for ji,jj)
                zdiv(ji,jj)     = ahmt(ji,jj,jk) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kbb)               &   ! ahmt already * by tmask
-                  &     * (  e2u(ji,jj)*e3u(ji,jj,jk,Kbb) * pu(ji,jj,jk) - e2u(ji-1,jj)*e3u(ji-1,jj,jk,Kbb) * pu(ji-1,jj,jk)  &
-                  &        + e1v(ji,jj)*e3v(ji,jj,jk,Kbb) * pv(ji,jj,jk) - e1v(ji,jj-1)*e3v(ji,jj-1,jk,Kbb) * pv(ji,jj-1,jk)  )
+                  &     * (  ( e2u(ji,jj)*e3u(ji,jj,jk,Kbb) * pu(ji,jj,jk) - e2u(ji-1,jj)*e3u(ji-1,jj,jk,Kbb) * pu(ji-1,jj,jk) )  &
+                  &        + ( e1v(ji,jj)*e3v(ji,jj,jk,Kbb) * pv(ji,jj,jk) - e1v(ji,jj-1)*e3v(ji,jj-1,jk,Kbb) * pv(ji,jj-1,jk) )  )
             END_2D
             !
             DO_2D( iij-1, iij-1, iij-1, iij-1 )   ! - curl( curl) + grad( div )
diff --git a/src/OCE/DYN/dynspg.F90 b/src/OCE/DYN/dynspg.F90
index ffd2219a2eff482503a8e24da3f039df87c80e55..3d635744ad477d9b9bdcca0f2a609693692b64ed 100644
--- a/src/OCE/DYN/dynspg.F90
+++ b/src/OCE/DYN/dynspg.F90
@@ -107,10 +107,10 @@ CONTAINS
          IF( ln_apr_dyn .AND. .NOT.ln_dynspg_ts ) THEN   !==  Atmospheric pressure gradient (added later in time-split case) ==!
             zg_2 = grav * 0.5
             DO_2D( 0, 0, 0, 0 )                       ! gradient of Patm using inverse barometer ssh
-               zpgu(ji,jj) = zpgu(ji,jj) + zg_2 * (  ssh_ib (ji+1,jj) - ssh_ib (ji,jj)    &
-                  &                                + ssh_ibb(ji+1,jj) - ssh_ibb(ji,jj)  ) * r1_e1u(ji,jj)
-               zpgv(ji,jj) = zpgv(ji,jj) + zg_2 * (  ssh_ib (ji,jj+1) - ssh_ib (ji,jj)    &
-                  &                                + ssh_ibb(ji,jj+1) - ssh_ibb(ji,jj)  ) * r1_e2v(ji,jj)
+               zpgu(ji,jj) = zpgu(ji,jj) + zg_2 * (  ( ssh_ib (ji+1,jj) - ssh_ib (ji,jj) )    &   ! add () for NP repro
+                  &                                + ( ssh_ibb(ji+1,jj) - ssh_ibb(ji,jj) )  ) * r1_e1u(ji,jj)
+               zpgv(ji,jj) = zpgv(ji,jj) + zg_2 * (  ( ssh_ib (ji,jj+1) - ssh_ib (ji,jj) )    &   ! add () for NP repro
+                  &                                + ( ssh_ibb(ji,jj+1) - ssh_ibb(ji,jj) )  ) * r1_e2v(ji,jj)
             END_2D
          ENDIF
          !
diff --git a/src/OCE/DYN/dynspg_ts.F90 b/src/OCE/DYN/dynspg_ts.F90
index bd40bf5409e9d9b034118816df9ad6f59fc5cf35..ddb60a5068b70a06066150a1e3ef41f2e2f7edc0 100644
--- a/src/OCE/DYN/dynspg_ts.F90
+++ b/src/OCE/DYN/dynspg_ts.F90
@@ -559,7 +559,7 @@ CONTAINS
          !--        ssh    =  ssh   - delta_t' * [ frc + div( flux      ) ]      --!
          !-------------------------------------------------------------------------!
          DO_2D( 0, 0, 0, 0 )
-            zhdiv = (   zhU(ji,jj) - zhU(ji-1,jj) + zhV(ji,jj) - zhV(ji,jj-1)   ) * r1_e1e2t(ji,jj)
+            zhdiv = (   ( zhU(ji,jj) - zhU(ji-1,jj) ) + ( zhV(ji,jj) - zhV(ji,jj-1) )  ) * r1_e1e2t(ji,jj)
             ssha_e(ji,jj) = (  sshn_e(ji,jj) - rDt_e * ( ssh_frc(ji,jj) + zhdiv )  ) * ssmask(ji,jj)
          END_2D
          !
diff --git a/src/OCE/DYN/dynzdf.F90 b/src/OCE/DYN/dynzdf.F90
index fed10f23182fea2131de19cd81d668d71ed3aec5..b460e35fe2b099a6e111826cf931a84d060d34c2 100644
--- a/src/OCE/DYN/dynzdf.F90
+++ b/src/OCE/DYN/dynzdf.F90
@@ -141,18 +141,18 @@ CONTAINS
             DO_1Di( 0, 0 )      ! Add bottom/top stress due to barotropic component only
                iku = mbku(ji,jj)         ! ocean bottom level at u- and v-points 
                ikv = mbkv(ji,jj)         ! (deepest ocean u- and v-points)
-               puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + zDt_2 *( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * uu_b(ji,jj,Kaa)   &
+               puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + zDt_2 * ( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * uu_b(ji,jj,Kaa)   &
                   &                                            / e3u(ji,jj,iku,Kaa)
-               pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + zDt_2 *( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vv_b(ji,jj,Kaa)   &
+               pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + zDt_2 * ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vv_b(ji,jj,Kaa)   &
                   &                                            / e3v(ji,jj,ikv,Kaa)
             END_1D
             IF( ln_isfcav.OR.ln_drgice_imp ) THEN    ! Ocean cavities (ISF)
                DO_1Di( 0, 0 )
                   iku = miku(ji,jj)         ! top ocean level at u- and v-points 
                   ikv = mikv(ji,jj)         ! (first wet ocean u- and v-points)
-                  puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + zDt_2 *( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * uu_b(ji,jj,Kaa)   &
+                  puu(ji,jj,iku,Kaa) = puu(ji,jj,iku,Kaa) + zDt_2 * ( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * uu_b(ji,jj,Kaa)   &
                      &                                            / e3u(ji,jj,iku,Kaa)
-                  pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + zDt_2 *( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * vv_b(ji,jj,Kaa)   &
+                  pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + zDt_2 * ( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * vv_b(ji,jj,Kaa)   &
                      &                                            / e3v(ji,jj,ikv,Kaa)
                END_1D
             END IF
@@ -167,10 +167,10 @@ CONTAINS
             CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu)
                DO_2Dik( 0, 0,   1, jpkm1, 1 )
                   z1_e3ua =  1._wp  / e3u(ji,jj,jk,Kaa)   ! after scale factor at U-point
-                  zzwi = - zDt_2 * ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) + akzu(ji,jj,jk  ) )   &
-                     &         / e3uw(ji,jj,jk  ,Kmm) * z1_e3ua * wumask(ji,jj,jk  )
-                  zzws = - zDt_2 * ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) + akzu(ji,jj,jk+1) )   &
-                     &         / e3uw(ji,jj,jk+1,Kmm) * z1_e3ua * wumask(ji,jj,jk+1)
+                  zzwi = - zDt_2 * ( ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) ) + akzu(ji,jj,jk  ) )   &   ! add () for NP repro
+                     &             / e3uw(ji,jj,jk  ,Kmm) * z1_e3ua * wumask(ji,jj,jk  )
+                  zzws = - zDt_2 * ( ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) ) + akzu(ji,jj,jk+1) )   &   ! add () for NP repro
+                     &             / e3uw(ji,jj,jk+1,Kmm) * z1_e3ua * wumask(ji,jj,jk+1)
                   zWui = ( wi(ji,jj,jk  ) + wi(ji+1,jj,jk  ) ) * z1_e3ua
                   zWus = ( wi(ji,jj,jk+1) + wi(ji+1,jj,jk+1) ) * z1_e3ua
                   zwi(ji,jk) = zzwi + zDt_2 * MIN( zWui, 0._wp ) 
@@ -181,9 +181,9 @@ CONTAINS
                DO_2Dik( 0, 0,   1, jpkm1, 1 )
                   z1_e3ua =  1._wp  / e3u(ji,jj,jk,Kaa)   ! after scale factor at U-point
                   zzwi = - zDt_2 * ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) )   &
-                     &         / e3uw(ji,jj,jk  ,Kmm) * z1_e3ua * wumask(ji,jj,jk  )
+                     &           / e3uw(ji,jj,jk  ,Kmm) * z1_e3ua * wumask(ji,jj,jk  )
                   zzws = - zDt_2 * ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) )   &
-                     &         / e3uw(ji,jj,jk+1,Kmm) * z1_e3ua * wumask(ji,jj,jk+1)
+                     &           / e3uw(ji,jj,jk+1,Kmm) * z1_e3ua * wumask(ji,jj,jk+1)
                   zWui = ( wi(ji,jj,jk  ) + wi(ji+1,jj,jk  ) ) * z1_e3ua
                   zWus = ( wi(ji,jj,jk+1) + wi(ji+1,jj,jk+1) ) * z1_e3ua
                   zwi(ji,jk) = zzwi + zDt_2 * MIN( zWui, 0._wp )
@@ -196,7 +196,7 @@ CONTAINS
             DO_1Di( 0, 0 )     !* Surface boundary conditions
                zwi(ji,1) = 0._wp
                zzws = - zDt_2 * ( avm(ji+1,jj,2) + avm(ji  ,jj,2) )   &
-                  &         / ( e3u(ji,jj,1,Kaa) * e3uw(ji,jj,2,Kmm) ) * wumask(ji,jj,2)
+                  &           / ( e3u(ji,jj,1,Kaa) * e3uw(ji,jj,2,Kmm) ) * wumask(ji,jj,2)
                zWus = ( wi(ji  ,jj,2) +  wi(ji+1,jj,2) ) / e3u(ji,jj,1,Kaa)
                zws(ji,1) = zzws - zDt_2 * MAX( zWus, 0._wp )
                zwd(ji,1) = 1._wp - zzws - zDt_2 * ( MIN( zWus, 0._wp ) )
@@ -205,10 +205,10 @@ CONTAINS
             SELECT CASE( nldf_dyn )
             CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu)
                DO_2Dik( 0, 0,   1, jpkm1, 1 )
-                  zzwi = - zDt_2 * ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) + akzu(ji,jj,jk  ) )   &
-                     &         / ( e3u(ji,jj,jk,Kaa) * e3uw(ji,jj,jk  ,Kmm) ) * wumask(ji,jj,jk  )
-                  zzws = - zDt_2 * ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) + akzu(ji,jj,jk+1) )   &
-                     &         / ( e3u(ji,jj,jk,Kaa) * e3uw(ji,jj,jk+1,Kmm) ) * wumask(ji,jj,jk+1)
+                  zzwi = - zDt_2 * ( ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) ) + akzu(ji,jj,jk  ) )   &   ! add () for NP repro
+                     &           / ( e3u(ji,jj,jk,Kaa) * e3uw(ji,jj,jk  ,Kmm) ) * wumask(ji,jj,jk  )
+                  zzws = - zDt_2 * ( ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) ) + akzu(ji,jj,jk+1) )   &   ! add () for NP repro
+                     &           / ( e3u(ji,jj,jk,Kaa) * e3uw(ji,jj,jk+1,Kmm) ) * wumask(ji,jj,jk+1)
                   zwi(ji,jk) = zzwi
                   zws(ji,jk) = zzws
                   zwd(ji,jk) = 1._wp - zzwi - zzws
@@ -216,9 +216,9 @@ CONTAINS
             CASE DEFAULT               ! iso-level lateral mixing
                DO_2Dik( 0, 0,   1, jpkm1, 1 )
                   zzwi = - zDt_2 * ( avm(ji+1,jj,jk  ) + avm(ji,jj,jk  ) )    &
-                     &         / ( e3u(ji,jj,jk,Kaa) * e3uw(ji,jj,jk  ,Kmm) ) * wumask(ji,jj,jk  )
+                     &           / ( e3u(ji,jj,jk,Kaa) * e3uw(ji,jj,jk  ,Kmm) ) * wumask(ji,jj,jk  )
                   zzws = - zDt_2 * ( avm(ji+1,jj,jk+1) + avm(ji,jj,jk+1) )    &
-                     &         / ( e3u(ji,jj,jk,Kaa) * e3uw(ji,jj,jk+1,Kmm) ) * wumask(ji,jj,jk+1)
+                     &           / ( e3u(ji,jj,jk,Kaa) * e3uw(ji,jj,jk+1,Kmm) ) * wumask(ji,jj,jk+1)
                   zwi(ji,jk) = zzwi
                   zws(ji,jk) = zzws
                   zwd(ji,jk) = 1._wp - zzwi - zzws
@@ -241,15 +241,13 @@ CONTAINS
          IF ( ln_drgimp ) THEN      ! implicit bottom friction
             DO_1Di( 0, 0 )
                iku = mbku(ji,jj)       ! ocean bottom level at u- and v-points
-               zwd(ji,iku) = zwd(ji,iku) - zDt_2 *( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) )   &
-                  &                                    / e3u(ji,jj,iku,Kaa)
+               zwd(ji,iku) = zwd(ji,iku) - zDt_2 *( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) / e3u(ji,jj,iku,Kaa)
             END_1D
             IF ( ln_isfcav.OR.ln_drgice_imp ) THEN   ! top friction (always implicit)
                DO_1Di( 0, 0 )
                !!gm   top Cd is masked (=0 outside cavities) no need of test on mik>=2  ==>> it has been suppressed
                   iku = miku(ji,jj)       ! ocean top level at u- and v-points 
-                  zwd(ji,iku) = zwd(ji,iku) - zDt_2 *( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) )    &
-                     &                                    / e3u(ji,jj,iku,Kaa)
+                  zwd(ji,iku) = zwd(ji,iku) - zDt_2 *( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) / e3u(ji,jj,iku,Kaa)
                END_1D
             ENDIF
          ENDIF
@@ -277,11 +275,11 @@ CONTAINS
 #if defined key_RK3
             !                                  ! RK3: use only utau (not utau_b)
             puu(ji,jj,1,Kaa) = puu(ji,jj,1,Kaa) + rDt * utauU(ji,jj)   &
-                 &                                 / ( e3u(ji,jj,1,Kaa) * rho0 ) * umask(ji,jj,1)
+                 &                                    / ( e3u(ji,jj,1,Kaa) * rho0 ) * umask(ji,jj,1)
 #else
             !                                  ! MLF: average of utau and utau_b
             puu(ji,jj,1,Kaa) = puu(ji,jj,1,Kaa) + zDt_2 * ( utau_b(ji,jj) + utauU(ji,jj) )   &
-                 &                                 / ( e3u(ji,jj,1,Kaa) * rho0 ) * umask(ji,jj,1)
+                 &                                      / ( e3u(ji,jj,1,Kaa) * rho0 ) * umask(ji,jj,1)
 #endif
          END_1D
          DO_2Dik( 0, 0,     2, jpkm1, 1 )
@@ -304,10 +302,10 @@ CONTAINS
             CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzv)
                DO_2Dik( 0, 0,    1, jpkm1, 1 )
                   z1_e3va = 1._wp / e3v(ji,jj,jk,Kaa)   ! after scale factor at V-point
-                  zzwi = - zDt_2 * ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) + akzv(ji,jj,jk  ) )   &
-                     &         / e3vw(ji,jj,jk  ,Kmm) * z1_e3va * wvmask(ji,jj,jk  )
-                  zzws = - zDt_2 * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) + akzv(ji,jj,jk+1) )   &
-                     &         / e3vw(ji,jj,jk+1,Kmm) * z1_e3va * wvmask(ji,jj,jk+1)
+                  zzwi = - zDt_2 * ( ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) ) + akzv(ji,jj,jk  ) )   &   ! add () for NP repro
+                     &           / e3vw(ji,jj,jk  ,Kmm) * z1_e3va * wvmask(ji,jj,jk  )
+                  zzws = - zDt_2 * ( ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) ) + akzv(ji,jj,jk+1) )   &   ! add () for NP repro
+                     &           / e3vw(ji,jj,jk+1,Kmm) * z1_e3va * wvmask(ji,jj,jk+1)
                   zWvi = ( wi(ji,jj,jk  ) + wi(ji,jj+1,jk  ) ) * z1_e3va
                   zWvs = ( wi(ji,jj,jk+1) + wi(ji,jj+1,jk+1) ) * z1_e3va
                   zwi(ji,jk) = zzwi + zDt_2 * MIN( zWvi, 0._wp )
@@ -318,9 +316,9 @@ CONTAINS
                DO_2Dik( 0, 0,    1, jpkm1, 1 )
                   z1_e3va = 1._wp / e3v(ji,jj,jk,Kaa)   ! after scale factor at V-point
                   zzwi = - zDt_2 * ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) )    &
-                     &         / e3vw(ji,jj,jk  ,Kmm) * z1_e3va * wvmask(ji,jj,jk  )
+                     &           / e3vw(ji,jj,jk  ,Kmm) * z1_e3va * wvmask(ji,jj,jk  )
                   zzws = - zDt_2 * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) )    &
-                     &         / e3vw(ji,jj,jk+1,Kmm) * z1_e3va * wvmask(ji,jj,jk+1)
+                     &           / e3vw(ji,jj,jk+1,Kmm) * z1_e3va * wvmask(ji,jj,jk+1)
                   zWvi = ( wi(ji,jj,jk  ) + wi(ji,jj+1,jk  ) ) * z1_e3va
                   zWvs = ( wi(ji,jj,jk+1) + wi(ji,jj+1,jk+1) ) * z1_e3va
                   zwi(ji,jk) = zzwi  + zDt_2 * MIN( zWvi, 0._wp )
@@ -331,7 +329,7 @@ CONTAINS
             DO_1Di( 0, 0 )   !* Surface boundary conditions
                zwi(ji,1) = 0._wp
                zzws = - zDt_2 * ( avm(ji,jj+1,2) + avm(ji,jj,2) )    &
-                  &         / ( e3v(ji,jj,1,Kaa) * e3vw(ji,jj,2,Kmm) ) * wvmask(ji,jj,2)
+                  &           / ( e3v(ji,jj,1,Kaa) * e3vw(ji,jj,2,Kmm) ) * wvmask(ji,jj,2)
                zWvs = ( wi(ji,jj  ,2) +  wi(ji,jj+1,2) ) / e3v(ji,jj,1,Kaa)
                zws(ji,1 ) = zzws - zDt_2 * MAX( zWvs, 0._wp )
                zwd(ji,1 ) = 1._wp - zzws - zDt_2 * ( MIN( zWvs, 0._wp ) )
@@ -340,10 +338,10 @@ CONTAINS
             SELECT CASE( nldf_dyn )
             CASE( np_lap_i )           ! rotated lateral mixing: add its vertical mixing (akzu)
                DO_2Dik( 0, 0,    1, jpkm1, 1 )
-                  zzwi = - zDt_2 * ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) + akzv(ji,jj,jk  ) )   &
-                     &         / ( e3v(ji,jj,jk,Kaa) * e3vw(ji,jj,jk  ,Kmm) ) * wvmask(ji,jj,jk  )
-                  zzws = - zDt_2 * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) + akzv(ji,jj,jk+1) )   &
-                     &         / ( e3v(ji,jj,jk,Kaa) * e3vw(ji,jj,jk+1,Kmm) ) * wvmask(ji,jj,jk+1)
+                  zzwi = - zDt_2 * ( ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) ) + akzv(ji,jj,jk  ) )   &   ! add () for NP repro
+                     &           / ( e3v(ji,jj,jk,Kaa) * e3vw(ji,jj,jk  ,Kmm) ) * wvmask(ji,jj,jk  )
+                  zzws = - zDt_2 * ( ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) ) + akzv(ji,jj,jk+1) )   &   ! add () for NP repro
+                     &           / ( e3v(ji,jj,jk,Kaa) * e3vw(ji,jj,jk+1,Kmm) ) * wvmask(ji,jj,jk+1)
                   zwi(ji,jk) = zzwi
                   zws(ji,jk) = zzws
                   zwd(ji,jk) = 1._wp - zzwi - zzws
@@ -351,9 +349,9 @@ CONTAINS
             CASE DEFAULT               ! iso-level lateral mixing
                DO_2Dik( 0, 0,    1, jpkm1, 1 )
                   zzwi = - zDt_2 * ( avm(ji,jj+1,jk  ) + avm(ji,jj,jk  ) )    &
-                     &         / ( e3v(ji,jj,jk,Kaa) * e3vw(ji,jj,jk  ,Kmm) ) * wvmask(ji,jj,jk  )
+                     &           / ( e3v(ji,jj,jk,Kaa) * e3vw(ji,jj,jk  ,Kmm) ) * wvmask(ji,jj,jk  )
                   zzws = - zDt_2 * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) )    &
-                     &         / ( e3v(ji,jj,jk,Kaa) * e3vw(ji,jj,jk+1,Kmm) ) * wvmask(ji,jj,jk+1)
+                     &           / ( e3v(ji,jj,jk,Kaa) * e3vw(ji,jj,jk+1,Kmm) ) * wvmask(ji,jj,jk+1)
                   zwi(ji,jk) = zzwi
                   zws(ji,jk) = zzws
                   zwd(ji,jk) = 1._wp - zzwi - zzws
diff --git a/src/OCE/DYN/sshwzv.F90 b/src/OCE/DYN/sshwzv.F90
index 52027ff1beef6f8587a7d307267c539c48526a2f..e6660cf219f5744ecec084b171ab57c47fc0b624 100644
--- a/src/OCE/DYN/sshwzv.F90
+++ b/src/OCE/DYN/sshwzv.F90
@@ -191,7 +191,8 @@ CONTAINS
             ! horizontal divergence of thickness diffusion transport ( velocity multiplied by e3t)
             ! - ML - note: computation already done in dom_vvl_sf_nxt. Could be optimized (not critical and clearer this way)
             DO_2D( nn_hls-1, nn_hls, nn_hls-1, nn_hls )
-               zhdiv(ji,jj,jk) = r1_e1e2t(ji,jj) * ( un_td(ji,jj,jk) - un_td(ji-1,jj,jk) + vn_td(ji,jj,jk) - vn_td(ji,jj-1,jk) )
+               zhdiv(ji,jj,jk) = r1_e1e2t(ji,jj) * ( ( un_td(ji,jj,jk) - un_td(ji-1,jj,jk) )   &   ! add () for NP repro
+               &                                   + ( vn_td(ji,jj,jk) - vn_td(ji,jj-1,jk) ) )
             END_2D
          END DO
          IF( nn_hls == 1)   CALL lbc_lnk('sshwzv', zhdiv, 'T', 1.0_wp)  ! - ML - Perhaps not necessary: not used for horizontal "connexions"
@@ -222,11 +223,10 @@ CONTAINS
 #if defined key_qco
 !!gm slightly faster
             pww(ji,jj,jk) = pww(ji,jj,jk+1) - (  e3t(ji,jj,jk,Kmm) * hdiv(ji,jj,jk)    &
-                 &                               + r1_Dt * e3t_0(ji,jj,jk) * ( r3t(ji,jj,Kaa) - r3t(ji,jj,Kbb) )  ) * tmask(ji,jj,jk)
+                 &                               + r1_Dt * e3t_0(ji,jj,jk) * ( r3t(ji,jj,Kaa) - r3t(ji,jj,Kbb) ) ) * tmask(ji,jj,jk)
 #else
             pww(ji,jj,jk) = pww(ji,jj,jk+1) - (  e3t(ji,jj,jk,Kmm) * hdiv(ji,jj,jk)    &
-               &                                 + r1_Dt * (  e3t(ji,jj,jk,Kaa)        &
-               &                                            - e3t(ji,jj,jk,Kbb)  )   ) * tmask(ji,jj,jk)
+               &                                 + r1_Dt * ( e3t(ji,jj,jk,Kaa) - e3t(ji,jj,jk,Kbb) )  ) * tmask(ji,jj,jk)
 #endif
          END_3D
       ENDIF
@@ -334,7 +334,8 @@ CONTAINS
             ! horizontal divergence of thickness diffusion transport ( velocity multiplied by e3t)
             ! - ML - note: computation already done in dom_vvl_sf_nxt. Could be optimized (not critical and clearer this way)
             DO_2D( nn_hls-1, nn_hls, nn_hls-1, nn_hls )
-               zhdiv(ji,jj,jk) = r1_e1e2t(ji,jj) * ( un_td(ji,jj,jk) - un_td(ji-1,jj,jk) + vn_td(ji,jj,jk) - vn_td(ji,jj-1,jk) )
+               zhdiv(ji,jj,jk) = r1_e1e2t(ji,jj) * ( ( un_td(ji,jj,jk) - un_td(ji-1,jj,jk) )   &   ! had () for NP repro
+                  &                                + ( vn_td(ji,jj,jk) - vn_td(ji,jj-1,jk) ) )
             END_2D
          END DO
          IF( nn_hls == 1)   CALL lbc_lnk('sshwzv', zhdiv, 'T', 1.0_wp)  ! - ML - Perhaps not necessary: not used for horizontal "connexions"
diff --git a/src/OCE/DYN/wet_dry.F90 b/src/OCE/DYN/wet_dry.F90
index 465134503a2995b5d1544e27f1ee7727011e42ea..f1d5e0fdfcbb0029746dbd8b0e7301b6a0911170 100644
--- a/src/OCE/DYN/wet_dry.F90
+++ b/src/OCE/DYN/wet_dry.F90
@@ -179,10 +179,10 @@ CONTAINS
          IF( tmask(ji,jj,1)        < 0.5_wp )   CYCLE    ! we don't care about land cells
          IF( ht_0(ji,jj) - ssh_ref > zdepwd )   CYCLE    ! and cells which are unlikely to dry
          !
-         zflxp(ji,jj) = MAX( zflxu(ji,jj) , 0._wp ) - MIN( zflxu(ji-1,jj  ) , 0._wp )   &
-            &         + MAX( zflxv(ji,jj) , 0._wp ) - MIN( zflxv(ji,  jj-1) , 0._wp ) 
-         zflxn(ji,jj) = MIN( zflxu(ji,jj) , 0._wp ) - MAX( zflxu(ji-1,jj  ) , 0._wp )   &
-            &         + MIN( zflxv(ji,jj) , 0._wp ) - MAX( zflxv(ji,  jj-1) , 0._wp ) 
+         zflxp(ji,jj) = ( MAX( zflxu(ji,jj) , 0._wp ) - MIN( zflxu(ji-1,jj  ) , 0._wp ) )   &   ! add () for NP repro
+            &         + ( MAX( zflxv(ji,jj) , 0._wp ) - MIN( zflxv(ji,  jj-1) , 0._wp ) ) 
+         zflxn(ji,jj) = ( MIN( zflxu(ji,jj) , 0._wp ) - MAX( zflxu(ji-1,jj  ) , 0._wp ) )   &   ! add () for NP repro
+            &         + ( MIN( zflxv(ji,jj) , 0._wp ) - MAX( zflxv(ji,  jj-1) , 0._wp ) ) 
          !
          zdep2 = ht_0(ji,jj) + psshb1(ji,jj) - rn_wdmin1
          IF( zdep2 <= 0._wp ) THEN     ! add more safty, but not necessary
@@ -217,10 +217,10 @@ CONTAINS
             !
             ztmp = e1e2t(ji,jj)
             !
-            zzflxp = MAX( zflxu1(ji,jj) , 0._wp ) - MIN( zflxu1(ji-1,jj  ) , 0._wp)   &
-               &   + MAX( zflxv1(ji,jj) , 0._wp ) - MIN( zflxv1(ji,  jj-1) , 0._wp) 
-            zzflxn = MIN( zflxu1(ji,jj) , 0._wp ) - MAX( zflxu1(ji-1,jj  ) , 0._wp)   &
-               &   + MIN( zflxv1(ji,jj) , 0._wp ) - MAX( zflxv1(ji,  jj-1) , 0._wp) 
+            zzflxp = ( MAX( zflxu1(ji,jj) , 0._wp ) - MIN( zflxu1(ji-1,jj  ) , 0._wp) )   &   ! add () for NP repro
+               &   + ( MAX( zflxv1(ji,jj) , 0._wp ) - MIN( zflxv1(ji,  jj-1) , 0._wp) ) 
+            zzflxn = ( MIN( zflxu1(ji,jj) , 0._wp ) - MAX( zflxu1(ji-1,jj  ) , 0._wp) )   &   ! add () for NP repro
+               &   + ( MIN( zflxv1(ji,jj) , 0._wp ) - MAX( zflxv1(ji,  jj-1) , 0._wp) ) 
             !
             zdep1 = (zzflxp + zzflxn) * z2dt / ztmp
             zdep2 = ht_0(ji,jj) + psshb1(ji,jj) - rn_wdmin1 - z2dt * psshemp(ji,jj)
@@ -312,10 +312,10 @@ CONTAINS
          IF( tmask(ji, jj, 1 ) < 0.5_wp) CYCLE   ! we don't care about land cells
          IF( ht_0(ji,jj) > zdepwd )      CYCLE   ! and cells which are unlikely to dry
          !
-         zflxp(ji,jj) = MAX( zflxu(ji,jj) , 0._wp ) - MIN( zflxu(ji-1,jj  ) , 0._wp )   &
-            &         + MAX( zflxv(ji,jj) , 0._wp ) - MIN( zflxv(ji,  jj-1) , 0._wp ) 
-         zflxn(ji,jj) = MIN( zflxu(ji,jj) , 0._wp ) - MAX( zflxu(ji-1,jj  ) , 0._wp )   &
-            &         + MIN( zflxv(ji,jj) , 0._wp ) - MAX( zflxv(ji,  jj-1) , 0._wp ) 
+         zflxp(ji,jj) = ( MAX( zflxu(ji,jj) , 0._wp ) - MIN( zflxu(ji-1,jj  ) , 0._wp ) )   &   ! add () for NP repro
+            &         + ( MAX( zflxv(ji,jj) , 0._wp ) - MIN( zflxv(ji,  jj-1) , 0._wp ) )
+         zflxn(ji,jj) = ( MIN( zflxu(ji,jj) , 0._wp ) - MAX( zflxu(ji-1,jj  ) , 0._wp ) )   &   ! add () for NP repro
+            &         + ( MIN( zflxv(ji,jj) , 0._wp ) - MAX( zflxv(ji,  jj-1) , 0._wp ) ) 
          !
          zdep2 = ht_0(ji,jj) + sshn_e(ji,jj) - rn_wdmin1
          IF( zdep2 <= 0._wp ) THEN  !add more safety, but not necessary
@@ -340,10 +340,10 @@ CONTAINS
             !
             ztmp = e1e2t(ji,jj)
             !
-            zzflxp = max(zflxu1(ji,jj), 0._wp) - min(zflxu1(ji-1,jj),   0._wp)   &
-               &   + max(zflxv1(ji,jj), 0._wp) - min(zflxv1(ji,  jj-1), 0._wp) 
-            zzflxn = min(zflxu1(ji,jj), 0._wp) - max(zflxu1(ji-1,jj),   0._wp)   &
-               &   + min(zflxv1(ji,jj), 0._wp) - max(zflxv1(ji,  jj-1), 0._wp) 
+            zzflxp = ( MAX(zflxu1(ji,jj), 0._wp) - MIN(zflxu1(ji-1,jj),   0._wp) )   &   ! add () for NP repro
+               &   + ( MAX(zflxv1(ji,jj), 0._wp) - MIN(zflxv1(ji,  jj-1), 0._wp) ) 
+            zzflxn = ( MIN(zflxu1(ji,jj), 0._wp) - MAX(zflxu1(ji-1,jj),   0._wp) )   &   ! add () for NP repro
+               &   + ( MIN(zflxv1(ji,jj), 0._wp) - MAX(zflxv1(ji,  jj-1), 0._wp) ) 
        
             zdep1 = (zzflxp + zzflxn) * z2dt / ztmp
             zdep2 = ht_0(ji,jj) + sshn_e(ji,jj) - rn_wdmin1 - z2dt * zssh_frc(ji,jj)
diff --git a/src/OCE/IOM/prtctl.F90 b/src/OCE/IOM/prtctl.F90
index 75103afdd6ab8138c3df99bb38af84622f9f95da..bb00edc5b9521d1caa08311ffaafe90d4571cc5a 100644
--- a/src/OCE/IOM/prtctl.F90
+++ b/src/OCE/IOM/prtctl.F90
@@ -132,8 +132,9 @@ CONTAINS
       CHARACTER(len=*)                    , INTENT(in), OPTIONAL ::   clinfo3
       INTEGER                             , INTENT(in), OPTIONAL ::   kdim
       !
-      CHARACTER(len=30) :: cl1, cl2
+      CHARACTER(len=30) :: cl1, cl2, cl3
       CHARACTER(len=6) :: clfmt
+      CHARACTER(len=1) :: cli1
       INTEGER ::  jn, jl, kdir
       INTEGER ::  ipi1, ipi2, ipim1, ipim2
       INTEGER ::  isht1, isht2, ishtm1, ishtm2
@@ -295,8 +296,33 @@ CONTAINS
                   WRITE(inum, "(3x,a,' : ',"//clfmt//",3x,a,' : ',"//clfmt//")") cl1, zsum1, cl2, zsum2
                ELSE
                   WRITE(inum, "(3x,a,' : ',"//clfmt//"                       )") cl1, zsum1
+                  
+               ENDIF
+               ! replace .false. by .true. to switch on theses prints of the last inner line
+               IF( .FALSE. .AND. l_IdoNFold .AND. jj1e == Nje0 - isht1 ) THEN
+                  IF( PRESENT(tab2d_1) ) THEN
+                     WRITE(cli1, '(i1)') INT(LOG10(REAL(ii1e-ii1s+1,wp))) + 1     ! how many digits to we need to write ?
+                     WRITE(cl3, "(i"//cli1//")") ii1e-ii1s+1
+                     WRITE(inum, "(a,"//TRIM(cl3)//clfmt//")") 'Last line '//TRIM(cl1)//' ', tab2d_1(ii1s:ii1e,jj1e)
+                  ENDIF
+                  IF( PRESENT(tab3d_1) ) THEN
+                     WRITE(cli1, '(i1)') INT(LOG10(REAL((ii1e-ii1s+1)*kdir,wp))) + 1     ! how many digits to we need to write ?
+                     WRITE(cl3, "(i"//cli1//")") (ii1e-ii1s+1)*kdir
+                     WRITE(inum, "(a,"//TRIM(cl3)//clfmt//")") 'Last line '//TRIM(cl1)//' ', tab3d_1(ii1s:ii1e,jj1e,1:kdir)
+                  ENDIF
+               ENDIF
+               IF( .FALSE. .AND. l_IdoNFold .AND. jj2e == Nje0 - isht2 ) THEN
+                  IF( PRESENT(tab2d_2) ) THEN
+                     WRITE(cli1, '(i1)') INT(LOG10(REAL(ii2e-ii2s+1,wp))) + 1     ! how many digits to we need to write ?
+                     WRITE(cl3, "(i"//cli1//")") ii2e-ii2s+1
+                     WRITE(inum, "(a,"//TRIM(cl3)//clfmt//")") 'Last line '//TRIM(cl2)//' ', tab2d_2(ii2s:ii2e,jj2e)
+                  ENDIF
+                  IF( PRESENT(tab3d_2) ) THEN
+                     WRITE(cli1, '(i1)') INT(LOG10(REAL((ii2e-ii2s+1)*kdir,wp))) + 1     ! how many digits to we need to write ?
+                     WRITE(cl3, "(i"//cli1//")") (ii2e-ii2s+1)*kdir
+                     WRITE(inum, "(a,"//TRIM(cl3)//clfmt//")") 'Last line '//TRIM(cl2)//' ', tab3d_2(ii2s:ii2e,jj2e,1:kdir)
+                  ENDIF
                ENDIF
-
             END DO
          ENDIF
          IF( jpnij == 1 ) CALL FLUSH(inum)
diff --git a/src/OCE/ISF/isfcav.F90 b/src/OCE/ISF/isfcav.F90
index 790324c4e570193c3da8dd2c3a0645526ed723d2..c352d594cd8d9cd705299331ee0298bc17cd8743 100644
--- a/src/OCE/ISF/isfcav.F90
+++ b/src/OCE/ISF/isfcav.F90
@@ -143,10 +143,10 @@ CONTAINS
 !!gm better to do it like in the new zdfric.F90   i.e. avm weighted Ri computation
             zcoef = 0.5_wp / e3w(ji,jj,ikt+1,Kmm)
             !                                            ! shear of horizontal velocity
-            zdku = zcoef * (  uu(ji-1,jj  ,ikt  ,Kmm) + uu(ji,jj,ikt  ,Kmm)  &
-               &             -uu(ji-1,jj  ,ikt+1,Kmm) - uu(ji,jj,ikt+1,Kmm)  )
-            zdkv = zcoef * (  vv(ji  ,jj-1,ikt  ,Kmm) + vv(ji,jj,ikt  ,Kmm)  &
-               &             -vv(ji  ,jj-1,ikt+1,Kmm) - vv(ji,jj,ikt+1,Kmm)  )
+            zdku = zcoef * (  ( uu(ji-1,jj  ,ikt  ,Kmm) + uu(ji,jj,ikt  ,Kmm) )  &   ! add () for NP repro
+               &            - ( uu(ji-1,jj  ,ikt+1,Kmm) + uu(ji,jj,ikt+1,Kmm) )  )
+            zdkv = zcoef * (  ( vv(ji  ,jj-1,ikt  ,Kmm) + vv(ji,jj,ikt  ,Kmm) )  &   ! add () for NP repro
+               &            - ( vv(ji  ,jj-1,ikt+1,Kmm) + vv(ji,jj,ikt+1,Kmm) )  )
             !                                            ! richardson number (minimum value set to zero)
             zRc(ji,jj) = MAX( rn2(ji,jj,ikt+1), 1.e-20_wp ) / MAX( zdku*zdku + zdkv*zdkv, 1.e-20_wp )
          END_2D
diff --git a/src/OCE/ISF/isfcpl.F90 b/src/OCE/ISF/isfcpl.F90
index 574875e3d23dcf0915a57eb96eb3b061e8115a06..a032701634ac8453529857a6a1768aa7cc6681fe 100644
--- a/src/OCE/ISF/isfcpl.F90
+++ b/src/OCE/ISF/isfcpl.F90
@@ -214,11 +214,9 @@ CONTAINS
             !
             zsummsk = zssmask0(jip1,jj) + zssmask0(jim1,jj) + zssmask0(ji,jjp1) + zssmask0(ji,jjm1)
             !
-            IF( zdssmask == 1._wp .AND. zsummsk /= 0._wp ) THEN
-               ssh(ji,jj,Kmm)=( zssh(jip1,jj)*zssmask0(jip1,jj)     &
-                  &           + zssh(jim1,jj)*zssmask0(jim1,jj)     &
-                  &           + zssh(ji,jjp1)*zssmask0(ji,jjp1)     &
-                  &           + zssh(ji,jjm1)*zssmask0(ji,jjm1)) / zsummsk
+            IF (zdssmask == 1._wp .AND. zsummsk /= 0._wp) THEN
+               ssh(ji,jj,Kmm)=( ( zssh(jip1,jj)*zssmask0(jip1,jj) + zssh(jim1,jj)*zssmask0(jim1,jj) )     &   ! add () for NP repro
+                  &           + ( zssh(ji,jjp1)*zssmask0(ji,jjp1) + zssh(ji,jjm1)*zssmask0(ji,jjm1) ) ) / zsummsk
                zssmask_b(ji,jj) = 1._wp
             ENDIF
          END_2D
diff --git a/src/OCE/LDF/ldfc1d_c2d.F90 b/src/OCE/LDF/ldfc1d_c2d.F90
index efe9c3ade67439ac2d1804c950c096941b6b458d..0c01406bf03982ef7ce38ab64758b38281f2eda6 100644
--- a/src/OCE/LDF/ldfc1d_c2d.F90
+++ b/src/OCE/LDF/ldfc1d_c2d.F90
@@ -80,8 +80,8 @@ CONTAINS
             pah1(:,:,jk) = pahs1(:,:) * (  zratio + zc * ( 1._wp + TANH( - ( gdept_0(:,:,jk) - zh ) * zw) )  )
          END DO
          DO_3DS( 0, 0, 0, 0, jpkm1, 1, -1 )  ! pah2 at F-point (zdep2 is an approximation in zps-coord.)
-            zdep2 = (  gdept_0(ji,jj+1,jk) + gdept_0(ji+1,jj+1,jk)   &
-               &     + gdept_0(ji,jj  ,jk) + gdept_0(ji+1,jj  ,jk)  ) * r1_4
+            zdep2 = (  ( gdept_0(ji,jj+1,jk) + gdept_0(ji+1,jj+1,jk) )   &   ! add () for NP repro
+               &     + ( gdept_0(ji,jj  ,jk) + gdept_0(ji+1,jj  ,jk) )  ) * r1_4
             pah2(ji,jj,jk) = pahs2(ji,jj) * (  zratio + zc * ( 1._wp + TANH( - ( zdep2 - zh ) * zw) )  )
          END_3D
          CALL lbc_lnk( 'ldfc1d_c2d', pah2, 'F', 1.0_wp )   ! Lateral boundary conditions
diff --git a/src/OCE/LDF/ldfdyn.F90 b/src/OCE/LDF/ldfdyn.F90
index 8f1e38f26ed1c596f2cce40c3e9d298036c53602..be4afd18cd463cb0395ab7e9a74ee18172286094 100644
--- a/src/OCE/LDF/ldfdyn.F90
+++ b/src/OCE/LDF/ldfdyn.F90
@@ -420,18 +420,14 @@ CONTAINS
             DO jk = 1, jpkm1
                !
                DO_2D( 0, 1, 0, 1 )
-                  zdb =    ( uu(ji,jj,jk,Kbb) * r1_e2u(ji,jj) -  uu(ji-1,jj,jk,Kbb) * r1_e2u(ji-1,jj) )  &
-                       &                      * r1_e1t(ji,jj) * e2t(ji,jj)                           &
-                       & - ( vv(ji,jj,jk,Kbb) * r1_e1v(ji,jj) -  vv(ji,jj-1,jk,Kbb) * r1_e1v(ji,jj-1) )  &
-                       &                      * r1_e2t(ji,jj) * e1t(ji,jj)
+                  zdb =   ( uu(ji,jj,jk,Kbb) * r1_e2u(ji,jj) - uu(ji-1,jj,jk,Kbb) * r1_e2u(ji-1,jj) ) * r1_e1t(ji,jj) * e2t(ji,jj) &
+                     &  - ( vv(ji,jj,jk,Kbb) * r1_e1v(ji,jj) - vv(ji,jj-1,jk,Kbb) * r1_e1v(ji,jj-1) ) * r1_e2t(ji,jj) * e1t(ji,jj)
                   dtensq(ji,jj,jk) = zdb * zdb * tmask(ji,jj,jk)
                END_2D
                !
                DO_2D( 1, 0, 1, 0 )
-                  zdb =   (  uu(ji,jj+1,jk,Kbb) * r1_e1u(ji,jj+1) -  uu(ji,jj,jk,Kbb) * r1_e1u(ji,jj) )  &
-                       &                        * r1_e2f(ji,jj)   * e1f(ji,jj)                       &
-                       & + ( vv(ji+1,jj,jk,Kbb) * r1_e2v(ji+1,jj) -  vv(ji,jj,jk,Kbb) * r1_e2v(ji,jj) )  &
-                       &                        * r1_e1f(ji,jj)   * e2f(ji,jj)
+                  zdb =   ( uu(ji,jj+1,jk,Kbb) * r1_e1u(ji,jj+1) - uu(ji,jj,jk,Kbb) * r1_e1u(ji,jj) ) * r1_e2f(ji,jj) * e1f(ji,jj) &
+                     &  + ( vv(ji+1,jj,jk,Kbb) * r1_e2v(ji+1,jj) - vv(ji,jj,jk,Kbb) * r1_e2v(ji,jj) ) * r1_e1f(ji,jj) * e2f(ji,jj)
                   dshesq(ji,jj,jk) = zdb * zdb * fmask(ji,jj,jk)
                END_2D
                !
@@ -445,9 +441,9 @@ CONTAINS
                   zu2pv2_ij_m1 = uu(ji-1,jj  ,jk,Kbb) * uu(ji-1,jj  ,jk,Kbb) + vv(ji  ,jj-1,jk,Kbb) * vv(ji  ,jj-1,jk,Kbb)
                   !
                   zdelta         = zcmsmag * esqt(ji,jj)                                        ! L^2 * (C_smag/pi)^2
-                  ahmt(ji,jj,jk) = zdelta * SQRT(          dtensq(ji  ,jj,jk) +                         &
-                     &                            r1_4 * ( dshesq(ji  ,jj,jk) + dshesq(ji  ,jj-1,jk) +  &
-                     &                                     dshesq(ji-1,jj,jk) + dshesq(ji-1,jj-1,jk) ) )
+                  ahmt(ji,jj,jk) = zdelta * SQRT(            dtensq(ji  ,jj,jk) +                           &
+                     &                            r1_4 * ( ( dshesq(ji  ,jj,jk) + dshesq(ji  ,jj-1,jk) ) +  & ! add () for NP repro
+                     &                                     ( dshesq(ji-1,jj,jk) + dshesq(ji-1,jj-1,jk) ) ) )
                   ahmt(ji,jj,jk) = MAX( ahmt(ji,jj,jk), SQRT( (zu2pv2_ij + zu2pv2_ij_m1) * zdelta * zstabf_lo ) ) ! Impose lower limit == minfac  * |U|L/2
                   ahmt(ji,jj,jk) = MIN( ahmt(ji,jj,jk),                                    zdelta * zstabf_up )   ! Impose upper limit == maxfac  * L^2/(4*2dt)
                   !
@@ -455,13 +451,13 @@ CONTAINS
                !
                DO_2D( 0, 0, 0, 0 )                                   ! F-point value
                   !
-                  zu2pv2_ij_p1 = uu(ji  ,jj+1,jk, kbb) * uu(ji  ,jj+1,jk, kbb) + vv(ji+1,jj  ,jk, kbb) * vv(ji+1,jj  ,jk, kbb)
-                  zu2pv2_ij    = uu(ji  ,jj  ,jk, kbb) * uu(ji  ,jj  ,jk, kbb) + vv(ji  ,jj  ,jk, kbb) * vv(ji  ,jj  ,jk, kbb)
+                  zu2pv2_ij_p1 = uu(ji  ,jj+1,jk,kbb) * uu(ji  ,jj+1,jk,kbb) + vv(ji+1,jj  ,jk,kbb) * vv(ji+1,jj  ,jk,kbb)
+                  zu2pv2_ij    = uu(ji  ,jj  ,jk,kbb) * uu(ji  ,jj  ,jk,kbb) + vv(ji  ,jj  ,jk,kbb) * vv(ji  ,jj  ,jk,kbb)
                   !
                   zdelta         = zcmsmag * esqf(ji,jj)                                        ! L^2 * (C_smag/pi)^2
-                  ahmf(ji,jj,jk) = zdelta * SQRT(          dshesq(ji  ,jj,jk) +                         &
-                     &                            r1_4 * ( dtensq(ji  ,jj,jk) + dtensq(ji  ,jj+1,jk) +  &
-                     &                                     dtensq(ji+1,jj,jk) + dtensq(ji+1,jj+1,jk) ) )
+                  ahmf(ji,jj,jk) = zdelta * SQRT(            dshesq(ji  ,jj,jk) +                           &
+                     &                            r1_4 * ( ( dtensq(ji  ,jj,jk) + dtensq(ji  ,jj+1,jk) ) +  & ! add () for NP repro
+                     &                                     ( dtensq(ji+1,jj,jk) + dtensq(ji+1,jj+1,jk) ) ) )
                   ahmf(ji,jj,jk) = MAX( ahmf(ji,jj,jk), SQRT( (zu2pv2_ij + zu2pv2_ij_p1) * zdelta * zstabf_lo ) ) ! Impose lower limit == minfac  * |U|L/2
                   ahmf(ji,jj,jk) = MIN( ahmf(ji,jj,jk),                                    zdelta * zstabf_up )   ! Impose upper limit == maxfac  * L^2/(4*2dt)
                   !
diff --git a/src/OCE/LDF/ldfslp.F90 b/src/OCE/LDF/ldfslp.F90
index e6247b49f6124844a48ede07ed6c755638df4ffe..1f80e0f296ef671d4b27370420d5d83cb646d735 100644
--- a/src/OCE/LDF/ldfslp.F90
+++ b/src/OCE/LDF/ldfslp.F90
@@ -296,10 +296,10 @@ CONTAINS
                  &      + 4.*    zwz(ji  ,jj  ,jk)                         ) * zcofw
 
             zwslpj = (         ( zww(ji-1,jj-1,jk) + zww(ji+1,jj-1,jk) )     &   ! need additional () for 
-                 &               +      ( zww(ji-1,jj+1,jk) + zww(ji+1,jj+1,jk) )     &   ! reproducibility around NP 
-                 &               + 2.*( ( zww(ji  ,jj-1,jk) + zww(ji-1,jj  ,jk) )     &
-                 &               +      ( zww(ji+1,jj  ,jk) + zww(ji  ,jj+1,jk) ) )   &
-                 &               + 4.*    zww(ji  ,jj  ,jk)                         ) * zcofw
+                 &      +      ( zww(ji-1,jj+1,jk) + zww(ji+1,jj+1,jk) )     &   ! reproducibility around NP 
+                 &      + 2.*( ( zww(ji  ,jj-1,jk) + zww(ji-1,jj  ,jk) )     &
+                 &      +      ( zww(ji+1,jj  ,jk) + zww(ji  ,jj+1,jk) ) )   &
+                 &      + 4.*    zww(ji  ,jj  ,jk)                         ) * zcofw
             !                                        !* decrease in vicinity of topography
             zck =   ( umask(ji,jj,jk) + umask(ji-1,jj,jk) )   &
                &  * ( vmask(ji,jj,jk) + vmask(ji,jj-1,jk) ) * 0.25
diff --git a/src/OCE/LDF/ldftra.F90 b/src/OCE/LDF/ldftra.F90
index 22393cb006902429743325c755471b3bd3a130ff..b24ce4bae1642cfef003d7149e1e967c1b01f0fc 100644
--- a/src/OCE/LDF/ldftra.F90
+++ b/src/OCE/LDF/ldftra.F90
@@ -765,8 +765,8 @@ CONTAINS
          pv(ji,jj,jk) = pv(ji,jj,jk) - ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) )
       END_3D
       DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 )
-         pw(ji,jj,jk) = pw(ji,jj,jk) + (  zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj  ,jk)   &
-            &                           + zpsi_vw(ji,jj,jk) - zpsi_vw(ji  ,jj-1,jk) )
+         pw(ji,jj,jk) = pw(ji,jj,jk) + (  ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj  ,jk) )   &   ! add () for NP repro
+            &                           + ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji  ,jj-1,jk) ) )
       END_3D
       !
       !                              ! diagnose the eddy induced velocity and associated heat transport
@@ -838,16 +838,16 @@ CONTAINS
        !
       IF( iom_use('woce_eiv') ) THEN
          DO_3D( 0, 0, 0, 0, 1, jpkm1 )                                  ! e1 e2 w_eiv = dk[psix] + dk[psix]
-            zw3d(ji,jj,jk) = (  psi_vw(ji,jj,jk) - psi_vw(ji  ,jj-1,jk)    &
-               &              + psi_uw(ji,jj,jk) - psi_uw(ji-1,jj  ,jk)  ) / e1e2t(ji,jj)
+            zw3d(ji,jj,jk) = (  ( psi_vw(ji,jj,jk) - psi_vw(ji  ,jj-1,jk) )    &   ! add () for NP repro
+               &              + ( psi_uw(ji,jj,jk) - psi_uw(ji-1,jj  ,jk) )  ) / e1e2t(ji,jj)
          END_3D
          CALL iom_put( "woce_eiv", zw3d )
       ENDIF
       !
       IF( iom_use('weiv_masstr') ) THEN
          DO_3D( 0, 0, 0, 0, 1, jpkm1 )
-            zw3d(ji,jj,jk) = rho0 * (  psi_vw(ji,jj,jk) - psi_vw(ji  ,jj-1,jk)  &
-               &                     + psi_uw(ji,jj,jk) - psi_uw(ji-1,jj  ,jk)  )
+            zw3d(ji,jj,jk) = rho0 * (  ( psi_vw(ji,jj,jk) - psi_vw(ji  ,jj-1,jk) )  &   ! add () for NP repro
+               &                     + ( psi_uw(ji,jj,jk) - psi_uw(ji-1,jj  ,jk) )  )
          END_3D
          CALL iom_put( "weiv_masstr" , zw3d )                 ! mass transport in z-direction
       ENDIF
diff --git a/src/OCE/SBC/sbcmod.F90 b/src/OCE/SBC/sbcmod.F90
index 4561f6a45b01b91c74a600b72664bbd1b38ae082..58b695eba89a0a820ce49c059f907d02b316b9ab 100644
--- a/src/OCE/SBC/sbcmod.F90
+++ b/src/OCE/SBC/sbcmod.F90
@@ -451,8 +451,8 @@ CONTAINS
          !
       ELSEIF( ln_wave .AND. ln_taw ) THEN           ! Wave stress reduction
          DO_2D( 0, 0, 0, 0 )
-            utau(ji,jj) = utau(ji,jj) - tawx(ji,jj) + twox(ji,jj)
-            vtau(ji,jj) = vtau(ji,jj) - tawy(ji,jj) + twoy(ji,jj)
+            utau(ji,jj) = utau(ji,jj) - ( tawx(ji,jj) - twox(ji,jj) )
+            vtau(ji,jj) = vtau(ji,jj) - ( tawy(ji,jj) - twoy(ji,jj) )
             taum(ji,jj) = SQRT( utau(ji,jj)*utau(ji,jj) + vtau(ji,jj)*vtau(ji,jj) )
          END_2D
          !
diff --git a/src/OCE/SBC/sbcwave.F90 b/src/OCE/SBC/sbcwave.F90
index cb0b219ef973ccb16666824974e2887977e6908f..d27f0061e1869a3d9012bdb23c0ad42e8c92d1dc 100644
--- a/src/OCE/SBC/sbcwave.F90
+++ b/src/OCE/SBC/sbcwave.F90
@@ -221,11 +221,10 @@ CONTAINS
       !                       !==  vertical Stokes Drift 3D velocity  ==!
       !
       DO_3D( 0, 1, 0, 1, 1, jpkm1 )    ! Horizontal e3*divergence
-         ze3divh(ji,jj,jk) = (  e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm) * usd(ji  ,jj,jk)    &
-            &                 - e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) * usd(ji-1,jj,jk)    &
-            &                 + e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm) * vsd(ji,jj  ,jk)    &
-            &                 - e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm) * vsd(ji,jj-1,jk)  ) &
-            &                * r1_e1e2t(ji,jj)
+         ze3divh(ji,jj,jk) = (  ( e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm) * usd(ji  ,jj,jk)     &   ! add () for NP repro
+            &                   - e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) * usd(ji-1,jj,jk) )   &
+            &                 + ( e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm) * vsd(ji,jj  ,jk)     &
+            &                   - e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm) * vsd(ji,jj-1,jk) ) ) * r1_e1e2t(ji,jj)
       END_3D
       !
       CALL lbc_lnk( 'sbcwave', ze3divh, 'T', 1.0_wp )
diff --git a/src/OCE/TRA/traadv_cen.F90 b/src/OCE/TRA/traadv_cen.F90
index 72761ac41ca8ec84f7c2008678e61d167a36b4d6..cb88ea15af0d165d7c427c616d07ac3ece4142a9 100644
--- a/src/OCE/TRA/traadv_cen.F90
+++ b/src/OCE/TRA/traadv_cen.F90
@@ -119,8 +119,8 @@ CONTAINS
             END_2D
             !
             DO_2D( 0, 0, 0, 0 )                     ! Horizontal divergence of advective fluxes
-               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - (  zft_u(ji,jj) - zft_u(ji-1,jj  )    &
-                  &                                           + zft_v(ji,jj) - zft_v(ji  ,jj-1)  ) * r1_e1e2t(ji,jj)   &
+               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - (  ( zft_u(ji,jj) - zft_u(ji-1,jj  ) )    &   ! add () for NP repro
+                  &                                           + ( zft_v(ji,jj) - zft_v(ji  ,jj-1) )  ) * r1_e1e2t(ji,jj)   &
                   &                                        / e3t(ji,jj,jk,Kmm)
             END_2D
          END DO
@@ -251,8 +251,8 @@ CONTAINS
                END_2D
                !
                DO_2D( 0, 0, 0, 0 )                     ! Horizontal divergence of advective fluxes
-                  pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - (  zft_u(ji,jj) - zft_u(ji-1,jj  )    &
-                     &                                           + zft_v(ji,jj) - zft_v(ji  ,jj-1)  ) * r1_e1e2t(ji,jj)   &
+                  pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - (  ( zft_u(ji,jj) - zft_u(ji-1,jj  ) )    &   ! add () for NP repro
+                     &                                           + ( zft_v(ji,jj) - zft_v(ji  ,jj-1) )  ) * r1_e1e2t(ji,jj)   &
                      &                                        / e3t(ji,jj,jk,Kmm)
                END_2D
             END DO
@@ -276,8 +276,8 @@ CONTAINS
                END_2D
                !
                DO_2D( 0, 0, 0, 0 )                                         ! Horizontal divergence of advective fluxes
-                  pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - (  zft_u(ji,jj) - zft_u(ji-1,jj  )    &
-                     &                                           + zft_v(ji,jj) - zft_v(ji  ,jj-1)  ) * r1_e1e2t(ji,jj)   &
+                  pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - (  ( zft_u(ji,jj) - zft_u(ji-1,jj  ) )    &   ! add () for NP repro
+                     &                                           + ( zft_v(ji,jj) - zft_v(ji  ,jj-1) )  ) * r1_e1e2t(ji,jj)   &
                      &                                        / e3t(ji,jj,jk,Kmm)
                END_2D
             END DO
@@ -459,8 +459,8 @@ CONTAINS
          END SELECT
          DO_3D( 0, 0, 0, 0, 1, jpkm1 )   !--  Divergence of advective fluxes  --!
             pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs)    &
-               &             - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )    &
-               &                + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )  ) &
+               &             - (  ( zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  ) )    &   ! add () for NP repro
+               &                + ( zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  ) )  ) &
                &                * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)
          END_3D
          !
diff --git a/src/OCE/TRA/traadv_fct.F90 b/src/OCE/TRA/traadv_fct.F90
index 7ab4ae15ef13c62a98290149174b68eccbfaaac1..bf99ad877249049dca123c762d789ddd2fc5e290 100644
--- a/src/OCE/TRA/traadv_fct.F90
+++ b/src/OCE/TRA/traadv_fct.F90
@@ -182,9 +182,9 @@ CONTAINS
          !
          DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 )   !* trend and after field with monotonic scheme
             !                               ! total intermediate advective trends
-            ztra = - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   &
-               &      + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )   &
-               &      + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) * r1_e1e2t(ji,jj)
+            ztra = - (  ( zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  ) )   &  ! add () for NP reproducibility
+               &      + ( zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  ) )   &
+               &      + ( zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) ) * r1_e1e2t(ji,jj)
             !                               ! update and guess with monotonic sheme
             pt(ji,jj,jk,jn,Krhs) =                   pt(ji,jj,jk,jn,Krhs) +       ztra   &
                &                                  / e3t(ji,jj,jk,Kmm ) * tmask(ji,jj,jk)
@@ -246,13 +246,9 @@ CONTAINS
                zC2t_v = pt(ji,jj,jk,jn,Kmm) + pt(ji  ,jj+1,jk,jn,Kmm)
                !                                                        ! C4 minus upstream advective fluxes
                ! round brackets added to fix the order of floating point operations
-               ! needed to ensure halo 1 - halo 2 compatibility
-               zwx(ji,jj,jk) =  0.5_wp * pU(ji,jj,jk) * ( zC2t_u + ( zltu(ji,jj,jk) - zltu(ji+1,jj,jk)   &
-                             &                                     )                                     & ! bracket for halo 1 - halo 2 compatibility
-                             &                          ) - zwx(ji,jj,jk)
-               zwy(ji,jj,jk) =  0.5_wp * pV(ji,jj,jk) * ( zC2t_v + ( zltv(ji,jj,jk) - zltv(ji,jj+1,jk)   &
-                             &                                     )                                     & ! bracket for halo 1 - halo 2 compatibility
-                             &                          ) - zwy(ji,jj,jk)
+               ! needed to ensure the North Pole reproducibility
+               zwx(ji,jj,jk) =  0.5_wp * pU(ji,jj,jk) * ( zC2t_u + ( zltu(ji,jj,jk) - zltu(ji+1,jj,jk) ) ) - zwx(ji,jj,jk)
+               zwy(ji,jj,jk) =  0.5_wp * pV(ji,jj,jk) * ( zC2t_v + ( zltv(ji,jj,jk) - zltv(ji,jj+1,jk) ) ) - zwy(ji,jj,jk)
             END_3D
             !
          CASE(  41 )                   !- 4th order centered       ==>>   !!gm coding attempt   need to be tested
@@ -306,9 +302,9 @@ CONTAINS
          IF ( ll_zAimp ) THEN
             DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 )    !* trend and after field with monotonic scheme
                !                                                ! total intermediate advective trends
-               ztra = - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   &
-                  &      + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )   &
-                  &      + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) * r1_e1e2t(ji,jj)
+               ztra = - (  ( zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  ) )   &   ! add () NP halo
+                  &      + ( zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  ) )   &
+                  &      + ( zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) ) * r1_e1e2t(ji,jj)
                ztw(ji,jj,jk) = zwi(ji,jj,jk) + p2dt * ztra / e3t(ji,jj,jk,Krhs) * tmask(ji,jj,jk)
             END_3D
             !
@@ -328,9 +324,9 @@ CONTAINS
          !        !==  final trend with corrected fluxes  ==!
          !
          DO_3D( 0, 0, 0, 0, 1, jpkm1 )
-            ztra = - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   &
-               &      + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )   &
-               &      + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) * r1_e1e2t(ji,jj)
+            ztra = - (  ( zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  ) )   &   ! add () for NP reproducibility
+               &      + ( zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  ) )   &
+               &      + ( zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) ) * r1_e1e2t(ji,jj)
             pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) + ztra / e3t(ji,jj,jk,Kmm)
             zwi(ji,jj,jk) = zwi(ji,jj,jk) + p2dt * ztra / e3t(ji,jj,jk,Krhs) * tmask(ji,jj,jk)
          END_3D
@@ -808,7 +804,9 @@ CONTAINS
                tracer_flux_i(zwx_im1,zfp_ui_m1,zfm_ui_m1,ji-1,jj,jk)
                tracer_flux_j(zwy_3d(ji,jj,jk),zfp_vj,zfm_vj,ji,jj,jk)
                tracer_flux_j(zwy_jm1,zfp_vj_m1,zfm_vj_m1,ji,jj-1,jk)
-               ztra = - ( zwx_3d(ji,jj,jk) - zwx_im1 + zwy_3d(ji,jj,jk) - zwy_jm1 + zwz(ji,jj,jk) - zwz(ji,jj,jk+1) ) * r1_e1e2t(ji,jj)
+               ztra = - ( ( zwx_3d(ji,jj,jk) - zwx_im1         )    &   ! add () NP pole
+                  &     + ( zwy_3d(ji,jj,jk) - zwy_jm1         )    &
+                  &     + ( zwz(   ji,jj,jk) - zwz(ji,jj,jk+1) ) ) * r1_e1e2t(ji,jj)
                !                               ! update and guess with monotonic sheme
                pt(ji,jj,jk,jn,Krhs) =                   pt(ji,jj,jk,jn,Krhs) +       ztra   &
                   &                                  / e3t(ji,jj,jk,Kmm ) * tmask(ji,jj,jk)
@@ -856,10 +854,10 @@ CONTAINS
             !                          ! Laplacian
             DO_3D( 0, 0, 0, 0, 1, jpkm1 )                 ! 2nd derivative * 1/ 6
                   !             ! 1st derivative (gradient)
-                  ztu = ( pt(ji+1,jj,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * umask(ji,jj,jk)
-                  ztu_im1 = ( pt(ji,jj,jk,jn,Kmm) - pt(ji-1,jj,jk,jn,Kmm) ) * umask(ji-1,jj,jk)
-                  ztv = ( pt(ji,jj+1,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * vmask(ji,jj,jk)
-                  ztv_jm1 = ( pt(ji,jj,jk,jn,Kmm) - pt(ji,jj-1,jk,jn,Kmm) ) * vmask(ji,jj-1,jk)
+                  ztu     = ( pt(ji+1,jj,jk,jn,Kmm) - pt(ji  ,jj,jk,jn,Kmm) ) * umask(ji  ,jj,jk)
+                  ztu_im1 = ( pt(ji  ,jj,jk,jn,Kmm) - pt(ji-1,jj,jk,jn,Kmm) ) * umask(ji-1,jj,jk)
+                  ztv     = ( pt(ji,jj+1,jk,jn,Kmm) - pt(ji,jj  ,jk,jn,Kmm) ) * vmask(ji,jj  ,jk)
+                  ztv_jm1 = ( pt(ji,jj  ,jk,jn,Kmm) - pt(ji,jj-1,jk,jn,Kmm) ) * vmask(ji,jj-1,jk)
                   !             ! 2nd derivative * 1/ 6
                   zltu_3d(ji,jj,jk) = (  ztu + ztu_im1  ) * r1_6
                   zltv_3d(ji,jj,jk) = (  ztv + ztv_jm1  ) * r1_6
@@ -873,13 +871,11 @@ CONTAINS
                zC2t_v = pt(ji,jj,jk,jn,Kmm) + pt(ji  ,jj+1,jk,jn,Kmm)
                !                                                        ! C4 minus upstream advective fluxes
                ! round brackets added to fix the order of floating point operations
-               ! needed to ensure halo 1 - halo 2 compatibility
-               zwx_3d(ji,jj,jk) =  0.5_wp * pU(ji,jj,jk) * ( zC2t_u + ( zltu_3d(ji,jj,jk) - zltu_3d(ji+1,jj,jk)   &
-                             &                                        )                                           & ! bracket for halo 1 - halo 2 compatibility
-                             &                             ) - zwx_3d(ji,jj,jk)
-               zwy_3d(ji,jj,jk) =  0.5_wp * pV(ji,jj,jk) * ( zC2t_v + ( zltv_3d(ji,jj,jk) - zltv_3d(ji,jj+1,jk)   &
-                             &                                        )                                           & ! bracket for halo 1 - halo 2 compatibility
-                             &                             ) - zwy_3d(ji,jj,jk)
+               ! needed to ensure the North Pole reproducibility
+               zwx_3d(ji,jj,jk) =  0.5_wp * pU(ji,jj,jk) * ( zC2t_u + ( zltu_3d(ji,jj,jk) - zltu_3d(ji+1,jj,jk) ) )   &
+                  &              - zwx_3d(ji,jj,jk)
+               zwy_3d(ji,jj,jk) =  0.5_wp * pV(ji,jj,jk) * ( zC2t_v + ( zltv_3d(ji,jj,jk) - zltv_3d(ji,jj+1,jk) ) )   &
+                  &              - zwy_3d(ji,jj,jk)
             END_3D
             !
          CASE(  41 )                   !- 4th order centered       ==>>   !!gm coding attempt   need to be tested
@@ -926,9 +922,9 @@ CONTAINS
          IF ( ll_zAimp ) THEN
             DO_3D( 1, 1, 1, 1, 1, jpkm1 )    !* trend and after field with monotonic scheme
                !                                                ! total intermediate advective trends
-               ztra = - (  zwx_3d(ji,jj,jk) - zwx_3d(ji-1,jj  ,jk  )   &
-                  &      + zwy_3d(ji,jj,jk) - zwy_3d(ji  ,jj-1,jk  )   &
-                  &      + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) * r1_e1e2t(ji,jj)
+               ztra = - (  ( zwx_3d(ji,jj,jk) - zwx_3d(ji-1,jj  ,jk  ) )   &   ! add () for NP reproducibility
+                  &      + ( zwy_3d(ji,jj,jk) - zwy_3d(ji  ,jj-1,jk  ) )   &
+                  &      + ( zwz(   ji,jj,jk) - zwz(   ji  ,jj  ,jk+1) ) ) * r1_e1e2t(ji,jj)
                ztw(ji,jj,jk) = zwi(ji,jj,jk) + p2dt * ztra / e3t(ji,jj,jk,Krhs) * tmask(ji,jj,jk)
             END_3D
             !
@@ -948,9 +944,9 @@ CONTAINS
          !        !==  final trend with corrected fluxes  ==!
          !
          DO_3D( 0, 0, 0, 0, 1, jpkm1 )
-            ztra = - (  zwx_3d(ji,jj,jk) - zwx_3d(ji-1,jj  ,jk  )   &
-               &      + zwy_3d(ji,jj,jk) - zwy_3d(ji  ,jj-1,jk  )   &
-               &      + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) * r1_e1e2t(ji,jj)
+            ztra = - (  ( zwx_3d(ji,jj,jk) - zwx_3d(ji-1,jj  ,jk    ) )   &   ! add () for NP reproducibility
+               &      + ( zwy_3d(ji,jj,jk) - zwy_3d(ji  ,jj-1,jk    ) )   &
+               &      + ( zwz(   ji,jj,jk) - zwz(   ji  ,jj  ,jk+1) ) ) * r1_e1e2t(ji,jj)
             pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) + ztra / e3t(ji,jj,jk,Kmm)
             zwi(ji,jj,jk) = zwi(ji,jj,jk) + p2dt * ztra / e3t(ji,jj,jk,Krhs) * tmask(ji,jj,jk)
          END_3D
diff --git a/src/OCE/TRA/traadv_mus.F90 b/src/OCE/TRA/traadv_mus.F90
index 314f4c992cdbfc742af4555212159e4c3a058354..0c63be9a6e7eac69e040ae9d7baa145928d75680 100644
--- a/src/OCE/TRA/traadv_mus.F90
+++ b/src/OCE/TRA/traadv_mus.F90
@@ -172,8 +172,8 @@ CONTAINS
             END_2D
             !
             DO_2D( 0, 0, 0, 0 )              !-- Tracer advective trend
-               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( zwx(ji,jj) - zwx(ji-1,jj  )       &
-               &                                             + zwy(ji,jj) - zwy(ji  ,jj-1) )     &
+               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( ( zwx(ji,jj) - zwx(ji-1,jj  ) )       &   ! ad () for NP repro
+               &                                             + ( zwy(ji,jj) - zwy(ji  ,jj-1) ) )     &
                &                                   * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)
             END_2D
          END DO
@@ -391,8 +391,8 @@ CONTAINS
          END_3D
          !
          DO_3D( 0, 0, 0, 0, 1, jpkm1 )    !-- Tracer advective trend
-            pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )       &
-            &                                             + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  ) )     &
+            pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( ( zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  ) )       &   ! add () for NP repro
+            &                                             + ( zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  ) ) )     &
             &                                   * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)
          END_3D
          !                                ! trend diagnostics
diff --git a/src/OCE/TRA/traadv_ubs.F90 b/src/OCE/TRA/traadv_ubs.F90
index 94d7833301bd11b37ea18017eac8f3a15aaf2197..455701d3a4aaf3a2b3c084155c480e58f40c21fe 100644
--- a/src/OCE/TRA/traadv_ubs.F90
+++ b/src/OCE/TRA/traadv_ubs.F90
@@ -156,8 +156,8 @@ CONTAINS
             zcenut = pU(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj  ,jk,jn,Kmm) )
             zcenvt = pV(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji  ,jj+1,jk,jn,Kmm) )
             !                                                  ! UBS advective fluxes
-            ztu(ji,jj,jk) = 0.5 * ( zcenut - zfp_ui * zltu(ji,jj,jk) - zfm_ui * zltu(ji+1,jj,jk) )
-            ztv(ji,jj,jk) = 0.5 * ( zcenvt - zfp_vj * zltv(ji,jj,jk) - zfm_vj * zltv(ji,jj+1,jk) )
+            ztu(ji,jj,jk) = 0.5 * ( zcenut - ( zfp_ui * zltu(ji,jj,jk) + zfm_ui * zltu(ji+1,jj,jk) ) )   ! add () for NP repro
+            ztv(ji,jj,jk) = 0.5 * ( zcenvt - ( zfp_vj * zltv(ji,jj,jk) + zfm_vj * zltv(ji,jj+1,jk) ) )
          END_3D
          !
          DO_3D( 0, 0, 0, 0, 1, jpk )
@@ -166,9 +166,9 @@ CONTAINS
          !
          DO jk = 1, jpkm1        !==  add the horizontal advective trend  ==!
             DO_2D( 0, 0, 0, 0 )
-               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs)                        &
-                  &             - (  ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk)    &
-                  &                + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk)  ) &
+               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs)                    &
+                  &             - (  ( ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk) )    & ! add () for NP repro
+                  &                + ( ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk) )  ) &
                   &                * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)
             END_2D
             !
diff --git a/src/OCE/TRA/trabbl.F90 b/src/OCE/TRA/trabbl.F90
index df82587f2f2e87d32267a669f0d5b5b9cc356bed..4c0408b740b7c9b5e0c612e9d6710e7024e25a01 100644
--- a/src/OCE/TRA/trabbl.F90
+++ b/src/OCE/TRA/trabbl.F90
@@ -196,10 +196,10 @@ CONTAINS
          DO_2D( 0, 0, 0, 0 )                               ! Compute the trend
             ik = mbkt(ji,jj)                            ! bottom T-level index
             pt_rhs(ji,jj,ik,jn) = pt_rhs(ji,jj,ik,jn)                                                  &
-               &                + (  ahu_bbl(ji  ,jj  ) * ( zptb(ji+1,jj  ) - zptb(ji  ,jj  ) )     &
-               &                   - ahu_bbl(ji-1,jj  ) * ( zptb(ji  ,jj  ) - zptb(ji-1,jj  ) )     &
-               &                   + ahv_bbl(ji  ,jj  ) * ( zptb(ji  ,jj+1) - zptb(ji  ,jj  ) )     &
-               &                   - ahv_bbl(ji  ,jj-1) * ( zptb(ji  ,jj  ) - zptb(ji  ,jj-1) )  )  &
+               &                + ( ( ahu_bbl(ji  ,jj  ) * ( zptb(ji+1,jj  ) - zptb(ji  ,jj  ) )       &   ! add () for NP repro
+               &                    - ahu_bbl(ji-1,jj  ) * ( zptb(ji  ,jj  ) - zptb(ji-1,jj  ) ) )     &
+               &                  + ( ahv_bbl(ji  ,jj  ) * ( zptb(ji  ,jj+1) - zptb(ji  ,jj  ) )       &
+               &                    - ahv_bbl(ji  ,jj-1) * ( zptb(ji  ,jj  ) - zptb(ji  ,jj-1) ) ) )   &
                &                * r1_e1e2t(ji,jj) / e3t(ji,jj,ik,Kmm)
          END_2D
          !                                                  ! ===========
diff --git a/src/OCE/TRA/traldf_iso.F90 b/src/OCE/TRA/traldf_iso.F90
index d814e0584aeb6aa94991302f7fb1d57bc75258df..e8776e0d6482e6d95cbb55242a6f8b49a6a18ec1 100644
--- a/src/OCE/TRA/traldf_iso.F90
+++ b/src/OCE/TRA/traldf_iso.F90
@@ -178,18 +178,10 @@ CONTAINS
             zmskv = wmask(ji,jj,jk) / MAX(   vmask(ji,jj  ,jk-1) + vmask(ji,jj-1,jk)          &
                &                           + vmask(ji,jj-1,jk-1) + vmask(ji,jj  ,jk) , 1._wp  )
                !
-            ! round brackets added to fix the order of floating point operations
-            ! needed to ensure halo 1 - halo 2 compatibility
-            zahu_w = ( (  pahu(ji  ,jj,jk-1) + pahu(ji-1,jj,jk)                    &
-               &       )                                                           & ! bracket for halo 1 - halo 2 compatibility
-               &       + ( pahu(ji-1,jj,jk-1) + pahu(ji  ,jj,jk)                   &
-               &         )                                                         & ! bracket for halo 1 - halo 2 compatibility
-               &     ) * zmsku
-            zahv_w = ( (  pahv(ji,jj  ,jk-1) + pahv(ji,jj-1,jk)                    &
-               &       )                                                           & ! bracket for halo 1 - halo 2 compatibility
-               &       + ( pahv(ji,jj-1,jk-1) + pahv(ji,jj  ,jk)                   &
-               &         )                                                         & ! bracket for halo 1 - halo 2 compatibility
-               &     ) * zmskv
+            zahu_w = ( ( pahu(ji  ,jj,jk-1) + pahu(ji-1,jj,jk) )                  & ! () for North Pole reproducibility
+               &     + ( pahu(ji-1,jj,jk-1) + pahu(ji  ,jj,jk) ) ) * zmsku
+            zahv_w = ( ( pahv(ji,jj  ,jk-1) + pahv(ji,jj-1,jk) )                  & ! () for North Pole reproducibility
+               &     + ( pahv(ji,jj-1,jk-1) + pahv(ji,jj  ,jk) ) ) * zmskv
                !
             ah_wslp2(ji,jj,jk) = zahu_w * wslpi(ji,jj,jk) * wslpi(ji,jj,jk)   &
                &               + zahv_w * wslpj(ji,jj,jk) * wslpj(ji,jj,jk)
@@ -197,16 +189,14 @@ CONTAINS
          !
          IF( ln_traldf_msc ) THEN                ! stabilizing vertical diffusivity coefficient
             DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )
-               ! round brackets added to fix the order of floating point operations
-               ! needed to ensure halo 1 - halo 2 compatibility
                akz(ji,jj,jk) = 0.25_wp * (                                                                     &
-                  &            ( ( pahu(ji  ,jj,jk) + pahu(ji  ,jj,jk-1) ) / ( e1u(ji  ,jj) * e1u(ji  ,jj) )   &
+                  &            ( ( pahu(ji  ,jj,jk) + pahu(ji  ,jj,jk-1) ) / ( e1u(ji  ,jj) * e1u(ji  ,jj) )   & ! () for NP repro
                   &            + ( pahu(ji-1,jj,jk) + pahu(ji-1,jj,jk-1) ) / ( e1u(ji-1,jj) * e1u(ji-1,jj) )   &
-                  &            )                                                                               & ! bracket for halo 1 - halo 2 compatibility
-                  &            + ( ( pahv(ji,jj  ,jk) + pahv(ji,jj  ,jk-1) ) / ( e2v(ji,jj  ) * e2v(ji,jj  ) ) &
-                  &              + ( pahv(ji,jj-1,jk) + pahv(ji,jj-1,jk-1) ) / ( e2v(ji,jj-1) * e2v(ji,jj-1) ) &
-                  &              )                                                                             & ! bracket for halo 1 - halo 2 compatibility
-                  &                      )
+                  &            )                                                                               &
+                  &          + ( ( pahv(ji,jj  ,jk) + pahv(ji,jj  ,jk-1) ) / ( e2v(ji,jj  ) * e2v(ji,jj  ) )   & ! () for NP repro
+                  &            + ( pahv(ji,jj-1,jk) + pahv(ji,jj-1,jk-1) ) / ( e2v(ji,jj-1) * e2v(ji,jj-1) )   &
+                  &            )                                                                               &
+                  &          )
             END_3D
             !
             IF( ln_traldf_blp ) THEN                ! bilaplacian operator
@@ -288,30 +278,18 @@ CONTAINS
                zcof1 = - pahu(ji,jj,jk) * e2u(ji,jj) * uslp(ji,jj,jk) * zmsku
                zcof2 = - pahv(ji,jj,jk) * e1v(ji,jj) * vslp(ji,jj,jk) * zmskv
                !
-               ! round brackets added to fix the order of floating point operations
-               ! needed to ensure halo 1 - halo 2 compatibility
-               zftu(ji,jj,jk ) = (  zabe1 * zdit(ji,jj,jk)                       &
-                  &               + zcof1 * ( ( zdkt (ji+1,jj) + zdk1t(ji,jj)    &
-                  &                           )                                  & ! bracket for halo 1 - halo 2 compatibility
-                  &                         + ( zdk1t(ji+1,jj) + zdkt (ji,jj)    &
-                  &                           )                                  & ! bracket for halo 1 - halo 2 compatibility
-                  &                         ) ) * umask(ji,jj,jk)
+               zftu(ji,jj,jk) = (  zabe1 * zdit(ji,jj,jk)                       &
+                  &              + zcof1 * ( ( zdkt (ji+1,jj) + zdk1t(ji,jj) )  &        ! () for North Pole reproducibility
+                  &                        + ( zdk1t(ji+1,jj) + zdkt (ji,jj) ) ) ) * umask(ji,jj,jk)
                zftv(ji,jj,jk) = (  zabe2 * zdjt(ji,jj,jk)                        &
-                  &              + zcof2 * ( ( zdkt (ji,jj+1) + zdk1t(ji,jj)     &
-                  &                           )                                  & ! bracket for halo 1 - halo 2 compatibility
-                  &                         + ( zdk1t(ji,jj+1) + zdkt (ji,jj)    &
-                  &                           )                                  & ! bracket for halo 1 - halo 2 compatibility
-                  &                         ) ) * vmask(ji,jj,jk)
+                  &              + zcof2 * ( ( zdkt (ji,jj+1) + zdk1t(ji,jj) )  &        ! () for North Pole reproducibility
+                  &                        + ( zdk1t(ji,jj+1) + zdkt (ji,jj) ) ) ) * vmask(ji,jj,jk)
             END_2D
             !
             DO_2D( iij-1, iij-1, iij-1, iij-1 )           !== horizontal divergence and add to pta
-               ! round brackets added to fix the order of floating point operations
-               ! needed to ensure halo 1 - halo 2 compatibility
                pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn)                         &
-                  &       + zsign * ( ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk)        &
-                  &                   )                                          & ! bracket for halo 1 - halo 2 compatibility
-                  &                 + ( zftv(ji,jj,jk) - zftv(ji,jj-1,jk)        &
-                  &                   )                                          & ! bracket for halo 1 - halo 2 compatibility
+                  &       + zsign * ( ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) )      &       ! () for North Pole reproducibility
+                  &                 + ( zftv(ji,jj,jk) - zftv(ji,jj-1,jk) )      &
                   &                 ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)
             END_2D
          END DO                                        !   End of slab
@@ -332,26 +310,18 @@ CONTAINS
             zmskv = wmask(ji,jj,jk) / MAX(   vmask(ji,jj  ,jk-1) + vmask(ji,jj-1,jk)          &
                &                           + vmask(ji,jj-1,jk-1) + vmask(ji,jj  ,jk) , 1._wp  )
                !
-            zahu_w = (   pahu(ji  ,jj,jk-1) + pahu(ji-1,jj,jk)    &
-               &       + pahu(ji-1,jj,jk-1) + pahu(ji  ,jj,jk)  ) * zmsku
-            zahv_w = (   pahv(ji,jj  ,jk-1) + pahv(ji,jj-1,jk)    &
-               &       + pahv(ji,jj-1,jk-1) + pahv(ji,jj  ,jk)  ) * zmskv
+            zahu_w = (   ( pahu(ji  ,jj,jk-1) + pahu(ji-1,jj,jk) )    &                  ! () for North Pole reproducibility
+               &       + ( pahu(ji-1,jj,jk-1) + pahu(ji  ,jj,jk) )  ) * zmsku
+            zahv_w = (   ( pahv(ji,jj  ,jk-1) + pahv(ji,jj-1,jk) )    &                  ! () for North Pole reproducibility
+               &       + ( pahv(ji,jj-1,jk-1) + pahv(ji,jj  ,jk) )  ) * zmskv
                !
             zcoef3 = - zahu_w * e2t(ji,jj) * zmsku * wslpi (ji,jj,jk)   !wslpi & j are already w-masked
             zcoef4 = - zahv_w * e1t(ji,jj) * zmskv * wslpj (ji,jj,jk)
             !
-            ! round brackets added to fix the order of floating point operations
-            ! needed to ensure halo 1 - halo 2 compatibility
-            ztfw(ji,jj,jk) = zcoef3 * ( ( zdit(ji  ,jj  ,jk-1) + zdit(ji-1,jj  ,jk)    &
-                  &                     )                                              & ! bracket for halo 1 - halo 2 compatibility
-                  &                   + ( zdit(ji-1,jj  ,jk-1) + zdit(ji  ,jj  ,jk)    &
-                  &                     )                                              & ! bracket for halo 1 - halo 2 compatibility
-                  &                   )                                                &
-                  &        + zcoef4 * ( ( zdjt(ji  ,jj  ,jk-1) + zdjt(ji  ,jj-1,jk)    &
-                  &                     )                                              & ! bracket for halo 1 - halo 2 compatibility
-                  &                   + ( zdjt(ji  ,jj-1,jk-1) + zdjt(ji  ,jj  ,jk)    &
-                  &                     )                                              & ! bracket for halo 1 - halo 2 compatibility
-                  &                   )
+            ztfw(ji,jj,jk) = zcoef3 * ( ( zdit(ji  ,jj  ,jk-1) + zdit(ji-1,jj  ,jk) )  & ! () for North Pole reproducibility
+                  &                   + ( zdit(ji-1,jj  ,jk-1) + zdit(ji  ,jj  ,jk) ) )                                                &
+                  &        + zcoef4 * ( ( zdjt(ji  ,jj  ,jk-1) + zdjt(ji  ,jj-1,jk) )  & ! () for North Pole reproducibility
+                  &                   + ( zdjt(ji  ,jj-1,jk-1) + zdjt(ji  ,jj  ,jk) ) )
          END_3D
          !                                !==  add the vertical 33 flux  ==!
          IF( ln_traldf_lap ) THEN               ! laplacian case: eddy coef = ah_wslp2 - akz
diff --git a/src/OCE/TRA/traldf_triad.F90 b/src/OCE/TRA/traldf_triad.F90
index 0b341db589874d92f39a7bf38cdde84856d575aa..b9697b43733d2f84d0a62643ee4ec3f3016c01cc 100644
--- a/src/OCE/TRA/traldf_triad.F90
+++ b/src/OCE/TRA/traldf_triad.F90
@@ -156,18 +156,18 @@ CONTAINS
                zah   = 0.25_wp * pahu(ji,jj,jk)
                zah1  = 0.25_wp * pahu(ji-1,jj,jk)
                ! Subtract s-coordinate slope at t-points to give slope rel to s-surfaces (do this by *adding* gradient of depth)
-               zslope2 = triadi_g(ji,jj,jk,1,kp) + ( gdept(ji+1,jj,jk,Kmm) - gdept(ji,jj,jk,Kmm) ) * r1_e1u(ji,jj) * umask(ji,jj,jk+kp)
+               zslope2  = triadi_g(ji,jj,jk,1,kp) + ( gdept(ji+1,jj,jk,Kmm) - gdept(ji,jj,jk,Kmm) )   &
+                  &                                 * r1_e1u(ji,jj) * umask(ji,jj,jk+kp)
                zslope2 = zslope2 *zslope2
-               zslope21 = triadi_g(ji,jj,jk,0,kp) + ( gdept(ji,jj,jk,Kmm) - gdept(ji-1,jj,jk,Kmm) ) * r1_e1u(ji-1,jj) * umask(ji-1,jj,jk+kp)
+               zslope21 = triadi_g(ji,jj,jk,0,kp) + ( gdept(ji,jj,jk,Kmm) - gdept(ji-1,jj,jk,Kmm) )   &
+                  &                                 * r1_e1u(ji-1,jj) * umask(ji-1,jj,jk+kp)
                zslope21 = zslope21 *zslope21
                ! round brackets added to fix the order of floating point operations
-               ! needed to ensure halo 1 - halo 2 compatibility
-               ah_wslp2(ji,jj,jk+kp) =  ah_wslp2(ji,jj,jk+kp) + ( zah * zbu * ze3wr * r1_e1e2t(ji,jj) * zslope2                    &
-                        &                                       + zah1 * zbu1 * ze3wr * r1_e1e2t(ji,jj) * zslope21                 &
-                        &                                       )                                                                  ! bracket for halo 1 - halo 2 compatibility
-               akz     (ji,jj,jk+kp) =  akz     (ji,jj,jk+kp) + ( zah * r1_e1u(ji,jj) * r1_e1u(ji,jj) * umask(ji,jj,jk+kp)         &
-                                                                + zah1 * r1_e1u(ji-1,jj) * r1_e1u(ji-1,jj) * umask(ji-1,jj,jk+kp)  &
-                        &                                       )                                                                  ! bracket for halo 1 - halo 2 compatibility
+               ! needed to ensure the North Pole reproducibility
+               ah_wslp2(ji,jj,jk+kp) =  ah_wslp2(ji,jj,jk+kp) + ( zah  * zbu  * ze3wr * r1_e1e2t(ji,jj) * zslope2    & ! () for NP
+                        &                                       + zah1 * zbu1 * ze3wr * r1_e1e2t(ji,jj) * zslope21 )   ! repro
+               akz     (ji,jj,jk+kp) =  akz     (ji,jj,jk+kp) + ( zah  * r1_e1u(ji  ,jj) * r1_e1u(ji  ,jj) * umask(ji  ,jj,jk+kp) &
+                                                                + zah1 * r1_e1u(ji-1,jj) * r1_e1u(ji-1,jj) * umask(ji-1,jj,jk+kp) )
             END_3D
          END DO
          !
@@ -180,18 +180,18 @@ CONTAINS
                zah1   = 0.25_wp * pahv(ji,jj-1,jk)
                ! Subtract s-coordinate slope at t-points to give slope rel to s surfaces
                !    (do this by *adding* gradient of depth)
-               zslope2 = triadj_g(ji,jj,jk,1,kp) + ( gdept(ji,jj+1,jk,Kmm) - gdept(ji,jj,jk,Kmm) ) * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp)
+               zslope2  = triadj_g(ji,jj,jk,1,kp) + ( gdept(ji,jj+1,jk,Kmm) - gdept(ji,jj,jk,Kmm) )   &
+                  &                                 * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp)
                zslope2 = zslope2 * zslope2
-               zslope21 = triadj_g(ji,jj,jk,0,kp) + ( gdept(ji,jj,jk,Kmm) - gdept(ji,jj-1,jk,Kmm) ) * r1_e2v(ji,jj-1) * vmask(ji,jj-1,jk+kp)
+               zslope21 = triadj_g(ji,jj,jk,0,kp) + ( gdept(ji,jj,jk,Kmm) - gdept(ji,jj-1,jk,Kmm) )   &
+                  &                                 * r1_e2v(ji,jj-1) * vmask(ji,jj-1,jk+kp)
                zslope21 = zslope21 * zslope21
                ! round brackets added to fix the order of floating point operations
-               ! needed to ensure halo 1 - halo 2 compatibility
-               ah_wslp2(ji,jj,jk+kp) = ah_wslp2(ji,jj,jk+kp) + ( zah * zbv * ze3wr * r1_e1e2t(ji,jj) * zslope2                     &
-                        &                                      + zah1 * zbv1 * ze3wr * r1_e1e2t(ji,jj) * zslope21                  &
-                        &                                      )                                                                   ! bracket for halo 1 - halo 2 compatibility
-               akz     (ji,jj,jk+kp) = akz     (ji,jj,jk+kp) + ( zah * r1_e2v(ji,jj) * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp)          &
-                        &                                      + zah1 * r1_e2v(ji,jj-1) * r1_e2v(ji,jj-1) * vmask(ji,jj-1,jk+kp)   &
-                        &                                      )                                                                   ! bracket for halo 1 - halo 2 compatibility
+               ! needed to ensure the North Pole reproducibility
+               ah_wslp2(ji,jj,jk+kp) = ah_wslp2(ji,jj,jk+kp) + ( zah  * zbv  * ze3wr * r1_e1e2t(ji,jj) * zslope2    & ! () for NP
+                        &                                      + zah1 * zbv1 * ze3wr * r1_e1e2t(ji,jj) * zslope21 )   ! repro
+               akz     (ji,jj,jk+kp) = akz     (ji,jj,jk+kp) + ( zah  * r1_e2v(ji,jj  ) * r1_e2v(ji,jj  ) * vmask(ji,jj  ,jk+kp) &
+                        &                                      + zah1 * r1_e2v(ji,jj-1) * r1_e2v(ji,jj-1) * vmask(ji,jj-1,jk+kp) )
             END_3D
          END DO
          !
@@ -225,16 +225,12 @@ CONTAINS
 
             DO kp = 0, 1
                DO_3D( 1, 0, 1, 0, 1, jpkm1 )
-                  ! round brackets added to fix the order of floating point operations
-                  ! needed to ensure halo 1 - halo 2 compatibility
-                  zpsi_uw(ji,jj,jk+kp) = zpsi_uw(ji,jj,jk+kp)                                     &
-                     & + ( 0.25_wp * aeiu(ji,jj,jk) * e2u(ji,jj) * triadi_g(ji,jj,jk,1,kp)        &
-                     &   + 0.25_wp * aeiu(ji,jj,jk) * e2u(ji,jj) * triadi_g(ji+1,jj,jk,0,kp)      &
-                     &   )                                                                        ! bracket for halo 1 - halo 2 compatibility
-                  zpsi_vw(ji,jj,jk+kp) = zpsi_vw(ji,jj,jk+kp)                                     &
-                     & + ( 0.25_wp * aeiv(ji,jj,jk) * e1v(ji,jj) * triadj_g(ji,jj,jk,1,kp)        &
-                     &   + 0.25_wp * aeiv(ji,jj,jk) * e1v(ji,jj) * triadj_g(ji,jj+1,jk,0,kp)      &
-                     &   )                                                                        ! bracket for halo 1 - halo 2 compatibility
+                  zpsi_uw(ji,jj,jk+kp) = zpsi_uw(ji,jj,jk+kp)                                       &
+                     & + ( 0.25_wp * aeiu(ji,jj,jk) * e2u(ji,jj) * triadi_g(ji  ,jj,jk,1,kp)        & ! () for NP reproducibility
+                     &   + 0.25_wp * aeiu(ji,jj,jk) * e2u(ji,jj) * triadi_g(ji+1,jj,jk,0,kp) )
+                  zpsi_vw(ji,jj,jk+kp) = zpsi_vw(ji,jj,jk+kp)                                       & ! () for NP reproducibility
+                     & + ( 0.25_wp * aeiv(ji,jj,jk) * e1v(ji,jj) * triadj_g(ji,jj  ,jk,1,kp)        &
+                     &   + 0.25_wp * aeiv(ji,jj,jk) * e1v(ji,jj) * triadj_g(ji,jj+1,jk,0,kp) )
                END_3D
             END DO
             CALL ldf_eiv_dia( zpsi_uw, zpsi_vw, Kmm )
@@ -440,14 +436,10 @@ CONTAINS
             ENDIF
             !                             !==  horizontal divergence and add to the general trend  ==!
             DO_2D( iij-1, iij-1, iij-1, iij-1 )
-               ! round brackets added to fix the order of floating point operations
-               ! needed to ensure halo 1 - halo 2 compatibility
-               pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn)                                                &
-                  &                       + zsign * ( ( zftu(ji-1,jj  ,jk) - zftu(ji,jj,jk)             &
-                  &                                   )                                                 & ! bracket for halo 1 - halo 2 compatibility
-                  &                                 + ( zftv(ji,jj-1,jk) - zftv(ji,jj,jk)               &
-                  &                                   )                                                 & ! bracket for halo 1 - halo 2 compatibility
-                  &                                 ) / (  e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm)  )
+               pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn)                                           &
+                  &                       + zsign * ( ( zftu(ji-1,jj  ,jk) - zftu(ji,jj,jk) )      & ! () for NP reproducibility
+                  &                                 + ( zftv(ji  ,jj-1,jk) - zftv(ji,jj,jk) ) )    &
+                  &                               / (  e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm)  )
             END_2D
             !
          END DO
@@ -456,7 +448,7 @@ CONTAINS
          IF( ln_traldf_lap ) THEN               ! laplacian case: eddy coef = ah_wslp2 - akz
             DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 )
                ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk)   &
-                  &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )             &
+                  &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )               &
                   &                            * (  pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) )
             END_3D
          ELSE                                   ! bilaplacian
@@ -466,9 +458,9 @@ CONTAINS
                   ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk)             &
                      &                            * ah_wslp2(ji,jj,jk) * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) )
                END_3D
-            CASE(  2  )                            ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt  and pt2 gradients, resp.
+            CASE(  2  )                            ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt and pt2 gradients, resp.
                DO_3D( 0, 0, 0, 0, 2, jpkm1 )
-                  ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk)                      &
+                  ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk)                  &
                      &                            * (  ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) )   &
                      &                               + akz     (ji,jj,jk) * ( pt2(ji,jj,jk-1,jn) - pt2(ji,jj,jk,jn) )   )
                END_3D
diff --git a/src/OCE/TRA/tramle.F90 b/src/OCE/TRA/tramle.F90
index a6f00b0bf72866c66e504760e7b3a4c00a1eae2e..ef4ff1eccc2e2591dfd31acb1ae46cb8b6abc28b 100644
--- a/src/OCE/TRA/tramle.F90
+++ b/src/OCE/TRA/tramle.F90
@@ -211,10 +211,10 @@ CONTAINS
          ELSEIF( nn_mle == 1 ) THEN       ! New formulation (Lf = 5km fo/ff with fo=Coriolis parameter at latitude rn_lat)
             DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 )
                zpsim_u(ji,jj) = rc_f *   zhu(ji,jj)   * zhu(ji,jj)   * e2_e1u(ji,jj)               &
-                    &                  * ( zbm(ji+1,jj) - zbm(ji,jj) ) * MIN( 111.e3_wp , e1u(ji,jj) )
+                    &                * ( zbm(ji+1,jj) - zbm(ji,jj) ) * MIN( 111.e3_wp , e1u(ji,jj) )
                !
                zpsim_v(ji,jj) = rc_f *   zhv(ji,jj)   * zhv(ji,jj)   * e1_e2v(ji,jj)               &
-                    &                  * ( zbm(ji,jj+1) - zbm(ji,jj) ) * MIN( 111.e3_wp , e2v(ji,jj) )
+                    &                * ( zbm(ji,jj+1) - zbm(ji,jj) ) * MIN( 111.e3_wp , e2v(ji,jj) )
             END_2D
          ENDIF
          !
@@ -251,12 +251,12 @@ CONTAINS
       !                                      !==  transport increased by the MLE induced transport ==!
       DO jk = 1, ikmax
          DO_2D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1 )
-            pu(ji,jj,jk) = pu(ji,jj,jk) + ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) )
+            pu(ji,jj,jk) = pu(ji,jj,jk) + ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) )         ! add () for NO repro
             pv(ji,jj,jk) = pv(ji,jj,jk) + ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) )
          END_2D
          DO_2D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 )
-            pw(ji,jj,jk) = pw(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj,jk)   &
-               &                          + zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj-1,jk) ) * wmask(ji,jj,1)
+            pw(ji,jj,jk) = pw(ji,jj,jk) - ( ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj,jk) )   &   ! add () for NO repro
+               &                          + ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj-1,jk) ) ) * wmask(ji,jj,1)
          END_2D
       END DO
 
diff --git a/src/OCE/TRA/trazdf.F90 b/src/OCE/TRA/trazdf.F90
index 7123aeba37c7fe1419e207dd89407a28d569e25e..12e547056c12251c569b90372d191a48d42a9aaa 100644
--- a/src/OCE/TRA/trazdf.F90
+++ b/src/OCE/TRA/trazdf.F90
@@ -205,7 +205,7 @@ CONTAINS
                   DO_2Dik( 0, 0,   1, jpkm1, 1 )
                      zzwi = - rDt * zwt(ji,jk  ) / e3w(ji,jj,jk  ,Kmm)
                      zzws = - rDt * zwt(ji,jk+1) / e3w(ji,jj,jk+1,Kmm)
-                     zwd(ji,jk) = e3t(ji,jj,jk,Kaa) - zzwi - zzws   &
+                     zwd(ji,jk) = e3t(ji,jj,jk,Kaa) - ( zzwi + zzws )   &
                         &              + rDt * ( MAX( wi(ji,jj,jk  ) , 0._wp ) &
                         &                      - MIN( wi(ji,jj,jk+1) , 0._wp ) )
                      zwi(ji,jk) = zzwi + rDt *   MIN( wi(ji,jj,jk  ) , 0._wp )
@@ -215,7 +215,7 @@ CONTAINS
                   DO_2Dik( 0, 0,   1, jpkm1, 1 )
                      zwi(ji,jk) = - rDt * zwt(ji,jk  ) / e3w(ji,jj,jk,Kmm)
                      zws(ji,jk) = - rDt * zwt(ji,jk+1) / e3w(ji,jj,jk+1,Kmm)
-                     zwd(ji,jk) = e3t(ji,jj,jk,Kaa) - zwi(ji,jk) - zws(ji,jk)
+                     zwd(ji,jk) = e3t(ji,jj,jk,Kaa) - ( zwi(ji,jk) + zws(ji,jk) )
                   END_2D
                ENDIF
                !
diff --git a/src/OCE/nemogcm.F90 b/src/OCE/nemogcm.F90
index 9e5ebf364cb019878d34e1d4fd7fc44a94021891..36dce715459e1c908ca07fad9d4ec85273917b41 100644
--- a/src/OCE/nemogcm.F90
+++ b/src/OCE/nemogcm.F90
@@ -164,6 +164,7 @@ CONTAINS
       !
       DO WHILE( istp <= nitend .AND. nstop == 0 )
          !
+         ncom_stp = istp
 #  if defined key_qco   ||   defined key_linssh
 #   if defined key_RK3
          CALL stp_RK3
diff --git a/src/OCE/stp2d.F90 b/src/OCE/stp2d.F90
index 06c08b84b7ce3051c0bbb3a5a99f7aa44b99c548..f8fc31d10c25680f80db7d6b398a3498d04cf1aa 100644
--- a/src/OCE/stp2d.F90
+++ b/src/OCE/stp2d.F90
@@ -172,10 +172,10 @@ CONTAINS
          ELSE                                         ! CENTRED integration: use kt-1/2 + kt+1/2 pressure (NOW)
             zztmp = grav * r1_2
             DO_2D( 0, 0, 0, 0 )
-               Ue_rhs(ji,jj) = Ue_rhs(ji,jj) + zztmp * (  ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj)  &
-                    &                                   + ssh_ibb(ji+1,jj  ) - ssh_ibb(ji,jj)  ) * r1_e1u(ji,jj)
-               Ve_rhs(ji,jj) = Ve_rhs(ji,jj) + zztmp * (  ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj)  &
-                    &                                   + ssh_ibb(ji  ,jj+1) - ssh_ibb(ji,jj)  ) * r1_e2v(ji,jj)
+               Ue_rhs(ji,jj) = Ue_rhs(ji,jj) + zztmp * (  ( ssh_ib (ji+1,jj  ) - ssh_ib (ji,jj) )   &   ! add () for NP repro
+                    &                                   + ( ssh_ibb(ji+1,jj  ) - ssh_ibb(ji,jj) ) ) * r1_e1u(ji,jj)
+               Ve_rhs(ji,jj) = Ve_rhs(ji,jj) + zztmp * (  ( ssh_ib (ji  ,jj+1) - ssh_ib (ji,jj) )   &   ! add () for NP repro
+                    &                                   + ( ssh_ibb(ji  ,jj+1) - ssh_ibb(ji,jj) ) ) * r1_e2v(ji,jj)
             END_2D
          ENDIF
       ENDIF
diff --git a/src/OFF/nemogcm.F90 b/src/OFF/nemogcm.F90
index 9e83a72731fbf1f2ad7821634dbb064606b0e729..a0d33001c10db68199dea0b3dbf7a77191127795 100644
--- a/src/OFF/nemogcm.F90
+++ b/src/OFF/nemogcm.F90
@@ -121,6 +121,7 @@ CONTAINS
       CALL iom_init( cxios_context )      ! iom_put initialization (must be done after nemo_init for AGRIF+XIOS+OASIS)
       ! 
       DO WHILE ( istp <= nitend .AND. nstop == 0 )    !==  OFF time-stepping  ==!
+         ncom_stp = istp
          IF( ln_timing ) THEN
             zstptiming = MPI_Wtime()
             IF ( istp == ( nit000 + 1 ) ) elapsed_time = zstptiming
diff --git a/src/SAS/nemogcm.F90 b/src/SAS/nemogcm.F90
index 8e07126365d8773cbedae282431f64f3d001e0b3..8c940266602440197820b189ec8f0133fbb9f3ee 100644
--- a/src/SAS/nemogcm.F90
+++ b/src/SAS/nemogcm.F90
@@ -124,6 +124,7 @@ CONTAINS
 #endif
       !
       DO WHILE( istp <= nitend .AND. nstop == 0 )
+         ncom_stp = istp
          CALL stp
          istp = istp + 1
       END DO
diff --git a/tests/ADIAB_WAVE/MY_SRC/sbcwave.F90 b/tests/ADIAB_WAVE/MY_SRC/sbcwave.F90
index 070d04706dc0d7909ea39283425645813b6eeafc..7d54953254123cb0638dec6a2d1354cc2cdfe2a7 100644
--- a/tests/ADIAB_WAVE/MY_SRC/sbcwave.F90
+++ b/tests/ADIAB_WAVE/MY_SRC/sbcwave.F90
@@ -245,11 +245,11 @@ CONTAINS
       !                       !==  vertical Stokes Drift 3D velocity  ==!
       !
       DO_3D( 0, 1, 0, 1, 1, jpkm1 )    ! Horizontal e3*divergence
-         ze3divh(ji,jj,jk) = (  e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm) * usd(ji  ,jj,jk)    &
-            &                 - e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) * usd(ji-1,jj,jk)    &
-            &                 + e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm) * vsd(ji,jj  ,jk)    &
-            &                 - e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm) * vsd(ji,jj-1,jk)  ) &
-            &                * r1_e1e2t(ji,jj)
+         ze3divh(ji,jj,jk) = (  ( e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm) * usd(ji  ,jj,jk)     &   ! add () for NP repro
+            &                   - e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) * usd(ji-1,jj,jk) )   &
+            &                 + ( e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm) * vsd(ji,jj  ,jk)     &
+            &                   - e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm) * vsd(ji,jj-1,jk) )   &
+            &                ) * r1_e1e2t(ji,jj)
       END_3D
       !
       CALL lbc_lnk( 'sbcwave', ze3divh, 'T', 1.0_wp )