Index: branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/lbcnfd.F90
===================================================================
--- branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/lbcnfd.F90	(revision 4622)
+++ branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/lbcnfd.F90	(revision 4792)
@@ -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_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
===================================================================
--- branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90	(revision 4622)
+++ branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90	(revision 4792)
@@ -170,5 +170,5 @@
       INTEGER                      , INTENT(in   ) ::   kumnam_ref     ! logical unit for reference namelist
       INTEGER                      , INTENT(in   ) ::   kumnam_cfg     ! logical unit for configuration namelist
-      INTEGER                      , INTENT(in   ) ::   kumond         ! logical unit for namelist output
+      INTEGER                      , INTENT(inout) ::   kumond         ! logical unit for namelist output
       INTEGER                      , INTENT(inout) ::   kstop          ! stop indicator
       INTEGER, OPTIONAL            , INTENT(in   ) ::   localComm
@@ -193,5 +193,4 @@
       READ  ( kumnam_cfg, nammpp, IOSTAT = ios, ERR = 902 )
 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nammpp in configuration namelist', lwp )
-      WRITE(kumond, nammpp)      
 
       !                              ! control print
@@ -293,4 +292,9 @@
       CALL mpi_comm_size( mpi_comm_opa, mppsize, ierr )
       mynode = mpprank
+
+      IF( mynode == 0 ) THEN
+        CALL ctl_opn( kumond, 'output.namelist.dyn', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE. , 1 )
+        WRITE(kumond, nammpp)      
+      ENDIF
       !
       CALL MPI_OP_CREATE(DDPDD_MPI, .TRUE., MPI_SUMDD, ierr)
@@ -2022,4 +2026,5 @@
       ijpjm1 = 3
       !
+      znorthloc(:,:,:) = 0
       DO jk = 1, jpk
          DO jj = nlcj - ijpj +1, nlcj          ! put in xnorthloc the last 4 jlines of pt3d
@@ -2032,12 +2037,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
@@ -2046,24 +2052,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
@@ -2074,9 +2084,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
@@ -2126,15 +2137,4 @@
       ! Either way the array may be folded by lbc_nfd and the result for the span of
       ! this domain will be identical.
-      !
-      CALL lbc_nfd( ztab, cd_type, psgn )   ! North fold boundary condition
-      !
-      DO jk = 1, jpk
-         DO jj = nlcj-ijpj+1, nlcj             ! Scatter back to pt3d
-            ij = jj - nlcj + ijpj
-            DO ji= 1, nlci
-               pt3d(ji,jj,jk) = ztab(ji+nimpp-1,ij,jk)
-            END DO
-        END DO
-      END DO
       !
       DEALLOCATE( ztab, znorthloc, zfoldwk, znorthgloio )
@@ -2197,7 +2197,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
@@ -2205,21 +2207,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
@@ -2229,5 +2235,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
@@ -2924,4 +2932,5 @@
       IF( PRESENT( localComm ) .OR. .NOT.PRESENT( localComm ) )   function_value = 0
       IF( .FALSE. )   ldtxt(:) = 'never done'
+      CALL ctl_opn( kumond, 'output.namelist.dyn', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE. , 1 )
    END FUNCTION mynode
 
Index: branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90
===================================================================
--- branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90	(revision 4622)
+++ branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90	(revision 4792)
@@ -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_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/mppini_2.h90
===================================================================
--- branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/mppini_2.h90	(revision 4622)
+++ branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/LBC/mppini_2.h90	(revision 4792)
@@ -86,5 +86,5 @@
       READ  ( numnam_cfg, namzgr, IOSTAT = ios, ERR = 902 )
 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzgr in configuration namelist', lwp )
-      WRITE ( numond, namzgr )
+      IF(lwm) WRITE ( numond, namzgr )
 
       IF(lwp)WRITE(numout,*)
@@ -144,4 +144,6 @@
 #endif
 
+      nfilcit(:,:) = ilci(:,:)
+
       IF(lwp) WRITE(numout,*)
       IF(lwp) WRITE(numout,*) ' mpp_init2: defines mpp subdomains'
@@ -175,4 +177,5 @@
          END DO
       ENDIF
+      nfiimpp(:,:) = iimppt(:,:)
 
       IF( jpnj > 1 )THEN
@@ -195,10 +198,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
@@ -284,5 +285,5 @@
             IF( jarea > ijm1 ) ipolj(ii,ij) = 3
             IF( MOD(jpni,2) == 1 .AND. jarea == imil ) ipolj(ii,ij) = 4
-            IF( ipolj(ii,ij) == 3 ) iono(ii,ij) = jpni*jpnj-jarea+ijm1 - 1   ! MPI rank of northern neighbour
+            IF( ipolj(ii,ij) == 3 ) iono(ii,ij) = jpni*jpnj-jarea+ijm1   ! MPI rank of northern neighbour
          ENDIF
          IF( jperio == 5 .OR. jperio == 6 ) THEN
@@ -291,5 +292,5 @@
             IF( jarea > ijm1) ipolj(ii,ij) = 5
             IF( MOD(jpni,2) == 1 .AND. jarea == imil ) ipolj(ii,ij) = 6
-            IF( ipolj(ii,ij) == 5) iono(ii,ij) = jpni*jpnj-jarea+ijm1 - 1    ! MPI rank of northern neighbour
+            IF( ipolj(ii,ij) == 5) iono(ii,ij) = jpni*jpnj-jarea+ijm1    ! MPI rank of northern neighbour
          ENDIF
 
@@ -307,4 +308,7 @@
          ENDIF
       END DO
+
+      nfipproc(:,:) = ipproc(:,:)
+
 
       ! Control
