Index: branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/lbclnk.F90
===================================================================
--- branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/lbclnk.F90	(revision 4810)
+++ branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/lbclnk.F90	(revision 5034)
@@ -34,7 +34,12 @@
    END INTERFACE
 
+   INTERFACE lbc_lnk_icb
+      MODULE PROCEDURE mpp_lnk_2d_icb
+   END INTERFACE
+
    PUBLIC lbc_lnk       ! ocean lateral boundary conditions
    PUBLIC lbc_lnk_e
    PUBLIC lbc_bdy_lnk   ! ocean lateral BDY boundary conditions
+   PUBLIC lbc_lnk_icb
 
    !!----------------------------------------------------------------------
@@ -73,7 +78,12 @@
    END INTERFACE
 
+   INTERFACE lbc_lnk_icb
+      MODULE PROCEDURE lbc_lnk_2d_e
+   END INTERFACE
+
    PUBLIC   lbc_lnk       ! ocean/ice  lateral boundary conditions
    PUBLIC   lbc_lnk_e 
    PUBLIC   lbc_bdy_lnk   ! ocean lateral BDY boundary conditions
+   PUBLIC   lbc_lnk_icb
    
    !!----------------------------------------------------------------------
Index: branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/lbcnfd.F90
===================================================================
--- branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/lbcnfd.F90	(revision 4810)
+++ branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/lbcnfd.F90	(revision 5034)
@@ -33,5 +33,5 @@
 
    INTEGER, PUBLIC,  PARAMETER :: jpmaxngh = 3
-   INTEGER, PUBLIC                                  ::   nsndto
+   INTEGER, PUBLIC                                  ::   nsndto, nfsloop, nfeloop
    INTEGER, PUBLIC,  DIMENSION (jpmaxngh)           ::   isendto ! processes to which communicate
 
@@ -412,5 +412,5 @@
             SELECT CASE ( cd_type )
             CASE ( 'T' , 'W' )                         ! T-, W-point
-               IF (narea .ne. (jpnij - jpni + 1)) THEN
+               IF (nimpp .ne. 1) THEN
                  startloop = 1
                ELSE
@@ -420,7 +420,10 @@
                DO jk = 1, jpk
                   DO ji = startloop, nlci
-                     ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 4
+                     ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4
                      pt3dl(ji,ijpj,jk) = psgn * pt3dr(ijt,ijpj-2,jk)
                   END DO
+                  IF(nimpp .eq. 1) THEN
+                     pt3dl(1,ijpj,jk) = psgn * pt3dl(3,ijpj-2,jk)
+                  ENDIF
                END DO
 
@@ -435,5 +438,5 @@
                  DO jk = 1, jpk
                     DO ji = startloop, nlci
-                       ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 4
+                       ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4
                        jia = ji + nimpp - 1
                        ijta = jpiglo - jia + 2
@@ -448,7 +451,6 @@
 
 
-
             CASE ( 'U' )                               ! U-point
-               IF (narea .ne. (jpnij)) THEN
+               IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                   endloop = nlci
                ELSE
@@ -457,10 +459,16 @@
                DO jk = 1, jpk
                   DO ji = 1, endloop
-                     iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+                     iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                      pt3dl(ji,ijpj,jk) = psgn * pt3dr(iju,ijpj-2,jk)
                   END DO
-               END DO
-
-               IF (narea .ne. (jpnij)) THEN
+                  IF(nimpp .eq. 1) THEN
+                     pt3dl(   1  ,ijpj,jk) = psgn * pt3dl(    2   ,ijpj-2,jk)
+                  ENDIF
+                  IF((nimpp + nlci - 1) .eq. jpiglo) THEN
+                     pt3dl(nlci,ijpj,jk) = psgn * pt3dl(nlci-1,ijpj-2,jk)
+                  ENDIF
+               END DO
+
+               IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                   endloop = nlci
                ELSE
@@ -477,5 +485,5 @@
                  DO jk = 1, jpk
                     DO ji = startloop, endloop
-                      iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+                      iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                       jia = ji + nimpp - 1
                       ijua = jpiglo - jia + 1
@@ -490,5 +498,5 @@
 
             CASE ( 'V' )                               ! V-point
-               IF (narea .ne. (jpnij - jpni + 1)) THEN
+               IF (nimpp .ne. 1) THEN
                   startloop = 1
                ELSE
@@ -497,11 +505,14 @@
                DO jk = 1, jpk
                   DO ji = startloop, nlci
-                     ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 4
+                     ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4
                      pt3dl(ji,ijpj-1,jk) = psgn * pt3dr(ijt,ijpj-2,jk)
                      pt3dl(ji,ijpj  ,jk) = psgn * pt3dr(ijt,ijpj-3,jk)
                   END DO
+                  IF(nimpp .eq. 1) THEN
+                     pt3dl(1,ijpj,jk) = psgn * pt3dl(3,ijpj-3,jk)
+                  ENDIF
                END DO
             CASE ( 'F' )                               ! F-point
-               IF (narea .ne. (jpnij)) THEN
+               IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                   endloop = nlci
                ELSE
@@ -510,8 +521,14 @@
                DO jk = 1, jpk
                   DO ji = 1, endloop
-                     iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+                     iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                      pt3dl(ji,ijpj-1,jk) = psgn * pt3dr(iju,ijpj-2,jk)
                      pt3dl(ji,ijpj  ,jk) = psgn * pt3dr(iju,ijpj-3,jk)
                   END DO
