diff --git a/MY_RUN/KTEST/003_KW78/007_ncl_diag/visu_KW78_diag.png b/MY_RUN/KTEST/003_KW78/007_ncl_diag/visu_KW78_diag.png
deleted file mode 100644
index 52376e3401b394d812df4f65ff6341216c741e5e..0000000000000000000000000000000000000000
Binary files a/MY_RUN/KTEST/003_KW78/007_ncl_diag/visu_KW78_diag.png and /dev/null differ
diff --git a/MY_RUN/KTEST/007_16janvier/004_arp2lfi/run_arp2lfi_xyz b/MY_RUN/KTEST/007_16janvier/004_arp2lfi/run_arp2lfi_xyz
index f3fa9bc8b7f3f58446df1b18b736ff43a76e39fa..26659113d21b4d6c1b6688abcb2c87428f1d9ca7 100755
--- a/MY_RUN/KTEST/007_16janvier/004_arp2lfi/run_arp2lfi_xyz
+++ b/MY_RUN/KTEST/007_16janvier/004_arp2lfi/run_arp2lfi_xyz
@@ -5,7 +5,7 @@
 #MNH_LIC for details. version 1.
 set -x
 set -e
-export GRIB_DEFINITION_PATH=$SRC_MESONH/src/LIB/grib_api-1.13.1/definitions
+#export GRIB_DEFINITION_PATH=$SRC_MESONH/src/LIB/${VERSION_GRIBAPI}/definitions
 rm -f 16JAN* OUTPUT_LISTING* pipe* *.tex
 ln -sf ../003_nest/16JAN98_36km.neste1.{des,lfi,nc} .
 time ${MPIRUN} PREP_REAL_CASE${XYZ}
