Index: trunk/NEMOGCM/CONFIG/makenemo
===================================================================
--- trunk/NEMOGCM/CONFIG/makenemo	(revision 2730)
+++ trunk/NEMOGCM/CONFIG/makenemo	(revision 2731)
@@ -265,11 +265,13 @@
 
 #- At this stage the configuration has beeen chosen
+#- We coose the default light file
+export USEBLD=bldxioxag.cfg
+
 #- We look after agrif
-grep key_agrif ${COMPIL_DIR}/cpp.fcm && export AGRIFUSE=1
+grep key_agrif ${COMPIL_DIR}/cpp.fcm && export AGRIFUSE=1 && export USEBLD=${USEBLD/xag/}
 . ${COMPIL_DIR}/Fprep_agrif.sh ${NEW_CONF} ${NEMO_TDIR} || exit
 
 #- and test whether we need to build the ioserver
-export USEBLD=bldxio.cfg
-grep key_iomput ${COMPIL_DIR}/cpp.fcm && export USEBLD=bld.cfg
+grep key_iomput ${COMPIL_DIR}/cpp.fcm && export USEBLD=${USEBLD/xio/}
 
 #-
Index: trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modbc.F
===================================================================
--- trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modbc.F	(revision 2730)
+++ trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modbc.F	(revision 2731)
@@ -814,5 +814,5 @@
       
       CALL MPI_ALLREDUCE(iminmaxg,lubglob,2*nbdim,MPI_INTEGER,MPI_MIN,
-     &                     MPI_COMM_WORLD,code)  
+     &                     MPI_COMM_AGRIF,code)  
      
       lubglob(1:nbdim,2) = - lubglob(1:nbdim,2)      
Index: trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modinterp.F
===================================================================
--- trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modinterp.F	(revision 2730)
+++ trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modinterp.F	(revision 2731)
@@ -892,5 +892,5 @@
 C
       Call MPI_ALLGATHER(tab3,4*nbdim,MPI_INTEGER,tab4,4*nbdim,
-     &                   MPI_INTEGER,MPI_COMM_WORLD,code)
+     &                   MPI_INTEGER,MPI_COMM_AGRIF,code)
 
       IF (.not.associated(tempPextend%var)) Allocate(tempPextend%var)
@@ -906,5 +906,5 @@
       memberin1(1) = memberin
       CALL MPI_ALLGATHER(memberin1,1,MPI_LOGICAL,memberinall,
-     &                  1,MPI_LOGICAL,MPI_COMM_WORLD,code)
+     &                  1,MPI_LOGICAL,MPI_COMM_AGRIF,code)
 
        Call Get_External_Data_first(tab4t(:,:,1),
Index: trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modlinktomodel.F
===================================================================
--- trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modlinktomodel.F	(revision 2730)
+++ trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modlinktomodel.F	(revision 2731)
@@ -27,10 +27,23 @@
 C
 c        external Agrif_InitValues
-c        external Agrif_InitWorkspace
 c        external Agrif_detect
 C
+        external Agrif_InitWorkspace
         external Agrif_probdim_modtype_def
         external Agrif_clustering_def
+        external Agrif_comm_def
 C     Interface                       
+      INTERFACE
+      SUBROUTINE  Sub_Loop_Agrif_InvLoc(indloc,nprocloc,i,
+     &            indglob,njmppt,nimppt)
+      INTEGER :: indglob
+      INTEGER :: indloc
+      INTEGER :: nprocloc
+      INTEGER :: i
+
+      INTEGER, ALLOCATABLE, Dimension(:) :: njmppt
+      INTEGER, ALLOCATABLE, Dimension(:) :: nimppt
+      END SUBROUTINE
+      END INTERFACE
       Interface
          Subroutine Agrif_Set_numberofcells(Agrif_Gr)
Index: trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modmpp.F
===================================================================
--- trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modmpp.F	(revision 2730)
+++ trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modmpp.F	(revision 2731)
@@ -67,5 +67,5 @@
 
          CALL MPI_ALLGATHER(memberout1,1,MPI_LOGICAL,memberoutall,
-     &                  1,MPI_LOGICAL,MPI_COMM_WORLD,code)
+     &                  1,MPI_LOGICAL,MPI_COMM_AGRIF,code)
         ENDIF
          pttruetab2(:,Agrif_Procrank) = pttruetab(:,Agrif_Procrank)