+                  IF(nimpp .eq. 1) THEN
+                     pt3dl(   1  ,ijpj,jk) = psgn * pt3dl(    2   ,ijpj-3,jk)
+                  ENDIF
+                  IF((nimpp + nlci - 1) .eq. jpiglo) THEN
+                     pt3dl(nlci,ijpj,jk) = psgn * pt3dl(nlci-1,ijpj-3,jk)
+                  ENDIF
                END DO
             END SELECT
@@ -524,5 +541,5 @@
                DO jk = 1, jpk
                   DO ji = 1, nlci
-                     ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+                     ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                      pt3dl(ji,ijpj,jk) = psgn * pt3dr(ijt,ijpj-1,jk)
                   END DO
@@ -530,5 +547,5 @@
 
             CASE ( 'U' )                               ! U-point
-               IF (narea .ne. (jpnij)) THEN
+               IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                   endloop = nlci
                ELSE
@@ -537,7 +554,10 @@
                DO jk = 1, jpk
                   DO ji = 1, endloop
-                     iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 2
+                     iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 2
                      pt3dl(ji,ijpj,jk) = psgn * pt3dr(iju,ijpj-1,jk)
                   END DO
+                  IF((nimpp + nlci - 1) .eq. jpiglo) THEN
+                     pt3dl(nlci,ijpj,jk) = psgn * pt3dr(1,ijpj-1,jk)
+                  ENDIF
                END DO
 
@@ -545,5 +565,5 @@
                DO jk = 1, jpk
                   DO ji = 1, nlci
-                     ijt = jpiglo - ji- nimpp - nimppt(isendto(1)) + 3
+                     ijt = jpiglo - ji- nimpp - nfiimpp(isendto(1),jpnj) + 3
                      pt3dl(ji,ijpj,jk) = psgn * pt3dr(ijt,ijpj-2,jk)
                   END DO
@@ -560,5 +580,5 @@
                  DO jk = 1, jpk
                     DO ji = startloop, nlci
-                       ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+                       ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                        pt3dl(ji,ijpjm1,jk) = psgn * pt3dr(ijt,ijpjm1,jk)
                     END DO
@@ -567,5 +587,5 @@
 
             CASE ( 'F' )                               ! F-point
-               IF (narea .ne. (jpnij)) THEN
+               IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                   endloop = nlci
                ELSE
@@ -574,10 +594,13 @@
                DO jk = 1, jpk
                   DO ji = 1, endloop
-                     iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 2
+                     iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 2
                      pt3dl(ji,ijpj ,jk) = psgn * pt3dr(iju,ijpj-2,jk)
                   END DO
-               END DO
-
-               IF (narea .ne. (jpnij)) THEN
+                  IF((nimpp + nlci - 1) .eq. jpiglo) THEN
+                     pt3dl(nlci,ijpj,jk) = psgn * pt3dr(1,ijpj-2,jk)
+                  ENDIF
+               END DO
+
+               IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                   endloop = nlci
                ELSE
@@ -594,5 +617,5 @@
                   DO jk = 1, jpk
                      DO ji = startloop, endloop
-                        iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 2
+                        iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 2
                         pt3dl(ji,ijpjm1,jk) = psgn * pt3dr(iju,ijpjm1,jk)
                      END DO
@@ -656,5 +679,5 @@
          !
          CASE ( 'T' , 'W' )                               ! T- , W-points
-            IF (narea .ne. (jpnij - jpni + 1)) THEN
+            IF (nimpp .ne. 1) THEN
               startloop = 1
             ELSE
@@ -662,7 +685,10 @@
             ENDIF
             DO ji = startloop, nlci
-              ijt=jpiglo - ji - nimpp - nimppt(isendto(1)) + 4
+              ijt=jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4
               pt2dl(ji,ijpj) = psgn * pt2dr(ijt,ijpjm1-1)
             END DO
+            IF (nimpp .eq. 1) THEN
+              pt2dl(1,ijpj)   = psgn * pt2dl(3,ijpj-2)
+            ENDIF
 
             IF(nimpp .ge. (jpiglo/2+1)) THEN
@@ -674,5 +700,5 @@
             ENDIF
             DO ji = startloop, nlci
-               ijt=jpiglo - ji - nimpp - nimppt(isendto(1)) + 4
+               ijt=jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4
                jia = ji + nimpp - 1
                ijta = jpiglo - jia + 2
@@ -685,5 +711,5 @@
 
          CASE ( 'U' )                                     ! U-point
-            IF (narea .ne. (jpnij)) THEN
+            IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                endloop = nlci
             ELSE
@@ -691,9 +717,17 @@
             ENDIF
             DO ji = 1, endloop
-               iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+               iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                pt2dl(ji,ijpj) = psgn * pt2dr(iju,ijpjm1-1)
             END DO
 
-            IF (narea .ne. (jpnij)) THEN
+            IF (nimpp .eq. 1) THEN
+              pt2dl(   1  ,ijpj  ) = psgn * pt2dl(    2   ,ijpj-2)
+              pt2dl(1     ,ijpj-1) = psgn * pt2dr(jpiglo - nfiimpp(isendto(1), jpnj) + 1, ijpj-1)
+            ENDIF
+            IF((nimpp + nlci - 1) .eq. jpiglo) THEN
+              pt2dl(nlci,ijpj  ) = psgn * pt2dl(nlci-1,ijpj-2)
+            ENDIF
+
+            IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                endloop = nlci
             ELSE
@@ -708,5 +742,5 @@
             ENDIF
             DO ji = startloop, endloop
