Index: /trunk/NEMO/OPA_SRC/lib_mpp.F90
===================================================================
--- /trunk/NEMO/OPA_SRC/lib_mpp.F90	(revision 896)
+++ /trunk/NEMO/OPA_SRC/lib_mpp.F90	(revision 897)
@@ -136,5 +136,6 @@
    LOGICAL  ::           &
       l_isend = .FALSE.    ! isend use indicator (T if c_mpi_send='I')
-
+   INTEGER ::            & ! size of the buffer in case of mpi_bsend 
+      nn_buffer = 0
 
 #elif defined key_mpp_shmem
@@ -296,5 +297,5 @@
       LOGICAL ::   mpi_was_called
       INTEGER,OPTIONAL ::   localComm
-      NAMELIST/nam_mpp/ c_mpi_send
+      NAMELIST/nam_mpp/ c_mpi_send, nn_buffer
       !!----------------------------------------------------------------------
 
@@ -329,5 +330,5 @@
             CASE ( 'B' )                ! Buffer mpi send (blocking)
                WRITE(numout,*) '           Buffer blocking mpi send (bsend)'
-               CALL mpi_init_opa( ierr )
+               CALL mpi_init_opa( ierr ) 
             CASE ( 'I' )                ! Immediate mpi send (non-blocking send)
                WRITE(numout,*) '           Immediate non-blocking send (isend)'
@@ -5279,40 +5280,23 @@
    END SUBROUTINE mpp_lbc_north_e
 
-
-   !!!!!
-
-
-   !! 
-   !!    This is valid on IBM machine ONLY. 
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -*- Mode: F90 -*- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! mpi_init_opa.f90 : Redefinition du point d'entree MPI_INIT de la bibliotheque
-   !!                MPI afin de faire, en plus de l'initialisation de
-   !!                l'environnement MPI, l'allocation d'une zone tampon
-   !!                qui sera ulterieurement utilisee automatiquement lors
-   !!                de tous les envois de messages par MPI_BSEND
-   !!
-   !! Auteur : CNRS/IDRIS
-   !! Date   : Tue Nov 13 12:02:14 2001
-   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
    SUBROUTINE mpi_init_opa(code)
-      IMPLICIT NONE
-
-!$AGRIF_DO_NOT_TREAT
-#     include <mpif.h>
-!$AGRIF_END_DO_NOT_TREAT
+     !!---------------------------------------------------------------------
+     !!                   ***  routine mpp_init.opa  ***
+     !!
+     !! ** Purpose :: export and attach a MPI buffer for bsend
+     !!
+     !! ** Method  :: define buffer size in namelist, if 0 no buffer attachment
+     !!            but classical mpi_init
+     !! 
+     !! History :: 01/11 :: IDRIS initial version for IBM only  
+     !!            08/04 :: R. Benshila, generalisation
+     !!
+     !!---------------------------------------------------------------------
 
       INTEGER                                 :: code,rang,ierr
       LOGICAL                                 :: mpi_was_called
- 
-      ! La valeur suivante doit etre au moins egale a la taille
-      ! du plus grand message qui sera transfere dans le programme
-      ! (de toute facon, il y aura un message d'erreur si cette
-      ! valeur s'avere trop petite)
-      INTEGER                                 :: taille_tampon
-      CHARACTER(len=9)                        :: taille_tampon_alphanum
       REAL(kind=8), ALLOCATABLE, DIMENSION(:) :: tampon
  
-      ! Le point d'entree dans la bibliotheque MPI elle-meme
+      ! MPI initialization
       CALL mpi_initialized(mpi_was_called, code)
       IF ( code /= MPI_SUCCESS ) THEN
@@ -5329,39 +5313,12 @@
          ENDIF
       ENDIF
-      ! La definition de la zone tampon pour les futurs envois
-      ! par MPI_BSEND (on alloue une fois pour toute cette zone
-      ! tampon, qui sera automatiquement utilisee lors de chaque
-      ! appel  a MPI_BSEND).
-      ! La desallocation sera implicite quand on sortira de
-      ! l'environnement MPI.
-
-      ! Recuperation de la valeur de la variable d'environnement
-      ! BUFFER_LENGTH
-      ! qui, si elle est definie, doit contenir une valeur superieure
-      ! a  la taille en octets du plus gros message
-      CALL getenv('BUFFER_LENGTH',taille_tampon_alphanum)
-  
-      ! Si la variable BUFFER_LENGTH n'est pas positionnee, on lui met par
-      ! defaut la plus grande valeur de la variable MP_EAGER_LIMIT, soit
-      ! 65 536 octets
-      IF (taille_tampon_alphanum == ' ') THEN
-         taille_tampon = 65536
-      ELSE
-         READ(taille_tampon_alphanum,'(i9)') taille_tampon
-      END IF
-
-      ! On est limite en mode d'adressage 32 bits a  1750 Mo pour la zone
-      ! "data" soit 7 segments, c.-a -d. 1750/8 = 210 Mo
-      IF (taille_tampon > 210000000) THEN
-         CALL ctl_stop( ' lib_mpp: Attention la valeur BUFFER_LENGTH doit etre <= 210000000' )
-         CALL mpi_abort(MPI_COMM_WORLD,2,code)
-      END IF
-
-      CALL mpi_comm_rank(MPI_COMM_OPA,rang,code)
-      IF (rang == 0 ) PRINT *,'Taille du buffer alloue : ',taille_tampon
-
-      ! Allocation du tampon et attachement
-      ALLOCATE(tampon(taille_tampon))
-      CALL mpi_buffer_attach(tampon,taille_tampon,code)
+
+      IF( nn_buffer > 0 ) THEN
+         IF ( lwp ) WRITE(numout,*) 'mpi_bsend, buffer allocation of  : ', nn_buffer
+
+         ! Buffer allocation and attachment
+         ALLOCATE(tampon(nn_buffer))
+         CALL mpi_buffer_attach(tampon,nn_buffer,code)
+      ENDIF
 
    END SUBROUTINE mpi_init_opa