@@ -207,5 +207,5 @@
 
          CALL MPI_ALLGATHER(memberout1,1,MPI_LOGICAL,memberoutall,
-     &                  1,MPI_LOGICAL,MPI_COMM_WORLD,code)
+     &                  1,MPI_LOGICAL,MPI_COMM_AGRIF,code)
         ENDIF
          pttruetab2(:,Agrif_Procrank) = pttruetab(:,Agrif_Procrank)
@@ -356,5 +356,5 @@
 C
             Call MPI_SEND(sendtoproc(k),1,MPI_LOGICAL,k,etiquette,
-     &                    MPI_COMM_WORLD,code)
+     &                    MPI_COMM_AGRIF,code)
 C
             if (sendtoproc(k)) then
@@ -365,5 +365,5 @@
                 Call MPI_SEND(iminmax_temp(:,:,k),
      &                        2*nbdim,MPI_INTEGER,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
 C
                 datasize = 1
@@ -381,5 +381,5 @@
      &                        imin(1,k):imax(1,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(2)
                    Call MPI_SEND(tempC%var%array2(
@@ -387,5 +387,5 @@
      &                        imin(2,k):imax(2,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(3)
                 
@@ -399,5 +399,5 @@
      &                        imin(4,k):imax(4,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(5)
                    Call MPI_SEND(tempC%var%array5(
@@ -408,5 +408,5 @@
      &                        imin(5,k):imax(5,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(6)
                    Call MPI_SEND(tempC%var%array6(
@@ -418,5 +418,5 @@
      &                        imin(6,k):imax(6,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 END SELECT
 C
@@ -432,5 +432,5 @@
 C
             Call MPI_RECV(res,1,MPI_LOGICAL,k,etiquette,
-     &                    MPI_COMM_WORLD,statut,code)
+     &                    MPI_COMM_AGRIF,statut,code)
 C
             recvfromproc(k) = res
@@ -441,5 +441,5 @@
                 Call MPI_RECV(iminmax_temp(:,:,k),
      &                        2*nbdim,MPI_INTEGER,k,etiquette,
-     &                        MPI_COMM_WORLD,statut,code)
+     &                        MPI_COMM_AGRIF,statut,code)
 
                 imin_recv(:,k) = iminmax_temp(:,1,k)
@@ -462,26 +462,26 @@
               Call MPI_RECV(temprecv%var%array1,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(2)
               Call MPI_RECV(temprecv%var%array2,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(3)
               Call MPI_RECV(temprecv%var%array3,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
 
             CASE(4)
               Call MPI_RECV(temprecv%var%array4,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(5)
               Call MPI_RECV(temprecv%var%array5,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(6)
               Call MPI_RECV(temprecv%var%array6,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
        END SELECT
                         
@@ -503,5 +503,5 @@
             
             Call MPI_SEND(sendtoproc(k),1,MPI_LOGICAL,k,etiquette,
-     &                    MPI_COMM_WORLD,code)
+     &                    MPI_COMM_AGRIF,code)
 C
             if (sendtoproc(k)) then
@@ -512,5 +512,5 @@
                 Call MPI_SEND(iminmax_temp(:,:,k),
      &                        2*nbdim,MPI_INTEGER,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
 C
                 SELECT CASE(nbdim)
@@ -521,5 +521,5 @@
      &                        imin(1,k):imax(1,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(2)
                 datasize=SIZE(tempC%var%array2(
@@ -530,5 +530,5 @@
      &                        imin(2,k):imax(2,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(3)
                 datasize=SIZE(tempC%var%array3(
@@ -541,5 +541,5 @@
      &                        imin(3,k):imax(3,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(4)
                 datasize=SIZE(tempC%var%array4(
@@ -554,5 +554,5 @@
      &                        imin(4,k):imax(4,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(5)
                 datasize=SIZE(tempC%var%array5(
@@ -569,5 +569,5 @@
      &                        imin(5,k):imax(5,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(6)
                 datasize=SIZE(tempC%var%array6(
@@ -586,5 +586,5 @@
      &                        imin(6,k):imax(6,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 END SELECT
 C
@@ -600,5 +600,5 @@
 C
             Call MPI_RECV(res,1,MPI_LOGICAL,k,etiquette,
-     &                    MPI_COMM_WORLD,statut,code)
+     &                    MPI_COMM_AGRIF,statut,code)
 C
             recvfromproc(k) = res
@@ -609,5 +609,5 @@
                 Call MPI_RECV(iminmax_temp(:,:,k),
      &                        2*nbdim,MPI_INTEGER,k,etiquette,
-     &                        MPI_COMM_WORLD,statut,code)
+     &                        MPI_COMM_AGRIF,statut,code)
 
 C                imin_recv(:,k) = iminmax_temp(:,1,k)
@@ -629,15 +629,15 @@
               Call MPI_RECV(temprecv%var%array1,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(2)
               datasize=SIZE(temprecv%var%array2)
               Call MPI_RECV(temprecv%var%array2,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(3)
               datasize=SIZE(temprecv%var%array3)
               Call MPI_RECV(temprecv%var%array3,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
 
             CASE(4)
@@ -645,15 +645,15 @@
               Call MPI_RECV(temprecv%var%array4,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(5)
               datasize=SIZE(temprecv%var%array5)
               Call MPI_RECV(temprecv%var%array5,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(6)
               datasize=SIZE(temprecv%var%array6)
               Call MPI_RECV(temprecv%var%array6,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
           END SELECT
             
@@ -693,5 +693,5 @@
 C
             Call MPI_SEND(sendtoproc(k),1,MPI_LOGICAL,k,etiquette,
-     &                    MPI_COMM_WORLD,code)
+     &                    MPI_COMM_AGRIF,code)
 C
             if (sendtoproc(k)) then
@@ -702,5 +702,5 @@
                 Call MPI_SEND(iminmax_temp(:,:,k),
      &                        2*nbdim,MPI_INTEGER,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
 C
             endif
@@ -715,5 +715,5 @@
 C
             Call MPI_RECV(res,1,MPI_LOGICAL,k,etiquette,
-     &                    MPI_COMM_WORLD,statut,code)
+     &                    MPI_COMM_AGRIF,statut,code)
 C
             recvfromproc(k) = res
@@ -724,5 +724,5 @@
                 Call MPI_RECV(iminmax_temp(:,:,k),
      &                        2*nbdim,MPI_INTEGER,k,etiquette,
-     &                        MPI_COMM_WORLD,statut,code)
+     &                        MPI_COMM_AGRIF,statut,code)
 
                 imin_recv(:,k) = iminmax_temp(:,1,k)
@@ -739,5 +739,5 @@
             
             Call MPI_SEND(sendtoproc(k),1,MPI_LOGICAL,k,etiquette,
-     &                    MPI_COMM_WORLD,code)
+     &                    MPI_COMM_AGRIF,code)
 C
             if (sendtoproc(k)) then
@@ -748,5 +748,5 @@
                 Call MPI_SEND(iminmax_temp(:,:,k),
      &                        2*nbdim,MPI_INTEGER,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
 C
             endif
@@ -761,5 +761,5 @@
 C
             Call MPI_RECV(res,1,MPI_LOGICAL,k,etiquette,
-     &                    MPI_COMM_WORLD,statut,code)
+     &                    MPI_COMM_AGRIF,statut,code)
 C
             recvfromproc(k) = res
@@ -770,5 +770,5 @@
                 Call MPI_RECV(iminmax_temp(:,:,k),
      &                        2*nbdim,MPI_INTEGER,k,etiquette,
-     &                        MPI_COMM_WORLD,statut,code)
+     &                        MPI_COMM_AGRIF,statut,code)
 
                 imin_recv(:,k) = iminmax_temp(:,1,k)
@@ -842,5 +842,5 @@
      &                        imin(1,k):imax(1,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(2)               
                    Call MPI_SEND(tempC%var%array2(
@@ -848,5 +848,5 @@
      &                        imin(2,k):imax(2,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(3)
      
@@ -860,5 +860,5 @@
      &                        imin(4,k):imax(4,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(5)
                    Call MPI_SEND(tempC%var%array5(
@@ -869,5 +869,5 @@
      &                        imin(5,k):imax(5,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(6)
                    Call MPI_SEND(tempC%var%array6(
@@ -879,5 +879,5 @@
      &                        imin(6,k):imax(6,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 END SELECT
 C
@@ -910,26 +910,26 @@
               Call MPI_RECV(temprecv%var%array1,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(2)           
               Call MPI_RECV(temprecv%var%array2,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(3)       
               Call MPI_RECV(temprecv%var%array3,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
 
             CASE(4)
               Call MPI_RECV(temprecv%var%array4,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(5)
               Call MPI_RECV(temprecv%var%array5,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(6)
               Call MPI_RECV(temprecv%var%array6,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
        END SELECT
                         
@@ -958,5 +958,5 @@
      &                        imin(1,k):imax(1,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(2)                
                 datasize=SIZE(tempC%var%array2(
@@ -967,5 +967,5 @@
      &                        imin(2,k):imax(2,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(3)
                 datasize=SIZE(tempC%var%array3(
@@ -978,5 +978,5 @@
      &                        imin(3,k):imax(3,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(4)
                 datasize=SIZE(tempC%var%array4(
@@ -991,5 +991,5 @@
      &                        imin(4,k):imax(4,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(5)
                 datasize=SIZE(tempC%var%array5(
@@ -1006,5 +1006,5 @@
      &                        imin(5,k):imax(5,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 CASE(6)
                 datasize=SIZE(tempC%var%array6(
@@ -1023,5 +1023,5 @@
      &                        imin(6,k):imax(6,k)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
                 END SELECT
 C
@@ -1047,15 +1047,15 @@
               Call MPI_RECV(temprecv%var%array1,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(2)           
               datasize=SIZE(temprecv%var%array2)
               Call MPI_RECV(temprecv%var%array2,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(3)           
               datasize=SIZE(temprecv%var%array3)
               Call MPI_RECV(temprecv%var%array3,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
 
             CASE(4)
@@ -1063,15 +1063,15 @@
               Call MPI_RECV(temprecv%var%array4,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(5)
               datasize=SIZE(temprecv%var%array5)
               Call MPI_RECV(temprecv%var%array5,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
             CASE(6)
               datasize=SIZE(temprecv%var%array6)
               Call MPI_RECV(temprecv%var%array6,
      &               datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &               MPI_COMM_WORLD,statut,code)
+     &               MPI_COMM_AGRIF,statut,code)
           END SELECT
             
@@ -1108,5 +1108,5 @@
      &                        imin(3):imax(3)),
      &                        datasize,MPI_DOUBLE_PRECISION,k,etiquette,
-     &                        MPI_COMM_WORLD,code)
+     &                        MPI_COMM_AGRIF,code)
      
          End Subroutine Agrif_Send_3Darray
Index: trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modtypes.F
===================================================================
--- trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modtypes.F	(revision 2730)
+++ trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modtypes.F	(revision 2731)
@@ -36,5 +36,6 @@
 C     Maximum number of grids of the hierarchy
       INTEGER, PARAMETER :: Agrif_NbMaxGrids = 10
-                  
+C     MPI Communicator
+      INTEGER :: MPI_COMM_AGRIF
 C
 C     **************************************************************************
@@ -422,5 +423,5 @@
       INTEGER :: Agrif_Nbprocs  ! Number of processors
       INTEGER :: Agrif_ProcRank ! Rank of the current processor 
-      INTEGER :: Agrif_Group    ! Group associated to MPI_COMM_WORLD
+      INTEGER :: Agrif_Group    ! Group associated to MPI_COMM_AGRIF
       INTEGER :: Agrif_MPIPREC
 #endif
Index: trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modupdate.F
===================================================================
--- trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modupdate.F	(revision 2730)
+++ trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modupdate.F	(revision 2731)
@@ -744,5 +744,5 @@
       
       CALL MPI_ALLREDUCE(iminmaxg,lubglob,2*nbdim,MPI_INTEGER,MPI_MIN,
-     &                     MPI_COMM_WORLD,code)
+     &                     MPI_COMM_AGRIF,code)
 
       lubglob(1:nbdim,2) = - lubglob(1:nbdim,2)      
@@ -910,5 +910,5 @@
       
       CALL MPI_ALLREDUCE(iminmaxg,lubglob,2*nbdim,MPI_INTEGER,MPI_MIN,
-     &                     MPI_COMM_WORLD,code)  
+     &                     MPI_COMM_AGRIF,code)  
      
       lubglob(1:nbdim,2) = - lubglob(1:nbdim,2)      
@@ -1270,5 +1270,5 @@
 C
       Call MPI_ALLGATHER(tab3,4*nbdim,MPI_INTEGER,tab4,4*nbdim,
-     &                   MPI_INTEGER,MPI_COMM_WORLD,code)
+     &                   MPI_INTEGER,MPI_COMM_AGRIF,code)
 
       IF (.not.associated(tempCextend%var)) Allocate(tempCextend%var)
@@ -1283,5 +1283,5 @@
       memberin1(1) = memberin
       CALL MPI_ALLGATHER(memberin1,1,MPI_LOGICAL,memberinall,
-     &                  1,MPI_LOGICAL,MPI_COMM_WORLD,code)
+     &                  1,MPI_LOGICAL,MPI_COMM_AGRIF,code)
  
        Call Get_External_Data_first(tab4t(:,:,1),
@@ -1402,5 +1402,5 @@
 C
       Call MPI_ALLGATHER(tab3,4*nbdim,MPI_INTEGER,tab4,4*nbdim,
-     &                   MPI_INTEGER,MPI_COMM_WORLD,code)
+     &                   MPI_INTEGER,MPI_COMM_AGRIF,code)
 
       IF (.not.associated(tempPextend%var)) Allocate(tempPextend%var)
@@ -1415,5 +1415,5 @@
       memberin1(1) = member
       CALL MPI_ALLGATHER(memberin1,1,MPI_LOGICAL,memberinall2,
-     &                  1,MPI_LOGICAL,MPI_COMM_WORLD,code)
+     &                  1,MPI_LOGICAL,MPI_COMM_AGRIF,code)
  
       Call Get_External_Data_first(tab5t(:,:,1),
Index: trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modutil.F
===================================================================
--- trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modutil.F	(revision 2730)
+++ trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modutil.F	(revision 2731)
@@ -63,12 +63,29 @@
 C
 #ifdef key_mpp_mpi
-      Integer      :: code
       INCLUDE 'mpif.h'
-C
-C
+      Integer      :: code, ierr
+      Logical      :: mpi_was_called
+C
+C
+      Call Agrif_comm_def(MPI_COMM_AGRIF)
+
+      CALL mpi_initialized ( mpi_was_called, code )
+      IF( code /= MPI_SUCCESS ) THEN
+         WRITE(*, *) ': Error in routine mpi_initialized'
+         CALL mpi_abort( mpi_comm_world, code, ierr )
+      ENDIF
+
+      IF( .NOT. mpi_was_called ) THEN
+         CALL mpi_comm_dup( mpi_comm_world, MPI_COMM_AGRIF, code)
+         IF( code /= MPI_SUCCESS ) THEN
+            WRITE(*, *) ' Agrif_Step: Error in routine mpi_comm_dup'
+            CALL mpi_abort( mpi_comm_world, code, ierr )
+         ENDIF
+      ENDIF
+
       If (Agrif_Mygrid % ngridstep == 0) Then
-          Call MPI_COMM_SIZE(MPI_COMM_WORLD,Agrif_Nbprocs,code)
-          Call MPI_COMM_RANK(MPI_COMM_WORLD,Agrif_ProcRank,code)
-          Call MPI_COMM_GROUP(MPI_COMM_WORLD,Agrif_Group,code)
+          Call MPI_COMM_SIZE(MPI_COMM_AGRIF,Agrif_Nbprocs,code)
+          Call MPI_COMM_RANK(MPI_COMM_AGRIF,Agrif_ProcRank,code)
+          Call MPI_COMM_GROUP(MPI_COMM_AGRIF,Agrif_Group,code)
       endif
 #endif
Index: trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modvariables.F
===================================================================
--- trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modvariables.F	(revision 2730)
+++ trunk/NEMOGCM/EXTERNAL/AGRIF/AGRIF_FILES/modvariables.F	(revision 2731)
Index: trunk/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
===================================================================
--- trunk/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90	(revision 2730)
+++ trunk/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90	(revision 2731)
@@ -248,4 +248,12 @@
       WRITE(ldtxt(ii),*) '      size in bytes of exported buffer   nn_buffer   = ', nn_buffer     ;   ii = ii + 1
 
+#if defined key_agrif
+      IF( .NOT. Agrif_Root() ) THEN
+         jpni  = Agrif_Parent(jpni ) 
+         jpnj  = Agrif_Parent(jpnj )
+         jpnij = Agrif_Parent(jpnij)
+      ENDIF
+#endif
+
       IF(jpnij < 1)THEN
          ! If jpnij is not specified in namelist then we calculate it - this