-               iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+               iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                jia = ji + nimpp - 1
                ijua = jpiglo - jia + 1
@@ -719,5 +753,5 @@
 
          CASE ( 'V' )                                     ! V-point
-            IF (narea .ne. (jpnij - jpni + 1)) THEN
+            IF (nimpp .ne. 1) THEN
               startloop = 1
             ELSE
@@ -725,11 +759,14 @@
             ENDIF
             DO ji = startloop, nlci
-              ijt=jpiglo - ji - nimpp - nimppt(isendto(1)) + 4
+              ijt=jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4
               pt2dl(ji,ijpjm1) = psgn * pt2dr(ijt,ijpjm1-1)
               pt2dl(ji,ijpj) = psgn * pt2dr(ijt,ijpjm1-2)
             END DO
+            IF (nimpp .eq. 1) THEN
+              pt2dl( 1 ,ijpj)   = psgn * pt2dl( 3 ,ijpj-3) 
+            ENDIF
 
          CASE ( 'F' )                                     ! F-point
-            IF (narea .ne. (jpnij)) THEN
+            IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                endloop = nlci
             ELSE
@@ -737,11 +774,19 @@
             ENDIF
             DO ji = 1, endloop
-               iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+               iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                pt2dl(ji,ijpjm1) = psgn * pt2dr(iju,ijpjm1-1)
                pt2dl(ji,ijpj) = psgn * pt2dr(iju,ijpjm1-2)
             END DO
+            IF (nimpp .eq. 1) THEN
+              pt2dl(   1  ,ijpj)   = psgn * pt2dl(    2   ,ijpj-3)
+              pt2dl(   1  ,ijpj-1) = psgn * pt2dl(    2   ,ijpj-2)
+            ENDIF
+            IF((nimpp + nlci - 1) .eq. jpiglo) THEN
+              pt2dl(nlci,ijpj)   = psgn * pt2dl(nlci-1,ijpj-3)
+              pt2dl(nlci,ijpj-1) = psgn * pt2dl(nlci-1,ijpj-2) 
+            ENDIF
 
          CASE ( 'I' )                                     ! ice U-V point (I-point)
-            IF (narea .ne. (jpnij - jpni + 1)) THEN
+            IF (nimpp .ne. 1) THEN
                startloop = 1
             ELSE
@@ -750,10 +795,10 @@
             ENDIF
             DO ji = startloop, nlci
-               iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 5
+               iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 5
                pt2dl(ji,ijpj) = psgn * pt2dr(iju,ijpjm1)
             END DO
 
          CASE ( 'J' )                                     ! first ice U-V point
-            IF (narea .ne. (jpnij - jpni + 1)) THEN
+            IF (nimpp .ne. 1) THEN
                startloop = 1
             ELSE
@@ -762,10 +807,10 @@
             ENDIF
             DO ji = startloop, nlci
-               iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 5
+               iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 5
                pt2dl(ji,ijpj) = psgn * pt2dr(iju,ijpjm1)
             END DO
 
          CASE ( 'K' )                                     ! second ice U-V point
-            IF (narea .ne. (jpnij - jpni + 1)) THEN
+            IF (nimpp .ne. 1) THEN
                startloop = 1
             ELSE
@@ -774,5 +819,5 @@
             ENDIF
             DO ji = startloop, nlci
-               iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 5
+               iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 5
                pt2dl(ji,ijpj) = psgn * pt2dr(iju,ijpjm1)
             END DO
@@ -785,10 +830,10 @@
          CASE ( 'T' , 'W' )                               ! T-, W-point
             DO ji = 1, nlci
-               ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+               ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                pt2dl(ji,ijpj) = psgn * pt2dr(ijt,ijpjm1)
             END DO
 
          CASE ( 'U' )                                     ! U-point
-            IF (narea .ne. (jpnij)) THEN
+            IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                endloop = nlci
             ELSE
@@ -796,11 +841,14 @@
             ENDIF
             DO ji = 1, endloop
-               iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 2
+               iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 2
                pt2dl(ji,ijpj) = psgn * pt2dr(iju,ijpjm1)
             END DO
+            IF((nimpp + nlci - 1) .eq. jpiglo) THEN
+               pt2dl(nlci,ijpj) = psgn * pt2dr(1,ijpj-1)
+            ENDIF
 
          CASE ( 'V' )                                     ! V-point
             DO ji = 1, nlci
-               ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+               ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                pt2dl(ji,ijpj) = psgn * pt2dr(ijt,ijpjm1-1)
             END DO
@@ -813,10 +861,10 @@
             ENDIF
             DO ji = startloop, nlci
-               ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 3
+               ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3
                pt2dl(ji,ijpjm1) = psgn * pt2dr(ijt,ijpjm1)
             END DO
 
          CASE ( 'F' )                               ! F-point
-            IF (narea .ne. (jpnij)) THEN
+            IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                endloop = nlci
             ELSE
@@ -824,9 +872,12 @@
             ENDIF
             DO ji = 1, endloop
-               iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 2
+               iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 2
                pt2dl(ji,ijpj) = psgn * pt2dr(iju,ijpjm1-1)
             END DO
-
-            IF (narea .ne. (jpnij)) THEN
+            IF((nimpp + nlci - 1) .eq. jpiglo) THEN
+                pt2dl(nlci,ijpj) = psgn * pt2dr(1,ijpj-2)
+            ENDIF
+
+            IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                endloop = nlci
             ELSE
@@ -842,15 +893,15 @@
 
             DO ji = startloop, endloop