diff --git a/MY_RUN/KTEST/009_ICARTT/002_arp2lfi/run_arp2lfi_xyz b/MY_RUN/KTEST/009_ICARTT/002_arp2lfi/run_arp2lfi_xyz
index 5384cead2f0c7946666800c0f2ad72255bbe34ac..532715ce63d033caf228a45474b8719441cd10ab 100755
--- a/MY_RUN/KTEST/009_ICARTT/002_arp2lfi/run_arp2lfi_xyz
+++ b/MY_RUN/KTEST/009_ICARTT/002_arp2lfi/run_arp2lfi_xyz
@@ -8,7 +8,7 @@ set -e
 
 CHIMIE_FILES=${CHIMIE_FILES:-"$HOME/CHIMIE_FILES"} ; export CHIMIE_FILES
 ln -sf ${CHIMIE_FILES}/*.20040810.18* .
-export GRIB_DEFINITION_PATH=$SRC_MESONH/src/LIB/grib_api-1.13.1/definitions
+#export GRIB_DEFINITION_PATH=$SRC_MESONH/src/LIB/grib_api-1.13.1/definitions
 
 rm -f ICART* CPLCH20040810.18.* OUTPUT_LISTING* pipe* 
 ln -sf ../001_pgd1/ICARTT1008_PGD_15km.{des,lfi,nc} .
diff --git a/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/run_ecmwf2lfi_xyz b/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/run_ecmwf2lfi_xyz
index 3fd7d9e9ae2061c2d78379b41948911702d1d948..cec646c907d63e85dcd99ba275d444432eea9a2e 100755
--- a/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/run_ecmwf2lfi_xyz
+++ b/MY_RUN/KTEST/012_dust/002_ecmwf2lfi/run_ecmwf2lfi_xyz
@@ -15,7 +15,7 @@ done
 #
 #
 #
-export GRIB_DEFINITION_PATH=$SRC_MESONH/src/LIB/grib_api-1.13.1/definitions
+#export GRIB_DEFINITION_PATH=$SRC_MESONH/src/LIB/grib_api-1.13.1/definitions
 
 ln -sf ../001_pgd1/pgd_dust_30km.{des,lfi,nc} .
 rm -f S702000092* OUTPUT_LISTING* pipe* *.tex
diff --git a/pub/README_NCL630 b/pub/README_NCL630
deleted file mode 100644
index 7cd683456b9218d7463dd15537521f33a7851356..0000000000000000000000000000000000000000
--- a/pub/README_NCL630
+++ /dev/null
@@ -1,2 +0,0 @@
-ncl-6.3.0.tar.gz is ncl_ncarg-6.3.0.Linux_RHEL6.4_x86_64_nodap_gcc472.tar.gz 
-repackaged in directory ncl-6.3.0 for easer installation 
diff --git a/pub/README_NCL640 b/pub/README_NCL640
new file mode 100644
index 0000000000000000000000000000000000000000..99f7bb6023753b4e9569b00b2b6b8f629ba06323
--- /dev/null
+++ b/pub/README_NCL640
@@ -0,0 +1,2 @@
+ncl-6.4.0.tar.gz is ncl_ncarg-6.4.0-RHEL6.4_64bit_nodap_gnu447.tar.gz
+repackaged in directory ncl-6.4.0 for easer installation 
diff --git a/pub/ncl-6.3.0.tar.gz b/pub/ncl-6.3.0.tar.gz
deleted file mode 100644
index 4980a595ed0e1622e5dceb4b8dd15d1fe7bc2143..0000000000000000000000000000000000000000
--- a/pub/ncl-6.3.0.tar.gz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:12b51b5ebd5176ceb5453a781a0e3a9d27f46b3b7c4a8c370e8595e9ab977965
-size 75123427
diff --git a/pub/ncl-6.4.0.tar.gz b/pub/ncl-6.4.0.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..ddc40984bc572e56619156897a7b7043c443cd1a
--- /dev/null
+++ b/pub/ncl-6.4.0.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1ae930159cb4d1050c8a1e6b69b9b9661d5a21490cad233abc0655d02bf3e1b8
+size 88827595
diff --git a/src/LIB/grib_api-1.13.1.tar.gz b/src/LIB/grib_api-1.13.1.tar.gz
deleted file mode 100644
index b6cc2e3314cd33febd82340ff4575d839a0e3ea3..0000000000000000000000000000000000000000
--- a/src/LIB/grib_api-1.13.1.tar.gz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:aa66c4d744f3073b06792c0e6299fcae99aa2a921f8b59a9ccd9056bf26baf5f
-size 14947384
diff --git a/src/LIB/grib_api-1.26.0-Source.tar.gz b/src/LIB/grib_api-1.26.0-Source.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..149f53758041541499365601725a91107114d57d
--- /dev/null
+++ b/src/LIB/grib_api-1.26.0-Source.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0ca45544c54a3a67de78a62663d4be6be8d9c95a63f1bd30fcb4c14588ac9501
+size 4857336
diff --git a/src/MNH/lima_warm_nucl.f90 b/src/MNH/lima_warm_nucl.f90
index c74c42275f65328dace58c816f9dbec61e183e83..ba6c961248a6bb464d6cfc2b6aa2f9edb577e917 100644
--- a/src/MNH/lima_warm_nucl.f90
+++ b/src/MNH/lima_warm_nucl.f90
@@ -306,7 +306,7 @@ IF( INUCT >= 1 ) THEN
 !  Remark : in LIMA's nucleation parameterization, Smax=0.01 for a supersaturation of 1% !
 !
 !
-   ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NAHEN)-0.00001, &
+   ZVEC1(:) = MAX( ( 1.0 + 10.0 * XMNH_EPSILON ), MIN( FLOAT(NAHEN)*( 1.0 - 10.0 * XMNH_EPSILON ), &
                                  XAHENINTP1 * ZZT(:) + XAHENINTP2 )  )
    IVEC1(:) = INT( ZVEC1(:) )
    ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) )
@@ -392,7 +392,7 @@ IF( INUCT >= 1 ) THEN
 ! Modified values for Beta and C (see in init_aerosol_properties) account for that
 !
    WHERE (ZZW5(:) > 0. .AND. ZSMAX(:) > 0.)
-      ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NHYP)-0.00001,  &
+      ZVEC1(:) = MAX( ( 1.0 + 10.0 * XMNH_EPSILON ), MIN( FLOAT(NHYP)*( 1.0 - 10.0 * XMNH_EPSILON ),  &
                                     XHYPINTP1*LOG(ZSMAX(:))+XHYPINTP2 ) )
       IVEC1(:) = INT( ZVEC1(:) )
       ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) )
@@ -791,7 +791,7 @@ REAL                           :: PZVEC1
 INTEGER                        :: PIVEC1
 !
 PSINGL_FUNCSMAX = 0.
-PZVEC1    = MAX( 1.00001,MIN( FLOAT(NHYP)-0.00001,               &
+PZVEC1    = MAX( ( 1.0 + 10.0 * XMNH_EPSILON ),MIN( FLOAT(NHYP)*( 1.0 - 10.0 * XMNH_EPSILON ),               &
                               XHYPINTP1*LOG(PPZSMAX)+XHYPINTP2 ) )
 PIVEC1 = INT( PZVEC1 )
 PZVEC1 = PZVEC1 - FLOAT( PIVEC1 )
diff --git a/src/SURFEX/dgam.F90 b/src/SURFEX/dgam.F90
index 52addb0060ff4b0bccb530de1aa9dc36436b8e1c..2a0690870001cb81452f2d2765c34b1866fb2575 100644
--- a/src/SURFEX/dgam.F90
+++ b/src/SURFEX/dgam.F90
@@ -125,6 +125,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!J.Escobar10/06/2013: replace DOUBLE PRECISION by REAL to handle problem for promotion of real on IBM SP
+!!J.Escobar 5/04/2018: for real*4 compilation, replace DEXP => EXP
 !----------------------------------------------------
 !################################################################
 !
diff --git a/src/SURFEX/gather_and_write_mpi.F90 b/src/SURFEX/gather_and_write_mpi.F90
index 0cc1a8ef4d3132df67c46baa6aa80f6a7dc26771..e8dd6caa2d00e4fa8e0e657761597de19a1652d8 100644
--- a/src/SURFEX/gather_and_write_mpi.F90
+++ b/src/SURFEX/gather_and_write_mpi.F90
@@ -8,6 +8,7 @@ MODULE MODI_GATHER_AND_WRITE_MPI
 !!    -------------
 !!      Original       
 !!      J.Escobar      10/06/2013: replace DOUBLE PRECISION by REAL to handle problem for promotion of real on IBM SP
+!!      J.Escobar      05/04/2018: for real*4 compilation, differenced real(kind=8) & real(kind=4) routine version 
 !----------------------------------------------------
 !
 INTERFACE GATHER_AND_WRITE_MPI
@@ -358,7 +359,7 @@ INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 INTEGER, DIMENSION(NSIZE,SIZE(KWORK2,2),SIZE(KWORK2,3)) :: IINTER
 INTEGER, DIMENSION(NSIZE,SIZE(KWORK,2),SIZE(KWORK,3)) :: IWORK
 !
-DOUBLE PRECISION   :: XTIME0
+REAL   :: XTIME0
 !
 #ifdef SFX_MPI
 INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
@@ -455,27 +456,117 @@ END SUBROUTINE GATHER_AND_WRITE_MPI_N3D
 !
 SUBROUTINE GATHER_AND_WRITE_MPI_X1D(PWORK,PWORK2,KMASK)
 !
-USE MODI_GATHER_AND_WRITE_MPI_K4
+USE MODD_SURFEX_MPI, ONLY : NINDEX, NPROC, NRANK, NCOMM, NPIO, NSIZE, &
+                            XTIME_COMM_WRITE, XTIME_CALC_WRITE, &
+                            IDX_W, WLOG_MPI
 !
-USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO
+USE MODD_SURF_PAR, ONLY : XUNDEF
+!
+USE MODI_UNPACK_SAME_RANK
 !
 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
 USE PARKIND1  ,ONLY : JPRB
 !
 IMPLICIT NONE
 !
+#ifdef SFX_MPI
+INCLUDE "mpif.h"
+#endif
+!
 REAL, DIMENSION(:), INTENT(IN) :: PWORK
-REAL(KIND=KIND(PWORK)), DIMENSION(:), INTENT(OUT) :: PWORK2
+REAL(KIND=8), DIMENSION(:), INTENT(OUT) :: PWORK2
+!
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
+REAL, DIMENSION(NSIZE) :: ZINTER
+REAL, DIMENSION(NSIZE) :: ZWORK
+REAL   :: XTIME0
+!
+#ifdef SFX_MPI
+INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
+#endif
+INTEGER :: ICPT
+INTEGER :: I,J, IP1, IS1
+INTEGER :: INFOMPI
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
+!
 !
 IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X1D',0,ZHOOK_HANDLE)
 !
-IF (PRESENT(KMASK)) THEN
-  CALL GATHER_AND_WRITE_MPI_K4(PWORK,PWORK2,KMASK)
+ZWORK(:) = XUNDEF
+!
+#ifdef SFX_MPI
+XTIME0 = MPI_WTIME()
+#endif
+!
+IF (SIZE(PWORK)>0) THEN
+  IF (PRESENT(KMASK)) THEN
+    CALL UNPACK_SAME_RANK(KMASK,PWORK,ZWORK(:))
+  ELSE
+    ZWORK(1:SIZE(PWORK)) = PWORK(:)
+  ENDIF
+ENDIF
+!
+#ifdef SFX_MPI
+XTIME_CALC_WRITE = XTIME_CALC_WRITE + (MPI_WTIME() - XTIME0)
+!
+XTIME0 = MPI_WTIME()
+#endif
+!
+IF (NRANK/=NPIO) THEN
+  !
+  IDX_W = IDX_W + 1
+  !
+#ifdef SFX_MPI
+  XTIME0 = MPI_WTIME()
+  CALL MPI_SEND(ZWORK,SIZE(ZWORK)*KIND(ZWORK)/4,MPI_REAL,NPIO,IDX_W,NCOMM,INFOMPI)
+  XTIME_COMM_WRITE = XTIME_COMM_WRITE + (MPI_WTIME() - XTIME0)
+#endif
+  !
 ELSE
-  CALL GATHER_AND_WRITE_MPI_K4(PWORK,PWORK2)
+  !
+  PWORK2(:) = 0.
+  !    
+  IDX_W = IDX_W + 1
+  !
+  DO I=0,NPROC-1  
+    !
+#ifdef SFX_MPI
+    XTIME0 = MPI_WTIME()
+#endif
+    !
+    IF (I/=NPIO) THEN
+#ifdef SFX_MPI
+      CALL MPI_RECV(ZINTER,SIZE(ZINTER)*KIND(ZINTER)/4,MPI_REAL,I,IDX_W,NCOMM,ISTATUS,INFOMPI)
+#endif
+    ELSE
+      ZINTER(:) = ZWORK(:)
+    ENDIF
+    !
+#ifdef SFX_MPI
+    XTIME_COMM_WRITE = XTIME_COMM_WRITE + (MPI_WTIME() - XTIME0)
+    !
+    XTIME0 = MPI_WTIME()
+#endif
+    !
+    ICPT = 0
+    !
+    DO J=1,SIZE(NINDEX)
+      !
+      IF ( NINDEX(J)==I ) THEN
+        ICPT = ICPT + 1
+        PWORK2(J) = ZINTER(ICPT)
+      ENDIF
+      !
+    ENDDO
+    !
+#ifdef SFX_MPI
+    XTIME_CALC_WRITE = XTIME_CALC_WRITE + (MPI_WTIME() - XTIME0)
+#endif
+    !
+  ENDDO
+  !
 ENDIF
 !
 IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X1D',1,ZHOOK_HANDLE)
@@ -486,27 +577,122 @@ END SUBROUTINE GATHER_AND_WRITE_MPI_X1D
 !
 SUBROUTINE GATHER_AND_WRITE_MPI_X2D(PWORK,PWORK2,KMASK)
 !
-USE MODI_GATHER_AND_WRITE_MPI_K4
+USE MODD_SURF_PAR, ONLY : XUNDEF
 !
-USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO
+USE MODD_SURFEX_MPI, ONLY : NINDEX, NPROC, NRANK, NCOMM, NPIO, NSIZE, &
+                            XTIME_COMM_WRITE,  &
+                            XTIME_CALC_WRITE, IDX_W, WLOG_MPI
+!
+USE MODI_UNPACK_SAME_RANK
 !
 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
 USE PARKIND1  ,ONLY : JPRB
 !
 IMPLICIT NONE
 !
+#ifdef SFX_MPI
+INCLUDE "mpif.h"
+#endif
+!
 REAL, DIMENSION(:,:), INTENT(IN) :: PWORK
-REAL(KIND=KIND(PWORK)), DIMENSION(:,:), INTENT(OUT) :: PWORK2
+REAL(KIND=8), DIMENSION(:,:), INTENT(OUT) :: PWORK2
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
+REAL, DIMENSION(NSIZE,SIZE(PWORK2,2)) :: ZINTER
+REAL, DIMENSION(NSIZE,SIZE(PWORK,2)) :: ZWORK
+REAL:: XTIME0
+!
+#ifdef SFX_MPI
+INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
+#endif
+INTEGER :: ICPT, IX2, IS1, IS2, IP1, IP2
+INTEGER :: I,J
+INTEGER :: INFOMPI
+!
+REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
+!
 !
 IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X2D',0,ZHOOK_HANDLE)
 !
-IF (PRESENT(KMASK)) THEN
-  CALL GATHER_AND_WRITE_MPI_K4(PWORK,PWORK2,KMASK)
+ZWORK(:,:) = XUNDEF
+!
+#ifdef SFX_MPI
+XTIME0 = MPI_WTIME()
+#endif
+!
+IF (SIZE(PWORK,1)>0) THEN
+  IF (PRESENT(KMASK)) THEN
+    CALL UNPACK_SAME_RANK(KMASK,PWORK,ZWORK(:,:))
+  ELSE
+    ZWORK(1:SIZE(PWORK,1),:) = PWORK(:,:)
+  ENDIF
+ENDIF
+!
+#ifdef SFX_MPI
+XTIME_CALC_WRITE = XTIME_CALC_WRITE + (MPI_WTIME() - XTIME0)
+!
+XTIME0 = MPI_WTIME()
+#endif
+!
+IF (NRANK/=NPIO) THEN
+  !
+  IDX_W = IDX_W + 1
+  !
+#ifdef SFX_MPI
+  XTIME0 = MPI_WTIME()
+  CALL MPI_SEND(ZWORK(:,:),SIZE(ZWORK)*KIND(ZWORK)/4,MPI_REAL,NPIO,IDX_W,NCOMM,INFOMPI)
+  XTIME_COMM_WRITE = XTIME_COMM_WRITE + (MPI_WTIME() - XTIME0)
+#endif
+  !
+ELSEIF (NPROC>1) THEN
+  !
+  PWORK2(:,:) = 0.
+  !
+  IDX_W = IDX_W + 1
+  !  
+!!$OMP PARALLEL DO PRIVATE(I,ZINTER,ICPT,J,ISTATUS,INFOMPI,ZHOOK_HANDLE_OMP)  
+  DO I=0,NPROC-1
+    !
+#ifdef SFX_MPI
+    XTIME0 = MPI_WTIME()
+#endif
+    !
+    IF (I/=NPIO) THEN
+#ifdef SFX_MPI
+      CALL MPI_RECV(ZINTER,SIZE(ZINTER)*KIND(ZINTER)/4,MPI_REAL,I,IDX_W,NCOMM,ISTATUS,INFOMPI)
+#endif
+    ELSE
+      ZINTER(:,:) = ZWORK(:,:)
+    ENDIF
+!    !
+#ifdef SFX_MPI
+    XTIME_COMM_WRITE = XTIME_COMM_WRITE + (MPI_WTIME() - XTIME0)
+    !
+    XTIME0 = MPI_WTIME()
+#endif
+    !
+    ICPT = 0
+    !
+    DO J=1,SIZE(NINDEX)
+      !
+      IF ( NINDEX(J)==I ) THEN
+        ICPT = ICPT + 1
+        PWORK2(J,:) = ZINTER(ICPT,:)
+      ENDIF
+      !
+    ENDDO
+     !
+#ifdef SFX_MPI
+    XTIME_CALC_WRITE = XTIME_CALC_WRITE + (MPI_WTIME() - XTIME0)
+#endif
+     !
+  ENDDO
+!!$OMP END PARALLEL DO
+  !
 ELSE
-  CALL GATHER_AND_WRITE_MPI_K4(PWORK,PWORK2)
+  !
+  PWORK2(:,:) = ZWORK(:,:)
+  !
 ENDIF
 !
 IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X2D',1,ZHOOK_HANDLE)
@@ -517,30 +703,142 @@ END SUBROUTINE GATHER_AND_WRITE_MPI_X2D
 !
 SUBROUTINE GATHER_AND_WRITE_MPI_X3D(PWORK,PWORK2,KMASK)
 !
-USE MODI_GATHER_AND_WRITE_MPI_K4
+USE MODD_SURF_PAR, ONLY : XUNDEF
 !
-USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO
+USE MODD_SURFEX_MPI, ONLY : NINDEX, NPROC, NRANK, NCOMM, NPIO, NSIZE, &
+                            XTIME_COMM_WRITE,  &
+                            XTIME_CALC_WRITE, IDX_W, WLOG_MPI
+!
+USE MODI_UNPACK_SAME_RANK
 !
 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
 USE PARKIND1  ,ONLY : JPRB
 !
 IMPLICIT NONE
 !
+#ifdef SFX_MPI
+INCLUDE "mpif.h"
+#endif
+!
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PWORK
-REAL(KIND=KIND(PWORK)), DIMENSION(:,:,:), INTENT(OUT) :: PWORK2
+REAL(KIND=8), DIMENSION(:,:,:), INTENT(OUT) :: PWORK2
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
+REAL, DIMENSION(NSIZE,SIZE(PWORK2,2),SIZE(PWORK2,3)) :: ZINTER
+REAL, DIMENSION(NSIZE,SIZE(PWORK,2),SIZE(PWORK,3)) :: ZWORK
+REAL   :: XTIME0
 !
-IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D',0,ZHOOK_HANDLE)
+#ifdef SFX_MPI
+INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
+#endif
+INTEGER :: ICPT, IX2, IS1, IS2, IP1, IP2
+INTEGER :: I,J
+INTEGER :: INFOMPI
 !
-IF (PRESENT(KMASK)) THEN
-  CALL GATHER_AND_WRITE_MPI_K4(PWORK,PWORK2,KMASK)
+REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
+!
+!
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_1',0,ZHOOK_HANDLE)
+!
+ZWORK(:,:,:) = XUNDEF
+!
+#ifdef SFX_MPI
+XTIME0 = MPI_WTIME()
+#endif
+!
+IF (SIZE(PWORK,1)>0) THEN
+  IF (PRESENT(KMASK)) THEN
+    CALL UNPACK_SAME_RANK(KMASK,PWORK(:,:,:),ZWORK(:,:,:))
+  ELSE
+    ZWORK(1:SIZE(PWORK,1),:,:) = PWORK(:,:,:)
+  ENDIF
+ENDIF
+!
+#ifdef SFX_MPI
+XTIME_CALC_WRITE = XTIME_CALC_WRITE + (MPI_WTIME() - XTIME0)
+!
+XTIME0 = MPI_WTIME()
+#endif
+!
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_1',1,ZHOOK_HANDLE)
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_2',0,ZHOOK_HANDLE)
+
+IF (NRANK/=NPIO) THEN
+  !
+  !  
+  IDX_W = IDX_W + 1
+  !
+#ifdef SFX_MPI
+  XTIME0 = MPI_WTIME()
+  CALL MPI_SEND(ZWORK(:,:,:),SIZE(ZWORK)*KIND(ZWORK)/4,MPI_REAL,NPIO,IDX_W,NCOMM,INFOMPI)
+  XTIME_COMM_WRITE = XTIME_COMM_WRITE + (MPI_WTIME() - XTIME0)
+#endif
+  !
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_2',1,ZHOOK_HANDLE)
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_5',0,ZHOOK_HANDLE)
+  !
+ELSEIF (NPROC>1) THEN
+  !
+  PWORK2(:,:,:) = 0.
+  !
+  IDX_W = IDX_W + 1
+  !
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_2',1,ZHOOK_HANDLE)
+
+!!$OMP PARALLEL DO PRIVATE(I,ZINTER,ICPT,J,INFOMPI,ISTATUS,ZHOOK_HANDLE_OMP)
+  DO I=0,NPROC-1
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_3',0,ZHOOK_HANDLE_OMP)
+    !
+#ifdef SFX_MPI   
+    XTIME0 = MPI_WTIME()
+#endif    
+    !
+    IF (I/=NPIO) THEN
+#ifdef SFX_MPI
+      CALL MPI_RECV(ZINTER,SIZE(ZINTER)*KIND(ZINTER)/4,MPI_REAL,I,IDX_W,NCOMM,ISTATUS,INFOMPI)
+#endif
+    ELSE
+      ZINTER(:,:,:) = ZWORK(:,:,:)
+    ENDIF
+!    !
+#ifdef SFX_MPI    
+    XTIME_COMM_WRITE = XTIME_COMM_WRITE + (MPI_WTIME() - XTIME0)
+    !
+    XTIME0 = MPI_WTIME()
+#endif     
+    !    
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_3',1,ZHOOK_HANDLE_OMP)
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_4',0,ZHOOK_HANDLE_OMP)
+
+    ICPT = 0
+    !
+    DO J=1,SIZE(NINDEX)
+      !
+      IF ( NINDEX(J)==I ) THEN
+        ICPT = ICPT + 1
+        PWORK2(J,:,:) = ZINTER(ICPT,:,:)
+      ENDIF
+      !
+    ENDDO
+     !
+#ifdef SFX_MPI    
+    XTIME_CALC_WRITE = XTIME_CALC_WRITE + (MPI_WTIME() - XTIME0)
+#endif      
+     ! 
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_4',1,ZHOOK_HANDLE_OMP)
+  ENDDO
+!!$OMP END PARALLEL DO
+  !
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_5',0,ZHOOK_HANDLE)
+  !
 ELSE
-  CALL GATHER_AND_WRITE_MPI_K4(PWORK,PWORK2)
+  PWORK2(:,:,:) = ZWORK(:,:,:)
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_2',1,ZHOOK_HANDLE)
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_5',0,ZHOOK_HANDLE)
+
 ENDIF
 !
-IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D',1,ZHOOK_HANDLE)
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3D_5',1,ZHOOK_HANDLE)
 !
 END SUBROUTINE GATHER_AND_WRITE_MPI_X3D
 !
@@ -558,10 +856,10 @@ USE PARKIND1  ,ONLY : JPRB
 IMPLICIT NONE
 !
 REAL, DIMENSION(:), INTENT(IN) :: PWORK
-REAL(KIND=KIND(PWORK)/2), DIMENSION(:), INTENT(OUT) :: PWORK2
+REAL(KIND=4), DIMENSION(:), INTENT(OUT) :: PWORK2
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
-REAL, DIMENSION(:), ALLOCATABLE :: ZINTER
+REAL(KIND=4), DIMENSION(:), ALLOCATABLE :: ZINTER
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X1DK4',0,ZHOOK_HANDLE)
@@ -596,10 +894,10 @@ USE PARKIND1  ,ONLY : JPRB
 IMPLICIT NONE
 !
 REAL, DIMENSION(:,:), INTENT(IN) :: PWORK
-REAL(KIND=KIND(PWORK)/2), DIMENSION(:,:), INTENT(OUT) :: PWORK2
+REAL(KIND=4), DIMENSION(:,:), INTENT(OUT) :: PWORK2
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZINTER
+REAL(KIND=4), DIMENSION(:,:), ALLOCATABLE :: ZINTER
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X2DK4',0,ZHOOK_HANDLE)
@@ -619,4 +917,42 @@ DEALLOCATE(ZINTER)
 IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X2DK4',1,ZHOOK_HANDLE)
 !
 END SUBROUTINE GATHER_AND_WRITE_MPI_X2DK4
+!
+!**************************************************************************
+!
+SUBROUTINE GATHER_AND_WRITE_MPI_X3DK4(PWORK,PWORK2,KMASK)
+!
+USE MODI_GATHER_AND_WRITE_MPI_K4
+!
+USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO
+!
+USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
+USE PARKIND1  ,ONLY : JPRB
+!
+IMPLICIT NONE
+!
+REAL, DIMENSION(:,:,:), INTENT(IN) :: PWORK
+REAL(KIND=4), DIMENSION(:,:,:), INTENT(OUT) :: PWORK2
+INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
+!
+REAL(KIND=4), DIMENSION(:,:,:), ALLOCATABLE :: ZINTER
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3DK4',0,ZHOOK_HANDLE)
+!
+ALLOCATE(ZINTER(SIZE(PWORK2,1),SIZE(PWORK2,2),SIZE(PWORK2,3)))
+IF (PRESENT(KMASK)) THEN
+  CALL GATHER_AND_WRITE_MPI_K4(PWORK,ZINTER,KMASK)
+ELSE
+  CALL GATHER_AND_WRITE_MPI_K4(PWORK,ZINTER)
+ENDIF
+!
+IF (NRANK==NPIO) THEN
+  PWORK2(:,:,:) = ZINTER(:,:,:)
+ENDIF
+DEALLOCATE(ZINTER)
+!
+IF (LHOOK) CALL DR_HOOK('GATHER_AND_WRITE_MPI_X3DK4',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE GATHER_AND_WRITE_MPI_X3DK4
 
diff --git a/src/SURFEX/gather_and_write_mpi_k4.F90 b/src/SURFEX/gather_and_write_mpi_k4.F90
index ddeace8a76b520008e22492a85becb10cf372cff..1bccd0f73b075fb8920b4b29f929eee39bf1d7e0 100644
--- a/src/SURFEX/gather_and_write_mpi_k4.F90
+++ b/src/SURFEX/gather_and_write_mpi_k4.F90
@@ -8,6 +8,7 @@ MODULE MODI_GATHER_AND_WRITE_MPI_K4
 !!    -------------
 !!      Original       
 !!      J.Escobar      10/06/2013: replace DOUBLE PRECISION by REAL to handle problem for promotion of real on IBM SP
+!!      J.Escobar      05/04/2018: for real*4 compilation, differenced real(kind=8) & real(kind=4) routine version 
 !----------------------------------------------------
 !
 INTERFACE GATHER_AND_WRITE_MPI_K4
@@ -15,7 +16,7 @@ INTERFACE GATHER_AND_WRITE_MPI_K4
 SUBROUTINE GATHER_AND_WRITE_MPI_X1D0(PWORK,PWORK2,KMASK)
 !
 REAL, DIMENSION(:), INTENT(IN) :: PWORK
-REAL, DIMENSION(:), INTENT(OUT) :: PWORK2
+REAL(KIND=4), DIMENSION(:), INTENT(OUT) :: PWORK2
 !
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
@@ -24,7 +25,7 @@ END SUBROUTINE GATHER_AND_WRITE_MPI_X1D0
 SUBROUTINE GATHER_AND_WRITE_MPI_X2D0(PWORK,PWORK2,KMASK)
 !
 REAL, DIMENSION(:,:), INTENT(IN) :: PWORK
-REAL, DIMENSION(:,:), INTENT(OUT) :: PWORK2
+REAL(KIND=4), DIMENSION(:,:), INTENT(OUT) :: PWORK2
 !
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
@@ -33,7 +34,7 @@ END SUBROUTINE GATHER_AND_WRITE_MPI_X2D0
 SUBROUTINE GATHER_AND_WRITE_MPI_X3D0(PWORK,PWORK2,KMASK)
 !
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PWORK
-REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWORK2
+REAL(KIND=4), DIMENSION(:,:,:), INTENT(OUT) :: PWORK2
 !
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
@@ -65,7 +66,7 @@ INCLUDE "mpif.h"
 #endif
 !
 REAL, DIMENSION(:), INTENT(IN) :: PWORK
-REAL, DIMENSION(:), INTENT(OUT) :: PWORK2
+REAL(KIND=4), DIMENSION(:), INTENT(OUT) :: PWORK2
 !
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
@@ -187,7 +188,7 @@ INCLUDE "mpif.h"
 #endif
 !
 REAL, DIMENSION(:,:), INTENT(IN) :: PWORK
-REAL, DIMENSION(:,:), INTENT(OUT) :: PWORK2
+REAL(KIND=4), DIMENSION(:,:), INTENT(OUT) :: PWORK2
 !
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
@@ -315,13 +316,13 @@ INCLUDE "mpif.h"
 #endif
 !
 REAL, DIMENSION(:,:,:), INTENT(IN) :: PWORK
-REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWORK2
+REAL(KIND=4), DIMENSION(:,:,:), INTENT(OUT) :: PWORK2
 !
 INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
 !
 REAL, DIMENSION(NSIZE,SIZE(PWORK2,2),SIZE(PWORK2,3)) :: ZINTER
 REAL, DIMENSION(NSIZE,SIZE(PWORK,2),SIZE(PWORK,3)) :: ZWORK
-DOUBLE PRECISION   :: XTIME0
+REAL   :: XTIME0
 !
 #ifdef SFX_MPI
 INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
diff --git a/src/SURFEX/mode_geo_gauss.F90 b/src/SURFEX/mode_geo_gauss.F90
index f148bcd5e4983d10f859aec6264476c82ed49df2..58957ed3224d9ec45ab3f2ce592ae38ef07cba27 100644
--- a/src/SURFEX/mode_geo_gauss.F90
+++ b/src/SURFEX/mode_geo_gauss.F90
@@ -11,6 +11,8 @@ MODULE MODE_GEO_GAUSS
   !!     MODIFICATION
   !!     ------------
   !!       Original  10/2005
+  !!       J.Escobar 30/03/2017  : Management of compilation of ECMWF_RAD in REAL*8 with MNH_REAL=R4
+  !!       J.Escobar 05/04/2018  : for real*4 compilation , change some REAL kind
   !!
   !--------------------------------------------------------------------------- 
   USE EGGANGLES, ONLY : LOLA
@@ -106,7 +108,7 @@ CONTAINS
     TYPE (LOLA), INTENT(IN)          :: PT_TR
     TYPE (LOLA), INTENT(IN)          :: PT_POLE
 
-    REAL(KIND=JPRB)    :: ZSIN, ZCOS
+    REAL    :: ZSIN, ZCOS
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
     IF (LHOOK) CALL DR_HOOK('MODE_GEO_GAUSS:ROTATE_G_S',0,ZHOOK_HANDLE)
@@ -129,7 +131,7 @@ CONTAINS
     TYPE (LOLA), INTENT(IN)                        :: PT_POLE
     TYPE (LOLA), DIMENSION(SIZE(PT_TR))            :: PT_REEL
 
-    REAL(KIND=JPRB), DIMENSION(SIZE(PT_TR))                   :: ZSIN, ZCOS
+    REAL, DIMENSION(SIZE(PT_TR))                   :: ZSIN, ZCOS
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
     IF (LHOOK) CALL DR_HOOK('MODE_GEO_GAUSS:ROTATE_G_V',0,ZHOOK_HANDLE)
@@ -155,7 +157,7 @@ CONTAINS
     TYPE (LOLA), INTENT(IN)          :: PT_REEL
     TYPE (LOLA), INTENT(IN)          :: PT_POLE
 
-    REAL(KIND=JPRB) :: ZSIN, ZCOS
+    REAL :: ZSIN, ZCOS
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
     IF (LHOOK) CALL DR_HOOK('MODE_GEO_GAUSS:ANTI_ROTATE_G_S',0,ZHOOK_HANDLE)
@@ -177,7 +179,7 @@ CONTAINS
     TYPE (LOLA), INTENT(IN)                        :: PT_POLE
     TYPE (LOLA), DIMENSION(SIZE(PT_REEL))          :: PT_TR  
 
-    REAL(KIND=JPRB), DIMENSION(SIZE(PT_REEL)) :: ZSIN, ZCOS
+    REAL, DIMENSION(SIZE(PT_REEL)) :: ZSIN, ZCOS
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
    IF (LHOOK) CALL DR_HOOK('MODE_GEO_GAUSS:ANTI_ROTATE_G_V',0,ZHOOK_HANDLE)
@@ -202,7 +204,7 @@ CONTAINS
     TYPE (LOLA), INTENT(IN)          :: PT_COORD
     REAL, INTENT(IN)                 :: PCODIL
 
-    REAL(KIND=JPRB) :: ZPC2, ZSIN, ZCOS
+    REAL :: ZPC2, ZSIN, ZCOS
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
     IF (LHOOK) CALL DR_HOOK('MODE_GEO_GAUSS:ETIR_S',0,ZHOOK_HANDLE)
@@ -222,7 +224,7 @@ CONTAINS
     REAL, INTENT(IN)                        :: PCODIL
     TYPE (LOLA), DIMENSION(SIZE(PT_COORD))  :: PT_ET
 
-    REAL(KIND=JPRB), DIMENSION(SIZE(PT_COORD))         :: ZPC2, ZSIN, ZCOS
+    REAL, DIMENSION(SIZE(PT_COORD))         :: ZPC2, ZSIN, ZCOS
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
     IF (LHOOK) CALL DR_HOOK('MODE_GEO_GAUSS:ETIR_V',0,ZHOOK_HANDLE)
@@ -241,7 +243,7 @@ CONTAINS
     TYPE (LOLA), INTENT(IN)          :: PT_COORD
     REAL, INTENT(IN)                 :: PCODIL
 
-    REAL(KIND=JPRB)     :: ZPC2, ZSIN, ZCOS
+    REAL     :: ZPC2, ZSIN, ZCOS
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
     IF (LHOOK) CALL DR_HOOK('MODE_GEO_GAUSS:RETRE_S',0,ZHOOK_HANDLE)
@@ -261,7 +263,7 @@ CONTAINS
     REAL, INTENT(IN)                        :: PCODIL
     TYPE (LOLA), DIMENSION(SIZE(PT_COORD))  :: PT_RE
 
-    REAL(KIND=JPRB), DIMENSION(SIZE(PT_COORD))         :: ZPC2, ZSIN, ZCOS
+    REAL, DIMENSION(SIZE(PT_COORD))         :: ZPC2, ZSIN, ZCOS
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
     IF (LHOOK) CALL DR_HOOK('MODE_GEO_GAUSS:RETRE_V',0,ZHOOK_HANDLE)
@@ -283,7 +285,7 @@ CONTAINS
     TYPE (LOLA), INTENT(IN)          :: POLE, PT_COORD
     REAL, INTENT(IN)                 :: PCODIL
     
-    REAL(KIND=JPRB) :: ZPC2
+    REAL :: ZPC2
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
     IF (LHOOK) CALL DR_HOOK('MODE_GEO_GAUSS:MAP_FAC_S',0,ZHOOK_HANDLE)
     ZPC2  = PCODIL*PCODIL
@@ -299,7 +301,7 @@ CONTAINS
     REAL, INTENT(IN)                        :: PCODIL
     REAL, DIMENSION(SIZE(PT_COORD))         :: PMF
 
-    REAL(KIND=JPRB), DIMENSION(SIZE(PT_COORD))         :: ZPC2
+    REAL, DIMENSION(SIZE(PT_COORD))         :: ZPC2
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
     IF (LHOOK) CALL DR_HOOK('MODE_GEO_GAUSS:MAP_FAC_V',0,ZHOOK_HANDLE)
diff --git a/src/SURFEX/pgd_cover.F90 b/src/SURFEX/pgd_cover.F90
index ff55901770aecceb24b199114bf217a090e8468d..1df60681c5dc1967543036109e88ab5f83fc7ed4 100644
--- a/src/SURFEX/pgd_cover.F90
+++ b/src/SURFEX/pgd_cover.F90
@@ -38,6 +38,7 @@
 !!    B. Decharme  07/2009  compatibility between Surfex and Orca (Nemo) grid (Earth Model)
 !!    B. Decharme  07/2012  if sea or water imposed to 1 in a grid cell: no extrapolation
 !!    B. Decharme  02/2014  Add LRM_RIVER and remove lake over antarctica
+!!    J. Escobar   05/04/2018  : for real*4 compilation , change some REAL kind
 !!
 !----------------------------------------------------------------------------
 !
@@ -741,7 +742,7 @@ INTEGER, INTENT(INOUT) :: KCOVER
 INTEGER, INTENT(OUT) :: KC_SURF
 !
 LOGICAL :: GPRESENT
-REAL :: ZHOOK_HANDLE
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('PGD_COVER:FIT_COVERS',0,ZHOOK_HANDLE)
 !
@@ -802,7 +803,7 @@ INTEGER, DIMENSION(:), POINTER :: KMASK_COVER
 INTEGER, INTENT(IN) :: KCOVER
 !
 INTEGER :: ICPT
-REAL :: ZHOOK_HANDLE
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('PGD_COVER:MAKE_MASK_COVER',0,ZHOOK_HANDLE)
 !
@@ -836,7 +837,7 @@ REAL, DIMENSION(U%NDIM_FULL,SIZE(PCOVER,2)) :: ZCOVER_ALL
 INTEGER, DIMENSION(U%NDIM_FULL) :: IMAXCOVER_ALL
 INTEGER, DIMENSION(U%NSIZE_FULL) :: IMAXCOVER
 INTEGER :: JK, JCOV, ISIZE_OMP
-REAL :: ZHOOK_HANDLE_OMP
+REAL(KIND=JPRB) :: ZHOOK_HANDLE_OMP
 !
 ISIZE_OMP = MAX(1,SIZE(PCOVER,1)/NBLOCKTOT)
 !
diff --git a/src/SURFEX/read_and_send_mpi.F90 b/src/SURFEX/read_and_send_mpi.F90
index 8d3275736d26d4e3e10654fa8f7e3ce47b63decb..39a726edb82dd360c651572f92cfb55c6d9a1599 100644
--- a/src/SURFEX/read_and_send_mpi.F90
+++ b/src/SURFEX/read_and_send_mpi.F90
@@ -2,6 +2,11 @@
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !SFX_LIC for details. version 1.
+!!    MODIFICATION
+!!    ------------
+!!    J. Escobar   05/04/2018  : for real*4 compilation , change some REAL kind
+!!
+!----------------------------------------------------------------------------
 MODULE MODI_READ_AND_SEND_MPI
 !
 INTERFACE READ_AND_SEND_MPI
@@ -106,7 +111,7 @@ INTEGER, DIMENSION(MPI_STATUS_SIZE,NPROC-1) :: ISTATUS2
 INTEGER :: ICPT, IPIO, IDX, IREQ
 INTEGER :: I,J
 INTEGER :: INFOMPI
-DOUBLE PRECISION :: XTIME0
+REAL :: XTIME0
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
 !
@@ -249,7 +254,7 @@ INTEGER :: IS2, IP2
 INTEGER :: ICPT
 INTEGER :: I,J, K
 INTEGER :: INFOMPI
-DOUBLE PRECISION :: XTIME0
+REAL :: XTIME0
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
@@ -352,7 +357,7 @@ INTEGER :: IP2, IS2, IP3, IS3
 INTEGER :: ICPT, IPIO, IDX 
 INTEGER :: I,J
 INTEGER :: INFOMPI, IREQ
-DOUBLE PRECISION   :: XTIME0
+REAL   :: XTIME0
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
 !
@@ -490,7 +495,7 @@ INTEGER, DIMENSION(MPI_STATUS_SIZE) :: ISTATUS
 INTEGER :: ICPT, IPIO, IDX
 INTEGER :: I,J, IREQ
 INTEGER :: INFOMPI
-DOUBLE PRECISION   :: XTIME0
+REAL   :: XTIME0
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
 !
@@ -636,7 +641,7 @@ INTEGER :: IS2, IP2
 INTEGER :: ICPT, IPIO, IDX
 INTEGER :: I,J, K, IREQ
 INTEGER :: INFOMPI
-DOUBLE PRECISION   :: XTIME0
+REAL   :: XTIME0
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
 !
@@ -782,7 +787,7 @@ INTEGER :: IP2, IS2, IP3, IS3
 INTEGER :: ICPT, IPIO, IDX 
 INTEGER :: I,J
 INTEGER :: INFOMPI, IREQ
-DOUBLE PRECISION   :: XTIME0
+REAL   :: XTIME0
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE, ZHOOK_HANDLE_OMP
 !
diff --git a/src/configure b/src/configure
index 2df6915760973051a6b01b43f618e560808170e1..888458cd46658e74da5bb1c5a347eef2b36fdc3e 100755
--- a/src/configure
+++ b/src/configure
@@ -16,7 +16,7 @@ export VERSION_LIBAEC=${VERSION_LIBAEC:-"0.3.2"}
 export VERSION_HDF=${VERSION_HDF:-"1.8.20"}
 export VERSION_CDFC=${VERSION_CDFC:-"4.5.0"}
 export VERSION_CDFF=${VERSION_CDFF:-"4.4.4"}
-export VERSION_GRIBAPI=${VERSION_GRIBAPI:-"1.13.1"}
+export VERSION_GRIBAPI=${VERSION_GRIBAPI:-"1.26.0-Source"}
 export MNH_INT=${MNH_INT:-"4"}
 export LFI_INT=${LFI_INT:-8}
 export MNH_REAL=${MNH_REAL:-"8"}
@@ -24,7 +24,7 @@ export MNH_IOCDF4=${MNH_IOCDF4:-1}
 
 export VERSION_OASIS=${VERSION_OASIS:-"mct_v3"}
 export VERSION_TOY=${VERSION_TOY:-"v1-0"}
-export VERSION_NCL=${VERSION_NCL:-"ncl-6.3.0"}
+export VERSION_NCL=${VERSION_NCL:-"ncl-6.4.0"}
 
 export LEN_HREC=${LEN_HREC:-16}