-               iju = jpiglo - ji - nimpp - nimppt(isendto(1)) + 2
+               iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 2
                pt2dl(ji,ijpjm1) = psgn * pt2dr(iju,ijpjm1)
             END DO
 
          CASE ( 'I' )                                  ! ice U-V point (I-point)
-               IF (narea .ne. (jpnij - jpni + 1)) THEN
+               IF (nimpp .ne. 1) THEN
                   startloop = 1
                ELSE
                   startloop = 2
                ENDIF
-               IF (narea .ne. jpnij) THEN
+               IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                   endloop = nlci
                ELSE
@@ -858,15 +909,15 @@
                ENDIF
                DO ji = startloop , endloop
-                  ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 4
+                  ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4
                   pt2dl(ji,ijpj)= 0.5 * (pt2dr(ji,ijpjm1) + psgn * pt2dr(ijt,ijpjm1))
                END DO
 
          CASE ( 'J' )                                  ! first ice U-V point
-               IF (narea .ne. (jpnij - jpni + 1)) THEN
+               IF (nimpp .ne. 1) THEN
                   startloop = 1
                ELSE
                   startloop = 2
                ENDIF
-               IF (narea .ne. jpnij) THEN
+               IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                   endloop = nlci
                ELSE
@@ -874,15 +925,15 @@
                ENDIF
                DO ji = startloop , endloop
-                  ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 4
+                  ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4
                   pt2dl(ji,ijpj) = pt2dr(ji,ijpjm1)
                END DO
 
          CASE ( 'K' )                                  ! second ice U-V point
-               IF (narea .ne. (jpnij - jpni + 1)) THEN
+               IF (nimpp .ne. 1) THEN
                   startloop = 1
                ELSE
                   startloop = 2
                ENDIF
-               IF (narea .ne. jpnij) THEN
+               IF ((nimpp + nlci - 1) .ne. jpiglo) THEN
                   endloop = nlci
                ELSE
@@ -890,5 +941,5 @@
                ENDIF
                DO ji = startloop, endloop
-                  ijt = jpiglo - ji - nimpp - nimppt(isendto(1)) + 4
+                  ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4
                   pt2dl(ji,ijpj) = pt2dr(ijt,ijpjm1)
                END DO
Index: branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
===================================================================
--- branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90	(revision 4810)
+++ branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90	(revision 5034)
@@ -42,4 +42,5 @@
    !!   mpp_lnk_3d_gather :  Message passing manadgement for two 3D arrays
    !!   mpp_lnk_e     : interface (defined in lbclnk) for message passing of 2d array with extra halo (mpp_lnk_2d_e)
+   !!   mpp_lnk_icb   : interface for message passing of 2d arrays with extra halo for icebergs (mpp_lnk_2d_icb)
    !!   mpprecv         :
    !!   mppsend       :   SUBROUTINE mpp_ini_znl
@@ -56,4 +57,5 @@
    !!   mpp_lbc_north : north fold processors gathering
    !!   mpp_lbc_north_e : variant of mpp_lbc_north for extra outer halo
+   !!   mpp_lbc_north_icb : variant of mpp_lbc_north for extra outer halo with icebergs
    !!----------------------------------------------------------------------
    USE dom_oce        ! ocean space and time domain
@@ -74,4 +76,5 @@
    PUBLIC   mppsend, mpprecv                          ! needed by TAM and ICB routines
    PUBLIC   mpp_lnk_bdy_2d, mpp_lnk_bdy_3d
+   PUBLIC   mpp_lbc_north_icb, mpp_lnk_2d_icb
 
    !! * Interfaces
@@ -2026,4 +2029,5 @@
       ijpjm1 = 3
       !
+      znorthloc(:,:,:) = 0
       DO jk = 1, jpk
          DO jj = nlcj - ijpj +1, nlcj          ! put in xnorthloc the last 4 jlines of pt3d
@@ -2036,12 +2040,13 @@
       itaille = jpi * jpk * ijpj
 
-
       IF ( l_north_nogather ) THEN
          !
         ztabr(:,:,:) = 0
+        ztabl(:,:,:) = 0
+
         DO jk = 1, jpk
            DO jj = nlcj-ijpj+1, nlcj          ! First put local values into the global array
               ij = jj - nlcj + ijpj
-              DO ji = 1, nlci
+              DO ji = nfsloop, nfeloop
                  ztabl(ji,ij,jk) = pt3d(ji,jj,jk)
               END DO
@@ -2050,24 +2055,28 @@
 
          DO jr = 1,nsndto
-            IF (isendto(jr) .ne. narea) CALL mppsend( 5, znorthloc, itaille, isendto(jr)-1, ml_req_nf(jr) )
+            IF ((nfipproc(isendto(jr),jpnj) .ne. (narea-1)) .and. (nfipproc(isendto(jr),jpnj) .ne. -1)) THEN
+              CALL mppsend( 5, znorthloc, itaille, nfipproc(isendto(jr),jpnj), ml_req_nf(jr) )
+            ENDIF
          END DO
          DO jr = 1,nsndto
-            iproc = isendto(jr)
-            ildi = nldit (iproc)
-            ilei = nleit (iproc)
-            iilb = nimppt(isendto(jr)) - nimppt(isendto(1))
-            IF(isendto(jr) .ne. narea) THEN
-              CALL mpprecv(5, zfoldwk, itaille, isendto(jr)-1)
+            iproc = nfipproc(isendto(jr),jpnj)
+            IF(iproc .ne. -1) THEN
+               ilei = nleit (iproc+1)
+               ildi = nldit (iproc+1)
+               iilb = nfiimpp(isendto(jr),jpnj) - nfiimpp(isendto(1),jpnj)
+            ENDIF
+            IF((iproc .ne. (narea-1)) .and. (iproc .ne. -1)) THEN
+              CALL mpprecv(5, zfoldwk, itaille, iproc)
               DO jk = 1, jpk
                  DO jj = 1, ijpj
-                    DO ji = 1, ilei
+                    DO ji = ildi, ilei
                        ztabr(iilb+ji,jj,jk) = zfoldwk(ji,jj,jk)
                     END DO
                  END DO
               END DO
-           ELSE
+           ELSE IF (iproc .eq. (narea-1)) THEN
               DO jk = 1, jpk
                  DO jj = 1, ijpj
-                    DO ji = 1, ilei
+                    DO ji = ildi, ilei
                        ztabr(iilb+ji,jj,jk) = pt3d(ji,nlcj-ijpj+jj,jk)
                     END DO
@@ -2078,9 +2087,10 @@
          IF (l_isend) THEN
             DO jr = 1,nsndto
-               IF (isendto(jr) .ne. narea) CALL mpi_wait(ml_req_nf(jr), ml_stat, ml_err)
+               IF ((nfipproc(isendto(jr),jpnj) .ne. (narea-1)) .and. (nfipproc(isendto(jr),jpnj) .ne. -1)) THEN
+                  CALL mpi_wait(ml_req_nf(jr), ml_stat, ml_err)
+               ENDIF    
             END DO
          ENDIF
          CALL mpp_lbc_nfd( ztabl, ztabr, cd_type, psgn )   ! North fold boundary condition
-         !
          DO jk = 1, jpk
             DO jj = nlcj-ijpj+1, nlcj             ! Scatter back to pt3d
@@ -2190,7 +2200,9 @@
          !
          ztabr(:,:) = 0
+         ztabl(:,:) = 0
+
          DO jj = nlcj-ijpj+1, nlcj          ! First put local values into the global array
             ij = jj - nlcj + ijpj
-            DO ji = 1, nlci
+              DO ji = nfsloop, nfeloop
                ztabl(ji,ij) = pt2d(ji,jj)
             END DO
@@ -2198,21 +2210,25 @@
 
          DO jr = 1,nsndto
-            IF (isendto(jr) .ne. narea) CALL mppsend(5, znorthloc, itaille, isendto(jr)-1, ml_req_nf(jr))
+            IF ((nfipproc(isendto(jr),jpnj) .ne. (narea-1)) .and. (nfipproc(isendto(jr),jpnj) .ne. -1)) THEN
+               CALL mppsend(5, znorthloc, itaille, nfipproc(isendto(jr),jpnj), ml_req_nf(jr))
+            ENDIF
          END DO
          DO jr = 1,nsndto
-            iproc = isendto(jr)
-            ildi = nldit (iproc)
-            ilei = nleit (iproc)
-            iilb = nimppt(isendto(jr)) - nimppt(isendto(1))
-            IF(isendto(jr) .ne. narea) THEN
-              CALL mpprecv(5, zfoldwk, itaille, isendto(jr)-1)
+            iproc = nfipproc(isendto(jr),jpnj)
+            IF(iproc .ne. -1) THEN
+               ilei = nleit (iproc+1)
+               ildi = nldit (iproc+1)
+               iilb = nfiimpp(isendto(jr),jpnj) - nfiimpp(isendto(1),jpnj)
+            ENDIF
+            IF((iproc .ne. (narea-1)) .and. (iproc .ne. -1)) THEN
+              CALL mpprecv(5, zfoldwk, itaille, iproc)
               DO jj = 1, ijpj
-                 DO ji = 1, ilei
+                 DO ji = ildi, ilei
                     ztabr(iilb+ji,jj) = zfoldwk(ji,jj)
                  END DO
               END DO
-            ELSE
+            ELSE IF (iproc .eq. (narea-1)) THEN
               DO jj = 1, ijpj
-                 DO ji = 1, ilei
+                 DO ji = ildi, ilei
                     ztabr(iilb+ji,jj) = pt2d(ji,nlcj-ijpj+jj)
                  END DO
@@ -2222,5 +2238,7 @@
          IF (l_isend) THEN
             DO jr = 1,nsndto
-               IF (isendto(jr) .ne. narea) CALL mpi_wait(ml_req_nf(jr), ml_stat, ml_err)
+               IF ((nfipproc(isendto(jr),jpnj) .ne. (narea-1)) .and. (nfipproc(isendto(jr),jpnj) .ne. -1)) THEN
+                  CALL mpi_wait(ml_req_nf(jr), ml_stat, ml_err)
+               ENDIF
             END DO
          ENDIF
@@ -2878,4 +2896,267 @@
    END SUBROUTINE DDPDD_MPI
 
+   SUBROUTINE mpp_lbc_north_icb( pt2d, cd_type, psgn, pr2dj)
+      !!---------------------------------------------------------------------
+      !!                   ***  routine mpp_lbc_north_icb  ***
+      !!
+      !! ** Purpose :   Ensure proper north fold horizontal bondary condition
+      !!              in mpp configuration in case of jpn1 > 1 and for 2d
+      !!              array with outer extra halo
+      !!
+      !! ** Method  :   North fold condition and mpp with more than one proc
+      !!              in i-direction require a specific treatment. We gather
+      !!              the 4+2*jpr2dj northern lines of the global domain on 1
+      !!              processor and apply lbc north-fold on this sub array.
+      !!              Then we scatter the north fold array back to the processors.
+      !!              This version accounts for an extra halo with icebergs.
+      !!
+      !!----------------------------------------------------------------------
+      REAL(wp), DIMENSION(:,:), INTENT(inout) ::   pt2d     ! 2D array with extra halo
+      CHARACTER(len=1)        , INTENT(in   ) ::   cd_type  ! nature of pt3d grid-points
+      !                                                     !   = T ,  U , V , F or W -points
+      REAL(wp)                , INTENT(in   ) ::   psgn     ! = -1. the sign change across the
+      !!                                                    ! north fold, =  1. otherwise
+      INTEGER, OPTIONAL       , INTENT(in   ) ::   pr2dj
+      INTEGER ::   ji, jj, jr
+      INTEGER ::   ierr, itaille, ildi, ilei, iilb
+      INTEGER ::   ijpj, ij, iproc, ipr2dj
+      !
+      REAL(wp), DIMENSION(:,:)  , ALLOCATABLE  ::  ztab_e, znorthloc_e
+      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE  ::  znorthgloio_e
+
+      !!----------------------------------------------------------------------
+      !
+      ijpj=4
+      IF( PRESENT(pr2dj) ) THEN           ! use of additional halos
+         ipr2dj = pr2dj
+      ELSE
+         ipr2dj = 0
+      ENDIF
+      ALLOCATE( ztab_e(jpiglo,4+2*ipr2dj), znorthloc_e(jpi,4+2*ipr2dj), znorthgloio_e(jpi,4+2*ipr2dj,jpni) )
+
+      !
+      ztab_e(:,:) = 0.e0
+
+      ij=0
+      ! put in znorthloc_e the last 4 jlines of pt2d
+      DO jj = nlcj - ijpj + 1 - ipr2dj, nlcj +ipr2dj
+         ij = ij + 1
+         DO ji = 1, jpi
+            znorthloc_e(ji,ij)=pt2d(ji,jj)
+         END DO
+      END DO
+      !
+      itaille = jpi * ( ijpj + 2 * ipr2dj )
+      CALL MPI_ALLGATHER( znorthloc_e(1,1)  , itaille, MPI_DOUBLE_PRECISION,    &
+         &                znorthgloio_e(1,1,1), itaille, MPI_DOUBLE_PRECISION, ncomm_north, ierr )
+      !
+      DO jr = 1, ndim_rank_north            ! recover the global north array
+         iproc = nrank_north(jr) + 1
+         ildi = nldit (iproc)
+         ilei = nleit (iproc)
+         iilb = nimppt(iproc)
+         DO jj = 1, ijpj+2*ipr2dj
+            DO ji = ildi, ilei
+               ztab_e(ji+iilb-1,jj) = znorthgloio_e(ji,jj,jr)
+            END DO
+         END DO
+      END DO
+
+
+      ! 2. North-Fold boundary conditions
+      ! ----------------------------------
+      CALL lbc_nfd( ztab_e(:,:), cd_type, psgn, pr2dj = ipr2dj )
+
+      ij = ipr2dj
+      !! Scatter back to pt2d
+      DO jj = nlcj - ijpj + 1 , nlcj +ipr2dj
+      ij  = ij +1
+         DO ji= 1, nlci
+            pt2d(ji,jj) = ztab_e(ji+nimpp-1,ij)
+         END DO
+      END DO
+      !
+      DEALLOCATE( ztab_e, znorthloc_e, znorthgloio_e )
+      !
+   END SUBROUTINE mpp_lbc_north_icb
+
+   SUBROUTINE mpp_lnk_2d_icb( pt2d, cd_type, psgn, jpri, jprj )
+      !!----------------------------------------------------------------------
+      !!                  ***  routine mpp_lnk_2d_icb  ***
+      !!
+      !! ** Purpose :   Message passing manadgement for 2d array (with extra halo and icebergs)
+      !!
+      !! ** Method  :   Use mppsend and mpprecv function for passing mask
+      !!      between processors following neighboring subdomains.
+      !!            domain parameters
+      !!                    nlci   : first dimension of the local subdomain
+      !!                    nlcj   : second dimension of the local subdomain
+      !!                    jpri   : number of rows for extra outer halo
+      !!                    jprj   : number of columns for extra outer halo
+      !!                    nbondi : mark for "east-west local boundary"
+      !!                    nbondj : mark for "north-south local boundary"
+      !!                    noea   : number for local neighboring processors
+      !!                    nowe   : number for local neighboring processors
+      !!                    noso   : number for local neighboring processors
+      !!                    nono   : number for local neighboring processors
+      !!
+      !!----------------------------------------------------------------------
+      INTEGER                                             , INTENT(in   ) ::   jpri
+      INTEGER                                             , INTENT(in   ) ::   jprj
+      REAL(wp), DIMENSION(1-jpri:jpi+jpri,1-jprj:jpj+jprj), INTENT(inout) ::   pt2d     ! 2D array with extra halo
+      CHARACTER(len=1)                                    , INTENT(in   ) ::   cd_type  ! nature of ptab array grid-points
+      !                                                                                 ! = T , U , V , F , W and I points
+      REAL(wp)                                            , INTENT(in   ) ::   psgn     ! =-1 the sign change across the
+      !!                                                                                ! north boundary, =  1. otherwise
+      INTEGER  ::   jl   ! dummy loop indices
+      INTEGER  ::   imigr, iihom, ijhom        ! temporary integers
+      INTEGER  ::   ipreci, iprecj             ! temporary integers
+      INTEGER  ::   ml_req1, ml_req2, ml_err   ! for key_mpi_isend
+      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend
+      !!
+      REAL(wp), DIMENSION(1-jpri:jpi+jpri,jprecj+jprj,2) :: r2dns
+      REAL(wp), DIMENSION(1-jpri:jpi+jpri,jprecj+jprj,2) :: r2dsn
+      REAL(wp), DIMENSION(1-jprj:jpj+jprj,jpreci+jpri,2) :: r2dwe
+      REAL(wp), DIMENSION(1-jprj:jpj+jprj,jpreci+jpri,2) :: r2dew
+      !!----------------------------------------------------------------------
+
+      ipreci = jpreci + jpri      ! take into account outer extra 2D overlap area
+      iprecj = jprecj + jprj
+
+
+      ! 1. standard boundary treatment
+      ! ------------------------------
+      ! Order matters Here !!!!
+      !
+      !                                      ! East-West boundaries
+      !                                           !* Cyclic east-west
+      IF( nbondi == 2 .AND. (nperio == 1 .OR. nperio == 4 .OR. nperio == 6) ) THEN
+         pt2d(1-jpri:     1    ,:) = pt2d(jpim1-jpri:  jpim1 ,:)       ! east
+         pt2d(   jpi  :jpi+jpri,:) = pt2d(     2      :2+jpri,:)       ! west
+         !
+      ELSE                                        !* closed
+         IF( .NOT. cd_type == 'F' )   pt2d(  1-jpri   :jpreci    ,:) = 0.e0    ! south except at F-point
+                                      pt2d(nlci-jpreci+1:jpi+jpri,:) = 0.e0    ! north
+      ENDIF
+      !
+
+      ! north fold treatment
+      ! -----------------------
+      IF( npolj /= 0 ) THEN
+         !
+         SELECT CASE ( jpni )
+         CASE ( 1 )     ;   CALL lbc_nfd        ( pt2d(1:jpi,1:jpj+jprj), cd_type, psgn, pr2dj=jprj )
+         CASE DEFAULT   ;   CALL mpp_lbc_north_icb( pt2d(1:jpi,1:jpj+jprj)  , cd_type, psgn , pr2dj=jprj  )
+         END SELECT
+         !
+      ENDIF
+
+      ! 2. East and west directions exchange
+      ! ------------------------------------
+      ! we play with the neigbours AND the row number because of the periodicity
+      !
+      SELECT CASE ( nbondi )      ! Read Dirichlet lateral conditions
+      CASE ( -1, 0, 1 )                ! all exept 2 (i.e. close case)
+         iihom = nlci-nreci-jpri
+         DO jl = 1, ipreci
+            r2dew(:,jl,1) = pt2d(jpreci+jl,:)
+            r2dwe(:,jl,1) = pt2d(iihom +jl,:)
+         END DO
+      END SELECT
+      !
+      !                           ! Migrations
+      imigr = ipreci * ( jpj + 2*jprj)
+      !
+      SELECT CASE ( nbondi )
+      CASE ( -1 )
+         CALL mppsend( 2, r2dwe(1-jprj,1,1), imigr, noea, ml_req1 )
+         CALL mpprecv( 1, r2dew(1-jprj,1,2), imigr, noea )
+         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err)
+      CASE ( 0 )
+         CALL mppsend( 1, r2dew(1-jprj,1,1), imigr, nowe, ml_req1 )
+         CALL mppsend( 2, r2dwe(1-jprj,1,1), imigr, noea, ml_req2 )
+         CALL mpprecv( 1, r2dew(1-jprj,1,2), imigr, noea )
+         CALL mpprecv( 2, r2dwe(1-jprj,1,2), imigr, nowe )
+         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err)
+         IF(l_isend) CALL mpi_wait(ml_req2,ml_stat,ml_err)
+      CASE ( 1 )
+         CALL mppsend( 1, r2dew(1-jprj,1,1), imigr, nowe, ml_req1 )
+         CALL mpprecv( 2, r2dwe(1-jprj,1,2), imigr, nowe )
+         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err)
+      END SELECT
+      !
+      !                           ! Write Dirichlet lateral conditions
+      iihom = nlci - jpreci
+      !
+      SELECT CASE ( nbondi )
+      CASE ( -1 )
+         DO jl = 1, ipreci
+            pt2d(iihom+jl,:) = r2dew(:,jl,2)
+         END DO
+      CASE ( 0 )
+         DO jl = 1, ipreci
+            pt2d(jl-jpri,:) = r2dwe(:,jl,2)
+            pt2d( iihom+jl,:) = r2dew(:,jl,2)
+         END DO
+      CASE ( 1 )
+         DO jl = 1, ipreci
+            pt2d(jl-jpri,:) = r2dwe(:,jl,2)
+         END DO
+      END SELECT
+
+
+      ! 3. North and south directions
+      ! -----------------------------
+      ! always closed : we play only with the neigbours
+      !
+      IF( nbondj /= 2 ) THEN      ! Read Dirichlet lateral conditions
+         ijhom = nlcj-nrecj-jprj
+         DO jl = 1, iprecj
+            r2dsn(:,jl,1) = pt2d(:,ijhom +jl)
+            r2dns(:,jl,1) = pt2d(:,jprecj+jl)
+         END DO
+      ENDIF
+      !
+      !                           ! Migrations
+      imigr = iprecj * ( jpi + 2*jpri )
+      !
+      SELECT CASE ( nbondj )
+      CASE ( -1 )
+         CALL mppsend( 4, r2dsn(1-jpri,1,1), imigr, nono, ml_req1 )
+         CALL mpprecv( 3, r2dns(1-jpri,1,2), imigr, nono )
+         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err)
+      CASE ( 0 )
+         CALL mppsend( 3, r2dns(1-jpri,1,1), imigr, noso, ml_req1 )
+         CALL mppsend( 4, r2dsn(1-jpri,1,1), imigr, nono, ml_req2 )
+         CALL mpprecv( 3, r2dns(1-jpri,1,2), imigr, nono )
+         CALL mpprecv( 4, r2dsn(1-jpri,1,2), imigr, noso )
+         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err)
+         IF(l_isend) CALL mpi_wait(ml_req2,ml_stat,ml_err)
+      CASE ( 1 )
+         CALL mppsend( 3, r2dns(1-jpri,1,1), imigr, noso, ml_req1 )
+         CALL mpprecv( 4, r2dsn(1-jpri,1,2), imigr, noso )
+         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err)
+      END SELECT
+      !
+      !                           ! Write Dirichlet lateral conditions
+      ijhom = nlcj - jprecj
+      !
+      SELECT CASE ( nbondj )
+      CASE ( -1 )
+         DO jl = 1, iprecj
+            pt2d(:,ijhom+jl) = r2dns(:,jl,2)
+         END DO
+      CASE ( 0 )
+         DO jl = 1, iprecj
+            pt2d(:,jl-jprj) = r2dsn(:,jl,2)
+            pt2d(:,ijhom+jl ) = r2dns(:,jl,2)
+         END DO
+      CASE ( 1 )
+         DO jl = 1, iprecj
+            pt2d(:,jl-jprj) = r2dsn(:,jl,2)
+         END DO
+      END SELECT
+
+   END SUBROUTINE mpp_lnk_2d_icb
 #else
    !!----------------------------------------------------------------------
Index: branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90
===================================================================
--- branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90	(revision 4810)
+++ branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90	(revision 5034)
@@ -177,4 +177,5 @@
       
 #endif
+      nfilcit(:,:) = ilcit(:,:)
       IF( irestj == 0 )   irestj = jpnj
 
@@ -255,4 +256,5 @@
          END DO
       ENDIF
+      nfiimpp(:,:)=iimppt(:,:)
 
       IF( jpnj > 1 ) THEN
@@ -270,4 +272,5 @@
          ii = 1 + MOD( jn-1, jpni )
          ij = 1 + (jn-1) / jpni
+         nfipproc(ii,ij) = jn - 1
          nimppt(jn) = iimppt(ii,ij)
          njmppt(jn) = ijmppt(ii,ij)
Index: branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/mppini_2.h90
===================================================================
--- branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/mppini_2.h90	(revision 4810)
+++ branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/LBC/mppini_2.h90	(revision 5034)
@@ -67,9 +67,9 @@
          imask                                ! temporary global workspace
       REAL(wp), DIMENSION(jpiglo,jpjglo) ::   &
-         zdta                   ! temporary data workspace
+         zdta, zdtaisf                     ! temporary data workspace
       REAL(wp) ::   zidom , zjdom          ! temporary scalars
 
       ! read namelist for ln_zco
-      NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco
+      NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav
 
       !!----------------------------------------------------------------------
@@ -109,9 +109,17 @@
       ENDIF
       CALL iom_close (inum)
+      
+      ! used to compute the land processor in case of not masked bathy file.
+      zdtaisf(:,:) = 0.0_wp
+      IF ( ln_isfcav ) THEN
+         CALL iom_open ( 'bathy_meter.nc', inum )   ! Meter bathy in case of partial steps
+         CALL iom_get ( inum, jpdom_unknown, 'isf_draft' , zdtaisf, kstart=(/jpizoom,jpjzoom/), kcount=(/jpiglo,jpjglo/) )
+      END IF
+      CALL iom_close (inum)
 
       ! land/sea mask over the global/zoom domain
 
       imask(:,:)=1
-      WHERE ( zdta(:,:) <= 0. ) imask = 0
+      WHERE ( zdta(:,:) - zdtaisf(:,:) <= 0. ) imask = 0
 
       !  1. Dimension arrays for subdomains
@@ -143,4 +151,6 @@
       ilcj(:, irestj+1:jpnj) = jpj-1
 #endif
+
+      nfilcit(:,:) = ilci(:,:)
 
       IF(lwp) WRITE(numout,*)
@@ -175,4 +185,5 @@
          END DO
       ENDIF
+      nfiimpp(:,:) = iimppt(:,:)
 
       IF( jpnj > 1 )THEN
@@ -195,10 +206,8 @@
          ili = ilci(ii,ij)
          ilj = ilcj(ii,ij)
-
          ibondj(ii,ij) = -1
          IF( jarea >  jpni          )   ibondj(ii,ij) = 0
          IF( jarea >  (jpnj-1)*jpni )   ibondj(ii,ij) = 1
          IF( jpnj  == 1             )   ibondj(ii,ij) = 2
-
          ibondi(ii,ij) = 0
          IF( MOD(jarea,jpni) == 1 )   ibondi(ii,ij) = -1
@@ -308,4 +317,7 @@
       END DO
 
+      nfipproc(:,:) = ipproc(:,:)
+
+
       ! Control
       IF(icont+1 /= jpnij) THEN
