diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90
index 1dc6e59950ba47f1b176781458cfcc3d94e56c35..8f4e4835a34e939884aa517bc353b000a844383b 100644
--- a/src/MNH/read_all_data_grib_case.f90
+++ b/src/MNH/read_all_data_grib_case.f90
@@ -127,6 +127,7 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE
 !!                  08/03/2018 (P.Wautelet)  replace ADD_FORECAST_TO_DATE by DATETIME_CORRECTDATE
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!         Pergaud  : 2018 add GFS
+!!                   01/2019 (G.Delautier via Q.Rodier) for GRIB2 ARPEGE and AROME from EPYGRAM
 !-------------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -323,6 +324,7 @@ REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZR_DUM
 INTEGER                            :: IMI
 TYPE(TFILEDATA),POINTER             :: TZFILE
 INTEGER, DIMENSION(JP_GFS)    :: IP_GFS   ! list of pressure levels for GFS model
+INTEGER :: IVERSION,ILEVTYPE
 !---------------------------------------------------------------------------------------
 IP_GFS=(/1000,975,950,925,900,850,800,750,700,650,600,550,500,450,400,350,300,&
            250,200,150,100,70,50,30,20,10/)!
@@ -448,8 +450,13 @@ SELECT CASE (ICENTER)
   CASE (85)
     SELECT CASE (HGRID)      
       CASE('lambert')
-        WRITE (ILUOUT0,'(A)') ' | Grib file from French Weather Service - Aladin france model'
-        IMODEL = 1
+        WRITE (ILUOUT0,'(A)') ' | Grib file from French Weather Service - Arome france model'
+        CALL GRIB_GET(IGRIB(1),'editionNumber',IVERSION,IRET_GRIB)
+        IF (IVERSION==2) THEN
+          IMODEL = 6 ! GRIB2 since summer 2018 (epygram)
+        ELSE
+          IMODEL = 1 ! GRIB1 befor summer 2018 (lfi2mv) 
+        ENDIF
         ALLOCATE(ZPARAM(10))
       CASE('mercator')
         WRITE (ILUOUT0,'(A)') ' | Grib file from French Weather Service - Aladin reunion model'
@@ -458,8 +465,13 @@ SELECT CASE (ICENTER)
 
     CASE('unknown_PLPresent','reduced_stretched_rotated_gg')
       WRITE (ILUOUT0,'(A)') ' | Grib file from French Weather Service - Arpege model'
-      IMODEL = 3
       ALLOCATE(ZPARAM(10))
+      CALL GRIB_GET(IGRIB(1),'editionNumber',IVERSION,IRET_GRIB)
+        IF (IVERSION==2) THEN
+          IMODEL = 7 ! GRIB2 since summer 2018 (epygram)
+        ELSE
+          IMODEL = 3 ! GRIB1 befor summer 2018 (lfi2mv)
+        ENDIF
 
     CASE('regular_gg')
       WRITE (ILUOUT0,'(A)') ' | Grib file from French Weather Service - Arpege model'
@@ -488,29 +500,31 @@ END IF
 WRITE (ILUOUT0,'(A)') ' | Searching orography'
 SELECT CASE (IMODEL)
   CASE(0) ! ECMWF
-     CALL SEARCH_FIELD(129,109,1,0,IGRIB,INUM_ZS)
+     CALL SEARCH_FIELD(IGRIB,INUM_ZS,KPARAM=129)
      IF(INUM_ZS < 0) THEN
-     CALL SEARCH_FIELD(129,1,0,0,IGRIB,INUM_ZS)
-       IF(INUM_ZS < 0) THEN
-         WRITE (ILUOUT0,'(A)')'Orography is missing - abort'
-       END IF 
-      END IF
+       WRITE (ILUOUT0,'(A)')'Orography is missing - abort'
+     END IF 
   CASE(3,4,5) ! arpege et mocage
-      CALL SEARCH_FIELD(8,-1,-1,-1,IGRIB,INUM_ZS)
+      CALL SEARCH_FIELD(IGRIB,INUM_ZS,KPARAM=8)
        IF(INUM_ZS < 0) THEN
          WRITE (ILUOUT0,'(A)')'Orography is missing - abort'
        ENDIF 
   CASE(1,2) ! aladin et aladin reunion
-      CALL SEARCH_FIELD(6,-1,-1,-1,IGRIB,INUM_ZS)
+      CALL SEARCH_FIELD(IGRIB,INUM_ZS,KPARAM=6)
+       IF(INUM_ZS < 0) THEN
+         WRITE (ILUOUT0,'(A)')'Orography is missing - abort'
+       ENDIF 
+  CASE(6,7) !  arpege and arome GRIB2
+      CALL SEARCH_FIELD(IGRIB,INUM_ZS,KDIS=0,KCAT=3,KNUMBER=5)
        IF(INUM_ZS < 0) THEN
          WRITE (ILUOUT0,'(A)')'Orography is missing - abort'
        ENDIF 
   CASE(10) ! NCEP
-   DO IVAR=0,222
-      CALL SEARCH_FIELD(IVAR,1,0,0,IGRIB,INUM_ZS)
-      IF(INUM_ZS < 0) THEN
-        WRITE (ILUOUT0,'(A)')'Orography is missing'
-      ENDIF
+      DO IVAR=0,222
+        CALL SEARCH_FIELD(IGRIB,INUM_ZS,KPARAM=IVAR)
+        IF(INUM_ZS < 0) THEN
+          WRITE (ILUOUT0,'(A)')'Orography is missing'
+        ENDIF
       END DO
       INUM_ZS=218
       WRITE (ILUOUT0,*) 'lsm  ',IGRIB(350)
@@ -561,11 +575,13 @@ WRITE (ILUOUT0,'(A)') ' | Searching pressure'
 
 SELECT CASE (IMODEL)
   CASE(0) ! ECMWF
-     CALL SEARCH_FIELD(152,-1,-1,-1,IGRIB,INUM)
+     CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=152)
   CASE(1,2,3,4,5) ! arpege mocage aladin et aladin reunion
-      CALL SEARCH_FIELD(1,-1,-1,-1,IGRIB,INUM)
+      CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=1)
+  CASE(6,7) ! NEW AROME,ARPEGE
+     CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=3,KNUMBER=25)
   CASE(10) ! NCEP
-      CALL SEARCH_FIELD(134,1,0,0,IGRIB,INUM)
+      CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=134)
 END SELECT
 IF(INUM < 0) THEN
    WRITE (ILUOUT0,'(A)')'Surface pressure is missing - abort'
@@ -578,7 +594,7 @@ ALLOCATE(ZVALUE(ISIZE))
 CALL GRIB_GET(IGRIB(INUM),'values',ZVALUE)
 ! determination des tableaux ZPS_G et ZLNPS_G
 SELECT CASE (IMODEL)
-  CASE(0) ! ECMWF
+  CASE(0,6,7) ! ECMWF
     ALLOCATE (ZPS_G  (ISIZE))
     ALLOCATE (ZLNPS_G(ISIZE))
     ZLNPS_G(:) =     ZVALUE(1:ISIZE)
@@ -645,64 +661,55 @@ DEALLOCATE (ZLNPS_G)
 !
 WRITE (ILUOUT0,'(A)') ' | Reading T and Q fields'
 !
-SELECT CASE (IMODEL)
-  CASE(0) ! ECMWF
+IF (IMODEL/=10) THEN
+  SELECT CASE (IMODEL)
+    CASE(0) ! ECMWF
           ISTARTLEVEL=1
           IT=130
           IQ=133
-     CALL SEARCH_FIELD(IT,109,ISTARTLEVEL,-1,IGRIB,INUM)
-     IF(INUM < 0) THEN 
-             ISTARTLEVEL=0
-       CALL SEARCH_FIELD(IT,109,ISTARTLEVEL,-1,IGRIB,INUM)
-     ENDIF
-     IF(INUM < 0) THEN
-        WRITE (ILUOUT0,'(A)')'Air temperature is missing - abort'
-        CALL ABORT
-        STOP
-     ENDIF      
-     CALL SEARCH_FIELD(IQ,109,ISTARTLEVEL,-1,IGRIB,INUM)
-     IF(INUM < 0) THEN
-        WRITE (ILUOUT0,'(A)')'Atmospheric specific humidity is missing - abort'
-        CALL ABORT
-        STOP
-     ENDIF 
-  CASE(1,2,3,4,5) ! arpege mocage aladin et aladin reunion
+    CASE(1,2,3,4,5) ! arpege mocage aladin et aladin reunion
           IT=11
           IQ=51
           ISTARTLEVEL=1
-      CALL SEARCH_FIELD(IT,109,ISTARTLEVEL,-1,IGRIB,INUM)
-      IF(INUM < 0) THEN 
-          ISTARTLEVEL=0    
-       CALL SEARCH_FIELD(IT,109,ISTARTLEVEL,-1,IGRIB,INUM)
-     ENDIF
-     IF(INUM < 0) THEN
-        WRITE (ILUOUT0,'(A)')'Air temperature is missing - abort'
-        CALL ABORT
-        STOP
-     ENDIF 
-     CALL SEARCH_FIELD(IQ,109,ISTARTLEVEL,-1,IGRIB,INUM)
-     IF(INUM < 0) THEN
-        WRITE (ILUOUT0,'(A)')'Atmospheric specific humidity is missing - abort'
-        CALL ABORT
-        STOP
-     ENDIF 
-  CASE(10) ! NCEP
-          ISTARTLEVEL=10
-          IT=130
-          IQ=157
-     CALL SEARCH_FIELD(IT,100,ISTARTLEVEL,-1,IGRIB,INUM)
-     IF(INUM < 0) THEN
-        WRITE (ILUOUT0,'(A)')'Air temperature is missing - abort'
-        CALL ABORT
-        STOP
-     ENDIF      
-     CALL SEARCH_FIELD(IQ,100,ISTARTLEVEL,-1,IGRIB,INUM)
-     IF(INUM < 0) THEN
-        WRITE (ILUOUT0,'(A)')'Atmospheric relative humidity is missing - abort'
-        CALL ABORT
-        STOP
-     ENDIF 
-END SELECT
+    CASE(6,7) !GRIB2 AROME AND ARPEGE
+     IT=130
+     IQ=133
+     ISTARTLEVEL=1
+  END SELECT
+        
+  CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IT,KLEV1=ISTARTLEVEL)
+  IF(INUM < 0) THEN 
+    ISTARTLEVEL=0
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IT,KLEV1=ISTARTLEVEL)
+  ENDIF
+  IF(INUM < 0) THEN
+    WRITE (ILUOUT0,'(A)')'Air temperature is missing - abort'
+    CALL ABORT
+    STOP
+  ENDIF      
+  CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IQ,KLEV1=ISTARTLEVEL)
+  IF(INUM < 0) THEN
+    WRITE (ILUOUT0,'(A)')'Atmospheric specific humidity is missing - abort'
+    CALL ABORT
+    STOP
+  ENDIF 
+ELSE ! NCEP
+  ISTARTLEVEL=10
+  IT=130
+  IQ=157
+  CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IT,KLEV1=ISTARTLEVEL)
+  IF(INUM < 0) THEN
+    WRITE (ILUOUT0,'(A)')'Air temperature is missing - abort'
+    CALL ABORT
+    STOP
+  ENDIF      
+  CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IQ,KLEV1=ISTARTLEVEL)
+  IF(INUM < 0) THEN
+    WRITE (ILUOUT0,'(A)')'Atmospheric relative humidity is missing - abort'
+    CALL ABORT
+    STOP
+  ENDIF 
+ENDIF
 !
 IF (IMODEL/=10) THEN ! others than NCEP
   CALL GRIB_GET(IGRIB(INUM),'NV',INLEVEL)
@@ -718,14 +725,14 @@ ALLOCATE (ZQ_G(ISIZE,INLEVEL))
 IF (IMODEL/=10) THEN ! others than NCEP
   DO JLOOP1=1, INLEVEL
     ILEV1 = JLOOP1-1+ISTARTLEVEL
-    CALL SEARCH_FIELD(IQ,109,ILEV1,-1,IGRIB,INUM)
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IQ,KLEV1=ILEV1)
     IF (INUM< 0) THEN
     !callabortstop
       WRITE(YMSG,*) 'atmospheric humidity level ',JLOOP1,' is missing'
       CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
     END IF
     CALL GRIB_GET(IGRIB(INUM),'values',ZQ_G(:,INLEVEL-JLOOP1+1))
-    CALL SEARCH_FIELD(IT,109,ILEV1,-1,IGRIB,INUM)
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IT,KLEV1=ILEV1)
     IF (INUM< 0) THEN
       !callabortstop
       WRITE(YMSG,*) 'atmospheric temperature level ',JLOOP1,' is missing'
@@ -737,7 +744,7 @@ IF (IMODEL/=10) THEN ! others than NCEP
 ELSE ! NCEP
   DO JLOOP1=1, INLEVEL
     ILEV1 = IP_GFS(JLOOP1)
-    CALL SEARCH_FIELD(IQ,100,ILEV1,-1,IGRIB,INUM)
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IQ,KLEV1=ILEV1)
     IF (INUM< 0) THEN
     !callabortstop
       WRITE(YMSG,*) 'atmospheric humidity level ',JLOOP1,' is missing'
@@ -745,7 +752,7 @@ ELSE ! NCEP
     END IF
     CALL GRIB_GET(IGRIB(INUM),'values',ZQ_G(:,JLOOP1),IRET_GRIB)
     WRITE (ILUOUT0,*) 'Q ',ILEV1,IRET_GRIB
-    CALL SEARCH_FIELD(IT,100,ILEV1,-1,IGRIB,INUM)
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IT,KLEV1=ILEV1)
     IF (INUM< 0) THEN
       !callabortstop
       WRITE(YMSG,*) 'atmospheric temperature level ',JLOOP1,' is missing'
@@ -790,7 +797,7 @@ IF (IMODEL/=10) THEN ! others than NCEP
       CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','there is no PV value in this message')
     ENDIF
     SELECT CASE (IMODEL)
-      CASE (0,3,4)
+      CASE (0,3,4,6,7)
         DO JLOOP1 = 1, INLEVEL
           XA_LS(1 + INLEVEL - JLOOP1) = ZPV(1+JLOOP1) / XP00_LS
           XB_LS(1 + INLEVEL - JLOOP1) = ZPV(2+INLEVEL+JLOOP1)
@@ -860,10 +867,10 @@ IF (IMODEL==1) THEN
   ! search cloud_water in Arome case (forecast)
   ISTARTLEVEL = 1
   IPAR=246
-  CALL SEARCH_FIELD(IPAR,109,ISTARTLEVEL,-1,IGRIB,INUM)
+  CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ISTARTLEVEL)
   IF (INUM < 0) THEN
     ISTARTLEVEL = 0
-    CALL SEARCH_FIELD(IPAR,109,ISTARTLEVEL,-1,IGRIB,INUM)
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ISTARTLEVEL)
   END IF
   IF (INUM > 0) THEN
     WRITE (ILUOUT0,'(A)') ' | Grib file from French Weather Service - Arome model (forecast)'
@@ -873,10 +880,33 @@ IF (IMODEL==1) THEN
   ! search also turbulent kinetic energy 
   ISTARTLEVEL = 1
   IPAR=251
-  CALL SEARCH_FIELD(IPAR,109,ISTARTLEVEL,-1,IGRIB,INUM)
+  CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ISTARTLEVEL)
   IF (INUM < 0) THEN
     ISTARTLEVEL = 0
-    CALL SEARCH_FIELD(IPAR,109,ISTARTLEVEL,-1,IGRIB,INUM)
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ISTARTLEVEL)
+  END IF
+  IF (INUM > 0) CTURB='TKEL'
+END IF
+
+IF (IMODEL==6) THEN ! GRIB2 AROME
+! search cloud_water in Arome case (forecast)
+  ISTARTLEVEL = 1
+  CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=6,KNUMBER=6,KLEV1=ISTARTLEVEL)
+  IF (INUM < 0) THEN
+    ISTARTLEVEL = 0
+    CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=6,KNUMBER=6,KLEV1=ISTARTLEVEL)
+  END IF
+  IF (INUM > 0) THEN
+    WRITE (ILUOUT0,'(A)') ' | Grib file from French Weather Service - Arome model (forecast)'
+    LCPL_AROME=.TRUE.
+    NRR=6
+  END IF
+  ! search also turbulent kinetic energy 
+  ISTARTLEVEL = 1
+  CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=19,KNUMBER=11,KLEV1=ISTARTLEVEL)
+  IF (INUM < 0) THEN
+    ISTARTLEVEL = 0
+    CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=19,KNUMBER=11,KLEV1=ISTARTLEVEL)
   END IF
   IF (INUM > 0) CTURB='TKEL'
 END IF
@@ -1034,12 +1064,35 @@ DEALLOCATE (ZEXNM_LS)
 !*  2.5.8 Read the other specific ratios (if Arome model)
 !
 IF (NRR >1) THEN
-  WRITE (ILUOUT0,'(A)') ' | Reading Q fields (except humidity)'
-  DO JLOOP2=1,NRR-1
-    IPAR=246+JLOOP2-1
+  IF (IMODEL==1) THEN
+    WRITE (ILUOUT0,'(A)') ' | Reading Q fields (except humidity)'
+    DO JLOOP2=1,NRR-1
+      IPAR=246+JLOOP2-1
+      DO JLOOP1=1, INLEVEL
+        ILEV1 = JLOOP1-1+ISTARTLEVEL
+        CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ILEV1)
+
+        IF (INUM < 0) THEN
+          !callabortstop
+          WRITE(YMSG,*) 'Specific ratio ',IPAR,' at level ',JLOOP1,' is missing'
+          CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+        END IF
+        CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
+        ALLOCATE(ZVALUE(ISIZE))
+        CALL GRIB_GET(IGRIB(INUM),'values',ZVALUE)
+        ALLOCATE(ZOUT(INO))
+        CALL HORIBL(ZPARAM(3),ZPARAM(4),ZPARAM(5),ZPARAM(6),INT(ZPARAM(2)),IINLO,INI, &
+                    ZVALUE,INO,ZXOUT,ZYOUT,ZOUT,.FALSE.,PTIME_HORI,.FALSE.)
+        CALL ARRAY_1D_TO_2D(INO,ZOUT,IIU,IJU,XQ_LS(:,:,INLEVEL-JLOOP1+1,1+JLOOP2))
+        DEALLOCATE (ZVALUE)
+        DEALLOCATE (ZOUT)
+      END DO
+    END DO 
+  ELSE ! GRIB2 AROME IMODEL =6
+    WRITE (ILUOUT0,'(A)') ' | Reading Q fields (except humidity)'
     DO JLOOP1=1, INLEVEL
       ILEV1 = JLOOP1-1+ISTARTLEVEL
-      CALL SEARCH_FIELD(IPAR,109,ILEV1,-1,IGRIB,INUM)
+      CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=6,KNUMBER=6,KLEV1=ILEV1)
 
       IF (INUM < 0) THEN
         !callabortstop
@@ -1052,19 +1105,102 @@ IF (NRR >1) THEN
       ALLOCATE(ZOUT(INO))
       CALL HORIBL(ZPARAM(3),ZPARAM(4),ZPARAM(5),ZPARAM(6),INT(ZPARAM(2)),IINLO,INI, &
         ZVALUE,INO,ZXOUT,ZYOUT,ZOUT,.FALSE.,PTIME_HORI,.FALSE.)
-      CALL ARRAY_1D_TO_2D(INO,ZOUT,IIU,IJU,XQ_LS(:,:,INLEVEL-JLOOP1+1,1+JLOOP2))
+      CALL ARRAY_1D_TO_2D(INO,ZOUT,IIU,IJU,XQ_LS(:,:,INLEVEL-JLOOP1+1,2))
       DEALLOCATE (ZVALUE)
       DEALLOCATE (ZOUT)
     END DO
-  END DO
+
+    DO JLOOP1=1, INLEVEL
+      ILEV1 = JLOOP1-1+ISTARTLEVEL
+      CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=85,KLEV1=ILEV1)
+
+      IF (INUM < 0) THEN
+        !callabortstop
+        WRITE(YMSG,*) 'Specific ratio for rain at level ',JLOOP1,' is missing'
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+      END IF
+      CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
+      ALLOCATE(ZVALUE(ISIZE))
+      CALL GRIB_GET(IGRIB(INUM),'values',ZVALUE)
+      ALLOCATE(ZOUT(INO))
+      CALL HORIBL(ZPARAM(3),ZPARAM(4),ZPARAM(5),ZPARAM(6),INT(ZPARAM(2)),IINLO,INI, &
+        ZVALUE,INO,ZXOUT,ZYOUT,ZOUT,.FALSE.,PTIME_HORI,.FALSE.)
+      CALL ARRAY_1D_TO_2D(INO,ZOUT,IIU,IJU,XQ_LS(:,:,INLEVEL-JLOOP1+1,3))
+      DEALLOCATE (ZVALUE)
+      DEALLOCATE (ZOUT)
+    END DO  
+
+
+    DO JLOOP1=1, INLEVEL
+      ILEV1 = JLOOP1-1+ISTARTLEVEL
+      CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=82,KLEV1=ILEV1)
+      IF (INUM < 0) THEN
+        !callabortstop
+        WRITE(YMSG,*) 'Specific ratio for ICE at level ',JLOOP1,' is missing'
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+      END IF
+      CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
+      ALLOCATE(ZVALUE(ISIZE))
+      CALL GRIB_GET(IGRIB(INUM),'values',ZVALUE)
+      ALLOCATE(ZOUT(INO))
+      CALL HORIBL(ZPARAM(3),ZPARAM(4),ZPARAM(5),ZPARAM(6),INT(ZPARAM(2)),IINLO,INI, &
+        ZVALUE,INO,ZXOUT,ZYOUT,ZOUT,.FALSE.,PTIME_HORI,.FALSE.)
+      CALL ARRAY_1D_TO_2D(INO,ZOUT,IIU,IJU,XQ_LS(:,:,INLEVEL-JLOOP1+1,4))
+      DEALLOCATE (ZVALUE)
+      DEALLOCATE (ZOUT)
+    END DO
+
+
+    DO JLOOP1=1, INLEVEL
+      ILEV1 = JLOOP1-1+ISTARTLEVEL
+      CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=86,KLEV1=ILEV1)
+      IF (INUM < 0) THEN
+        !callabortstop
+        WRITE(YMSG,*) 'Specific ratio ',IPAR,' at level ',JLOOP1,' is missing'
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+      END IF
+      CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
+      ALLOCATE(ZVALUE(ISIZE))
+      CALL GRIB_GET(IGRIB(INUM),'values',ZVALUE)
+      ALLOCATE(ZOUT(INO))
+      CALL HORIBL(ZPARAM(3),ZPARAM(4),ZPARAM(5),ZPARAM(6),INT(ZPARAM(2)),IINLO,INI, &
+        ZVALUE,INO,ZXOUT,ZYOUT,ZOUT,.FALSE.,PTIME_HORI,.FALSE.)
+      CALL ARRAY_1D_TO_2D(INO,ZOUT,IIU,IJU,XQ_LS(:,:,INLEVEL-JLOOP1+1,5))
+      DEALLOCATE (ZVALUE)
+      DEALLOCATE (ZOUT)
+    END DO
+
+
+    DO JLOOP1=1, INLEVEL
+      ILEV1 = JLOOP1-1+ISTARTLEVEL
+      CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=32,KLEV1=ILEV1)
+      IF (INUM < 0) THEN
+        !callabortstop
+        WRITE(YMSG,*) 'Specific ratio ',IPAR,' at level ',JLOOP1,' is missing'
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+      END IF
+      CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
+      ALLOCATE(ZVALUE(ISIZE))
+      CALL GRIB_GET(IGRIB(INUM),'values',ZVALUE)
+      ALLOCATE(ZOUT(INO))
+      CALL HORIBL(ZPARAM(3),ZPARAM(4),ZPARAM(5),ZPARAM(6),INT(ZPARAM(2)),IINLO,INI, &
+        ZVALUE,INO,ZXOUT,ZYOUT,ZOUT,.FALSE.,PTIME_HORI,.FALSE.)
+      CALL ARRAY_1D_TO_2D(INO,ZOUT,IIU,IJU,XQ_LS(:,:,INLEVEL-JLOOP1+1,6))
+      DEALLOCATE (ZVALUE)
+      DEALLOCATE (ZOUT)
+    END DO
+  END IF
 END IF
 !
 IF (CTURB=='TKEL') THEN
   WRITE (ILUOUT0,'(A)') ' | Reading TKE field'
-  IPAR=251
   DO JLOOP1=1, INLEVEL
     ILEV1 = JLOOP1-1+ISTARTLEVEL
-    CALL SEARCH_FIELD(IPAR,109,ILEV1,-1,IGRIB,INUM)
+    IF (IMODEL==1) THEN
+      CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=251,KLEV1=ILEV1)
+    ELSE ! case 6 new arome
+      CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=19,KNUMBER=11,KLEV1=ILEV1)
+    END IF
     IF (INUM <  0) THEN
       !callabortstop
       WRITE(YMSG,*) 'TKE at level ',JLOOP1,' is missing'
@@ -1109,9 +1245,7 @@ IF (IMODEL==5) THEN
     CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','Mocage model: Bad input argument in read_all_data_grib_case')
   END IF
   XSV_LS(:,:,:,:) = 0.
-  ITYP=109
   ILEV1=-1
-  ILEV2=-1
 !
   WRITE (ILUOUT0,'(A,A4,A)') ' | Reading Mocage species (ppp) from ',HFILE,' file'
 !
@@ -1166,7 +1300,7 @@ IF (IMODEL==5) THEN
     IF (INACT .NE. 0) THEN
       DO JLOOP1=1, INLEVEL
         ILEV1 = JLOOP1
-        CALL SEARCH_FIELD(INUMGRIB(JN),ITYP,ILEV1,ILEV2,IGRIB,INUM)
+        CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=INUMGRIB(JN),KLEV1=ILEV1)
         IF (INUM <  0) THEN
           !callabortstop
           WRITE(YMSG,*) 'Atmospheric ',INUMGRIB(JN),' grib chemical species level ',JLOOP1,' is missing'
@@ -1233,32 +1367,29 @@ END IF
 !
 IF (HFILE(1:3)=='ATM') THEN
 IF (IMODEL/=10) THEN ! others than NCEP
-  ITYP  = 109
   ISTARTLEVEL = 1
 ELSE
-  ITYP  = 100
   ISTARTLEVEL = 10
 END IF
-ILEV2 = -1
 ALLOCATE (XU_LS(IIU,IJU,INLEVEL))
 ALLOCATE (XV_LS(IIU,IJU,INLEVEL))
 ALLOCATE (ZTU_LS(INO))
 ALLOCATE (ZTV_LS(INO))
 !
 SELECT CASE (IMODEL)
-  CASE (0)
+  CASE (0,6,7)
     IPAR = 131
-    CALL SEARCH_FIELD(IPAR,ITYP,ISTARTLEVEL,ILEV2,IGRIB,INUM)
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ISTARTLEVEL)
     IF (INUM< 0) THEN
       ISTARTLEVEL = 0
-      CALL SEARCH_FIELD(IPAR,ITYP,ISTARTLEVEL,ILEV2,IGRIB,INUM)
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ISTARTLEVEL)
     END IF
   CASE (1,2,3)
     IPAR  = 33
-    CALL SEARCH_FIELD(IPAR,ITYP,ISTARTLEVEL,ILEV2,IGRIB,INUM)
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ISTARTLEVEL)
     IF (INUM < 0) THEN
       ISTARTLEVEL = 0
-      CALL SEARCH_FIELD(IPAR,ITYP,ISTARTLEVEL,ILEV2,IGRIB,INUM)
+      CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ISTARTLEVEL)
     END IF
   CASE (10)
     IPAR = 131
@@ -1272,7 +1403,7 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1
     ILEV1 = IP_GFS(JLOOP1)
   END IF
   ! read component u 
-  CALL SEARCH_FIELD(IPAR,ITYP,ILEV1,ILEV2,IGRIB,INUM)
+  CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ILEV1)
   IF (INUM < 0) THEN
     !callabortstop
     WRITE(YMSG,*) 'wind vector component "u" at level ',JLOOP1,' is missing'
@@ -1281,7 +1412,7 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1
   CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
   ALLOCATE(ZVALUE(ISIZE))
   CALL GRIB_GET(IGRIB(INUM),'values',ZVALUE)
-  IF (IMODEL==3) THEN
+  IF (IMODEL==3.OR.(IMODEL==7)) THEN
     ALLOCATE(ZTU0_LS(INI))
     ZTU0_LS(:) = ZVALUE(:)
   ELSE
@@ -1304,7 +1435,7 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1
   ELSE
     ILEV1 = IP_GFS(JLOOP1)
   END IF
-  CALL SEARCH_FIELD(IPAR+1,ITYP,ILEV1,ILEV2,IGRIB,INUM)
+  CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR+1,KLEV1=ILEV1)
   IF (INUM < 0) THEN
     !callabortstop
     WRITE(YMSG,*) 'wind vector component "v" at level ',JLOOP1,' is missing'
@@ -1313,7 +1444,7 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1
   CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
   ALLOCATE(ZVALUE(ISIZE))
   CALL GRIB_GET(IGRIB(INUM),'values',ZVALUE)
-  IF ((IMODEL==3)) THEN 
+  IF ((IMODEL==3).OR.(IMODEL==7)) THEN 
     CALL GRIB_GET(IGRIB(INUM),'Nj',INJ,IRET_GRIB)
     ALLOCATE(IINLO(INJ))         
     CALL COORDINATE_CONVERSION(IMODEL,IGRIB(INUM),IIU,IJU,ZLONOUT,ZLATOUT,&
@@ -1332,8 +1463,8 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1
     DEALLOCATE(ZOUT)
   END IF
   DEALLOCATE (ZVALUE)
-    ! interpolations for arpege grid
-  IF ((IMODEL==3)) THEN
+   ! interpolations for arpege grid
+  IF ((IMODEL==3).OR.(IMODEL==7)) THEN
     ! Comes back to real winds instead of stretched winds
     ! (but still with components according to Arpege grid axes)
     ZLATPOLE = ZPARAM(7) * XPI/180.
@@ -1413,7 +1544,7 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1
           ZTU_LS(JLOOP4)*SIN(ZALPHA) + ZTV_LS(JLOOP4)*COS(ZALPHA)
     ENDDO
   ENDDO
-  IF ((IMODEL==3)) THEN ! deallocation of Arpege arrays
+  IF ((IMODEL==3).OR.(IMODEL==7)) THEN ! deallocation of Arpege arrays
     DEALLOCATE (ZTU0_LS)
     DEALLOCATE (ZTV0_LS)
   END IF
@@ -1618,7 +1749,7 @@ IF (ODUMMY_REAL) THEN
   !
   DO JI = 1, IMOC
     WRITE(ILUOUT0,'(A,4(I3,1X))') CDUMMY_2D(JI),INUMGRIB(JI),INUMLEV(JI),INUMLEV1(JI),INUMLEV2(JI)
-    CALL SEARCH_FIELD(IPAR,ITYP,ILEV1,ILEV2,IGRIB,INUM)
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ILEV1)
     IF (INUM < 0) THEN
       WRITE (ILUOUT0,'(A,I3,A,I2,A)') ' -> 2D field ',INUMGRIB(JI),' is missing - abort'
       !callabortstop
@@ -1715,7 +1846,7 @@ END SUBROUTINE ARRAY_1D_TO_2D
 !---------------------------------------------------------------------------------------
 !---------------------------------------------------------------------------------------
 !#################################################################################
-SUBROUTINE SEARCH_FIELD(KPARAM,KLTYPE,KLEV1,KLEV2,KGRIB,KNUM)
+SUBROUTINE SEARCH_FIELD(KGRIB,KNUM,KPARAM,KDIS,KCAT,KNUMBER,KLEV1)
 !#################################################################################
 ! search the grib message corresponding to KPARAM,KLTYPE,KLEV1,KLEV2 in all 
 ! the KGIRB messages
@@ -1728,40 +1859,37 @@ USE MODE_IO_ll
 IMPLICIT NONE
 !
 !
-INTEGER,INTENT(IN)              :: KPARAM ! Parameter to read
-INTEGER,INTENT(IN)              :: KLTYPE ! Level type
-INTEGER,INTENT(IN)              :: KLEV1  ! Level parameter 1
-INTEGER,INTENT(IN)              :: KLEV2  ! Level parameter 2
 INTEGER(KIND=kindOfInt),DIMENSION(:),INTENT(IN) :: KGRIB ! number of grib messages
 INTEGER,INTENT(OUT)             :: KNUM  ! number of the message researched
+INTEGER,INTENT(IN),OPTIONAL     :: KPARAM ! INdicator of parameter/paramId
+INTEGER,INTENT(IN),OPTIONAL     :: KDIS ! Discipline (GRIB2)
+INTEGER,INTENT(IN),OPTIONAL     :: KCAT ! Catégorie (GRIB2)
+INTEGER,INTENT(IN),OPTIONAL     :: KNUMBER ! parameterNumber (GRIB2)
+INTEGER,INTENT(IN),OPTIONAL     :: KLEV1  ! Level 
 !
 ! Declaration of local variables
 !
 INTEGER :: IFOUND  ! Number of correct parameters
+INTEGER :: ISEARCH  ! Number of correct parameters to find
 INTEGER :: IRET    ! error code 
-INTEGER :: IPARAM  ! Parameter read
+INTEGER :: IPARAM,IDIS,ICAT,INUMBER
 INTEGER :: ILEV1   ! Level parameter 1
-INTEGER :: ILEV2   ! Level parameter 2
 INTEGER :: JLOOP   ! Dummy counter
 INTEGER :: IVERSION
-CHARACTER(LEN=24) :: YLTYPELU
-CHARACTER(LEN=20) :: YLTYPE
-!
 ! Variables used to display messages
 INTEGER :: ILUOUT0   ! Logical unit number of the listing
 !
 ILUOUT0 = TLUOUT0%NLU
 !
-SELECT CASE (KLTYPE) 
-CASE(100)
-  YLTYPE='isobaricInhPa'
-CASE(109)
-  YLTYPE='hybrid'
-CASE(1)
-  YLTYPE='surface'
-CASE DEFAULT
-  YLTYPE='unknown'
-END SELECT
+ISEARCH=0
+IF (PRESENT(KPARAM)) ISEARCH=ISEARCH+1
+IF (PRESENT(KDIS)) ISEARCH=ISEARCH+1
+IF (PRESENT(KCAT)) ISEARCH=ISEARCH+1
+IF (PRESENT(KNUMBER)) ISEARCH=ISEARCH+1
+IF (PRESENT(KLEV1)) ISEARCH=ISEARCH+1
+
+
+
 DO JLOOP=1,SIZE(KGRIB)
       IFOUND = 0
       ! 
@@ -1773,50 +1901,89 @@ DO JLOOP=1,SIZE(KGRIB)
         WRITE (ILUOUT0,'(A)')' | ECMWF pseudo-Grib data encountered, skipping field'
         CYCLE
       ENDIF
-      IF (IVERSION == 2) THEN
-        CALL GRIB_GET(KGRIB(JLOOP),'paramId',IPARAM,IRET_GRIB)
-      ELSE
-        CALL GRIB_GET(KGRIB(JLOOP),'indicatorOfParameter',IPARAM,IRET_GRIB)
-      ENDIF
-      IF (IRET_GRIB >   0) THEN
-        WRITE (ILUOUT0,'(A)')' | Error encountered in the Grib file, skipping field'
-        CYCLE
-      ELSE IF (IRET_GRIB == -6) THEN
-        WRITE (ILUOUT0,'(A)')' | ECMWF pseudo-Grib data encountered, skipping field'
-        CYCLE
+      IF (PRESENT(KPARAM)) THEN
+        IF (IVERSION == 2) THEN
+          CALL GRIB_GET(KGRIB(JLOOP),'paramId',IPARAM,IRET_GRIB)
+        ELSE
+          CALL GRIB_GET(KGRIB(JLOOP),'indicatorOfParameter',IPARAM,IRET_GRIB)
+        ENDIF
+        IF (IRET_GRIB >   0) THEN
+          WRITE (ILUOUT0,'(A)')' | Error encountered in the Grib file, skipping field'
+          CYCLE
+        ELSE IF (IRET_GRIB == -6) THEN
+          WRITE (ILUOUT0,'(A)')' | ECMWF pseudo-Grib data encountered, skipping field'
+          CYCLE
+        ENDIF
+        IF (IPARAM==KPARAM) THEN
+                IFOUND = IFOUND + 1
+        ELSE
+          CYCLE
+        ENDIF
       ENDIF
       !
-      CALL GRIB_GET(KGRIB(JLOOP),'typeOfLevel',YLTYPELU,IRET_GRIB)
-      IF (IRET_GRIB >   0) THEN
-        WRITE (ILUOUT0,'(A)')' | Error encountered in the Grib file, skipping field'
-        CYCLE
-      ELSE IF (IRET_GRIB == -6) THEN
-        WRITE (ILUOUT0,'(A)')' | ECMWF pseudo-Grib data encountered, skipping field'
-        CYCLE
+      IF (PRESENT(KDIS)) THEN
+        CALL GRIB_GET(KGRIB(JLOOP),'discipline',IDIS,IRET_GRIB)
+        IF (IRET_GRIB >   0) THEN
+          WRITE (ILUOUT0,'(A)')' | Error encountered in the Grib file, skipping field'
+          CYCLE
+        ELSE IF (IRET_GRIB == -6) THEN
+          WRITE (ILUOUT0,'(A)')' | ECMWF pseudo-Grib data encountered, skipping field'
+          CYCLE
+        ENDIF
+        IF (IDIS==KDIS) THEN
+          IFOUND = IFOUND + 1
+        ELSE
+          CYCLE
+        ENDIF
+      ENDIF
+      IF (PRESENT(KCAT)) THEN
+        CALL GRIB_GET(KGRIB(JLOOP),'parameterCategory',ICAT,IRET_GRIB)
+        IF (IRET_GRIB >   0) THEN
+          WRITE (ILUOUT0,'(A)')' | Error encountered in the Grib file, skipping field'
+          CYCLE
+        ELSE IF (IRET_GRIB == -6) THEN
+          WRITE (ILUOUT0,'(A)')' | ECMWF pseudo-Grib data encountered, skipping field'
+          CYCLE
+        ENDIF
+        IF (ICAT==KCAT) THEN
+          IFOUND = IFOUND + 1
+        ELSE
+          CYCLE
+        ENDIF
+      ENDIF
+      IF (PRESENT(KNUMBER)) THEN      
+        CALL GRIB_GET(KGRIB(JLOOP),'parameterNumber',INUMBER,IRET_GRIB)
+        IF (IRET_GRIB >   0) THEN
+          WRITE (ILUOUT0,'(A)')' | Error encountered in the Grib file, skipping field'
+          CYCLE
+        ELSE IF (IRET_GRIB == -6) THEN
+          WRITE (ILUOUT0,'(A)')' | ECMWF pseudo-Grib data encountered, skipping field'
+          CYCLE
+        ENDIF
+        IF (INUMBER==KNUMBER) THEN
+          IFOUND = IFOUND + 1
+        ELSE
+          CYCLE
+        ENDIF
       ENDIF
       !
-      CALL GRIB_GET(KGRIB(JLOOP),'topLevel',ILEV1,IRET_GRIB)
-      IF (IRET_GRIB >   0) THEN
-        WRITE (ILUOUT0,'(A)')' | Error encountered in the Grib file, skipping field'
-        CYCLE
-      ELSE IF (IRET_GRIB == -6) THEN
-        WRITE (ILUOUT0,'(A)')' | ECMWF pseudo-Grib data encountered, skipping field'
-        CYCLE
+      IF(PRESENT(KLEV1)) THEN
+        CALL GRIB_GET(KGRIB(JLOOP),'topLevel',ILEV1,IRET_GRIB)
+        IF (IRET_GRIB >   0) THEN
+          WRITE (ILUOUT0,'(A)')' | Error encountered in the Grib file, skipping field'
+          CYCLE
+        ELSE IF (IRET_GRIB == -6) THEN
+          WRITE (ILUOUT0,'(A)')' | ECMWF pseudo-Grib data encountered, skipping field'
+          CYCLE
+        ENDIF
+        IF (ILEV1==KLEV1) THEN
+          IFOUND = IFOUND + 1
+        ELSE
+          CYCLE
+        ENDIF
       ENDIF
       ! 
-      CALL GRIB_GET(KGRIB(JLOOP),'bottomLevel',ILEV2,IRET_GRIB)
-      IF (IRET_GRIB >   0) THEN
-        WRITE (ILUOUT0,'(A)')' | Error encountered in the Grib file, skipping field'
-        CYCLE
-      ELSE IF (IRET_GRIB == -6) THEN
-        WRITE (ILUOUT0,'(A)')' | ECMWF pseudo-Grib data encountered, skipping field'
-        CYCLE
-      ENDIF
-      IF (IPARAM==KPARAM) IFOUND = 1
-      IF (YLTYPELU==YLTYPE .OR. -1==KLTYPE) IFOUND = IFOUND + 1
-      IF (ILEV1== KLEV1  .OR. -1== KLEV1) IFOUND = IFOUND + 1
-      IF (ILEV2== KLEV2 .OR. -1== KLEV2) IFOUND = IFOUND + 1
-      IF (IFOUND == 4) THEN
+      IF (IFOUND == ISEARCH) THEN
           KNUM=JLOOP
           EXIT
       ELSE  ! field not found
@@ -1826,7 +1993,6 @@ DO JLOOP=1,SIZE(KGRIB)
 END DO
 
 END SUBROUTINE SEARCH_FIELD
-
 !#################################################################################
 SUBROUTINE COORDINATE_CONVERSION(KMODEL,KGRIB,KNOLON,KNOLARG,&
                            PLONOUT,PLATOUT,PLXOUT,PLYOUT,KNI,PPARAM,KINLO)
@@ -1961,7 +2127,7 @@ CASE(0,5) ! CEP/MOCAGE
     PLYOUT=PLATOUT
   ENDIF
 !
-CASE(1) ! ALADIN
+CASE(1,6) ! ALADIN
 !
   CALL GRIB_GET(KGRIB,'Nj',IINLA,IRET_GRIB)
   CALL GRIB_GET(KGRIB,'Ni',INLO_GRIB(1),IRET_GRIB)
@@ -2084,8 +2250,14 @@ CASE(2) ! ALADIN REUNION
     DEALLOCATE (ZXM)       
   END IF
 !
-CASE(3,4) ! ARPEGE
+CASE(3,4,7) ! ARPEGE
 !
+!print*,"=========COORDINATE CONVERSION CASE ARPEGE ============="
+! PROBLEME AVEC LES GRIB d'EPYGRAM
+! dans longitudeOfLastGridPointInDegrees on la la longitude du dernier point du
+! tableau (donc au pole sud)  
+! dans les GRIB1 ont avait la valeur max du tableau des longitude (donc à
+! l'equateur) 
   CALL GRIB_GET(KGRIB,'latitudeOfFirstGridPointInDegrees',ZILA1)
   CALL GRIB_GET(KGRIB,'longitudeOfFirstGridPointInDegrees',ZILO1)
   CALL GRIB_GET(KGRIB,'latitudeOfLastGridPointInDegrees',ZILA2)
@@ -2111,6 +2283,7 @@ CASE(3,4) ! ARPEGE
      DO JLOOP1=1 ,IINLA
         KNI = KNI + INLO_GRIB(JLOOP1)
      ENDDO
+     ZILO2=360.-360./(MAXVAL(INLO_GRIB))
      GREADY= (PPARAM(1)==INLO_GRIB(1) .AND.&
        PPARAM(3)==ZILA1 .AND. PPARAM(4)==ZILO1 .AND.&
        PPARAM(5)==ZILA2 .AND. PPARAM(6)==ZILO2 .AND.&
diff --git a/src/SURFEX/mode_read_grib.F90 b/src/SURFEX/mode_read_grib.F90
index 501ae26da178a98e7ee04f3330aaaaad92f24211..ddd50d15ea3a3397107ac71dea73282a5edd4b19 100644
--- a/src/SURFEX/mode_read_grib.F90
+++ b/src/SURFEX/mode_read_grib.F90
@@ -16,14 +16,17 @@ USE PARKIND1  ,ONLY : JPRB
 CONTAINS
 !-------------------------------------------------------------------
 !     ####################
-      SUBROUTINE MAKE_GRIB_INDEX(HGRIB)
+      SUBROUTINE MAKE_GRIB_INDEX(HGRIB,HINMODEL)
 !     ####################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_GRID_GRIB, ONLY : CGRIB_FILE, NIDX, NGRIB_VERSION
 !
 IMPLICIT NONE
 !
  CHARACTER(LEN=*), INTENT(IN) :: HGRIB
+ CHARACTER(LEN=6), INTENT(IN)    :: HINMODEL  ! Grib originating model
 !
 INTEGER(KIND=kindOfInt) :: IRET
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -54,7 +57,13 @@ ENDIF
 IF (NGRIB_VERSION==1) THEN
  CALL GRIB_INDEX_CREATE(NIDX,HGRIB,'indicatorOfParameter',IRET)
 ELSEIF (NGRIB_VERSION==2) THEN
- CALL GRIB_INDEX_CREATE(NIDX,HGRIB,'paramId',IRET)
+ IF(HINMODEL=='ARPEGE') THEN
+   print*,"CALL GRIB_INDEX_CREATE"
+   CALL GRIB_INDEX_CREATE(NIDX,HGRIB,'parameterNumber',IRET)
+print*,IRET
+ ELSE
+   CALL GRIB_INDEX_CREATE(NIDX,HGRIB,'paramId',IRET)        
+ ENDIF
 ENDIF
 IF (IRET/=0) CALL ABOR1_SFX("MODE_READ_GRIB:MAKE_GRIB_INDEX: error while creating the grib index")
 !
@@ -89,6 +98,8 @@ END SUBROUTINE CLEAR_GRIB_INDEX
 !     ####################
       SUBROUTINE GET_GRIB_MESSAGE(KLUOUT,KLTYPE,KLEV1,KLEV2,KGRIB,KFOUND,HTYPELEVEL,PLEV1,PLEV2)
 !     ####################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_GRID_GRIB, ONLY : NIDX
 !
@@ -120,13 +131,20 @@ IRET = 0
 KFOUND=0
 !
 DO WHILE (IRET /= GRIB_END_OF_INDEX .AND. KFOUND/=3)
+print*,"===============new message=============="
   !
   IRET = 0
   KFOUND=0
   !
   IF (KLTYPE/=-2) THEN
     CALL GRIB_GET(KGRIB,'indicatorOfTypeOfLevel',ILTYPE,IRET)
+print*,IRET
+    IF(IRET/=0) THEN
+      CALL GRIB_GET(KGRIB,'typeOfFirstFixedSurface',ILTYPE,IRET)
+    ENDIF
+print*,IRET
     CALL TEST_IRET(KLUOUT,ILTYPE,KLTYPE,IRET)
+    print*,"ILTYPE,KLTYPE,IRET",ILTYPE,KLTYPE,IRET
   ELSE
      IF (PRESENT(HTYPELEVEL)) THEN
         CALL GRIB_GET(KGRIB,'typeOfLevel',YTYPELEVEL,IRET)
@@ -147,6 +165,7 @@ DO WHILE (IRET /= GRIB_END_OF_INDEX .AND. KFOUND/=3)
 
     ENDIF
     !
+print*,KFOUND
     IF (IRET.EQ.0) THEN
       !
       KFOUND = KFOUND + 1
@@ -161,6 +180,7 @@ DO WHILE (IRET /= GRIB_END_OF_INDEX .AND. KFOUND/=3)
       !
       IF (IRET.EQ.0) KFOUND = KFOUND + 1
       !
+print*,KFOUND
     ENDIF
     !
   ENDIF
@@ -270,15 +290,18 @@ END SUBROUTINE TEST_IRET_FLOAT
 END SUBROUTINE GET_GRIB_MESSAGE
 !-------------------------------------------------------------------
 !     ####################
-      SUBROUTINE READ_GRIB(HGRIB,KLUOUT,KPARAM,KRET,PFIELD,KLTYPE,KLEV1,KLEV2,KPARAM2, &
-         HTYPELEVEL,PLEV1,PLEV2)
+      SUBROUTINE READ_GRIB(HGRIB,HINMODEL,KLUOUT,KPARAM,KRET,PFIELD,KLTYPE,KLEV1,KLEV2,KPARAM2, &
+         KLTYPE2,HTYPELEVEL,PLEV1,PLEV2)
 !     ####################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_GRID_GRIB, ONLY : NIDX, NGRIB_VERSION
 !
 IMPLICIT NONE
 !
  CHARACTER(LEN=*), INTENT(IN) :: HGRIB      ! name of the GRIB file
+ CHARACTER(LEN=6),   INTENT(IN)    :: HINMODEL  ! Grib originating model
 INTEGER, INTENT(IN) :: KLUOUT
 INTEGER,INTENT(IN)    :: KPARAM ! Parameter to read
 INTEGER(KIND=kindOfInt), INTENT(OUT)  :: KRET
@@ -287,11 +310,12 @@ INTEGER,INTENT(INOUT), OPTIONAL :: KLTYPE ! Level type
 INTEGER,INTENT(INOUT), OPTIONAL :: KLEV1  ! Level parameter 1
 INTEGER,INTENT(INOUT), OPTIONAL :: KLEV2  ! Level parameter 2
 INTEGER, INTENT(INOUT), OPTIONAL :: KPARAM2
+INTEGER,INTENT(INOUT), OPTIONAL :: KLTYPE2 ! Level type
 CHARACTER(LEN=*), INTENT(INOUT), OPTIONAL :: HTYPELEVEL
 !
 REAL, INTENT(INOUT), OPTIONAL :: PLEV1,PLEV2
 !
-INTEGER :: ILTYPE, ILEV1, ILEV2
+INTEGER :: ILTYPE, ILEV1, ILEV2,ILTYPE2
 INTEGER(KIND=kindOfInt) :: IGRIB
 INTEGER :: ISIZE, IFOUND
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
@@ -310,7 +334,7 @@ IF (PRESENT(PLEV1)) ZLEV1=PLEV1
 ZLEV2=-2.0
 IF (PRESENT(PLEV2)) ZLEV2=PLEV2
 !
- CALL MAKE_GRIB_INDEX(HGRIB)
+ CALL MAKE_GRIB_INDEX(HGRIB,HINMODEL)
 !
 IFOUND=0
 KRET=0
@@ -318,30 +342,42 @@ KRET=0
 IF (NGRIB_VERSION == 1) THEN
  CALL GRIB_INDEX_SELECT(NIDX,'indicatorOfParameter',KPARAM,KRET)
 ELSEIF (NGRIB_VERSION == 2) THEN
- CALL GRIB_INDEX_SELECT(NIDX,'paramId',KPARAM,KRET)
+ IF (HINMODEL=='ARPEGE') THEN
+  print*,"GRIB_INDEX_SELECT :",KPARAM
+   CALL GRIB_INDEX_SELECT(NIDX,'parameterNumber',KPARAM,KRET)
+print*,KRET
+ ELSE
+   CALL GRIB_INDEX_SELECT(NIDX,'paramId',KPARAM,KRET)         
+ ENDIF
 END IF
  CALL GRIB_NEW_FROM_INDEX(NIDX,IGRIB,KRET)
 
 
-!WRITE (KLUOUT,*) 'READ_GRIB GRIB_NEW_FROM_INDEX ',KPARAM,IGRIB,KRET
+WRITE (KLUOUT,*) 'READ_GRIB GRIB_NEW_FROM_INDEX ',KPARAM,IGRIB,KRET
 IF (KRET.EQ.0) THEN
    IF (PRESENT(HTYPELEVEL)) THEN
       CALL GET_GRIB_MESSAGE(KLUOUT,ILTYPE,ILEV1,ILEV2,IGRIB,IFOUND,HTYPELEVEL,ZLEV1,ZLEV2)
    ELSE
+print*,"CALL GET_GRIB_MESSAGE"
       CALL GET_GRIB_MESSAGE(KLUOUT,ILTYPE,ILEV1,ILEV2,IGRIB,IFOUND)
    ENDIF
 ENDIF
 !
 
-!WRITE (KLUOUT,*) 'READ_GRIB GRIB_NEW_FROM_INDEX ',KPARAM,IGRIB,KRET,IFOUND
+WRITE (KLUOUT,*) 'READ_GRIB GRIB_NEW_FROM_INDEX ',KPARAM,IGRIB,KRET,IFOUND
 
 IF (PRESENT(KPARAM2)) THEN
   IF (IFOUND/=3) THEN
-    CALL GRIB_INDEX_SELECT(NIDX,'indicatorOfParameter',KPARAM2,KRET)
+    IF (HINMODEL=='ARPEGE' .AND.NGRIB_VERSION == 2) THEN
+      CALL GRIB_INDEX_SELECT(NIDX,'parameterNumber',KPARAM2,KRET)
+    ELSE
+      CALL GRIB_INDEX_SELECT(NIDX,'indicatorOfParameter',KPARAM2,KRET)
+    ENDIF
     CALL GRIB_NEW_FROM_INDEX(NIDX,IGRIB,KRET)
     IF (KRET.EQ.0) THEN
       ILTYPE=-2
       IF (PRESENT(KLTYPE)) ILTYPE=KLTYPE
+      IF (PRESENT(KLTYPE2)) ILTYPE=KLTYPE2
       CALL GET_GRIB_MESSAGE(KLUOUT,ILTYPE,ILEV1,ILEV2,IGRIB,IFOUND)
     ENDIF
   ELSE
@@ -349,7 +385,7 @@ IF (PRESENT(KPARAM2)) THEN
   ENDIF
 ENDIF
 !
-
+print*,"IFOUND=",IFOUND
 
 IF (IFOUND==3) THEN
   !
@@ -383,6 +419,10 @@ END SUBROUTINE READ_GRIB
 !     ####################
       SUBROUTINE READ_GRIB_LAND_MASK(HGRIB,KLUOUT,HINMODEL,PMASK)
 !     ####################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
+!
+USE MODD_GRID_GRIB, ONLY : NGRIB_VERSION
 !
 IMPLICIT NONE
 !
@@ -392,26 +432,35 @@ CHARACTER(LEN=6),   INTENT(IN)    :: HINMODEL  ! Grib originating model
 REAL, DIMENSION(:), POINTER       :: PMASK     ! Land mask
 !
 INTEGER(KIND=kindOfInt)                 :: IRET      ! return code
-INTEGER                           :: ILTYPE    ! leveltype
+INTEGER                           :: ILTYPE,ILTYPE2    ! leveltype
 INTEGER                           :: ILEV      ! level
-INTEGER :: INUM_ZS,ISIZE,ICOUNT,JLOOP,IPARAM,IGRIB
+INTEGER :: INUM_ZS,ISIZE,ICOUNT,JLOOP,IPARAM,IGRIB,IPARAM2
 CHARACTER(LEN=24) :: YLTYPELU
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !-------------------------------------------------------------------
+print*,"HINMODEL=",HINMODEL
+print*,"NGRIB_VERSION=",NGRIB_VERSION
 IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_LAND_MASK',0,ZHOOK_HANDLE)
 WRITE (KLUOUT,'(A)') 'MODE_READ_GRIB:READ_GRIB_LAND_MASK: | Reading land mask from ',HINMODEL
 !
 SELECT CASE (HINMODEL)
   CASE ('ECMWF ')
-    CALL READ_GRIB(HGRIB,KLUOUT,172,IRET,PMASK) 
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,172,IRET,PMASK) 
   CASE ('NCEP  ')
-    CALL READ_GRIB(HGRIB,KLUOUT,172,IRET,PMASK) 
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,172,IRET,PMASK) 
   CASE ('ARPEGE','ALADIN','MOCAGE')
-    CALL READ_GRIB(HGRIB,KLUOUT,81,IRET,PMASK)          
+    print*,"NGRIB_VERSION=",NGRIB_VERSION
+    IF(HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN
+      ILTYPE=1
+      CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,0,IRET,PMASK,KLTYPE=ILTYPE)   
+    ELSE
+      CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,81,IRET,PMASK)          
+    ENDIF
+print*,"NGRIB_VERSION=",NGRIB_VERSION
   CASE ('HIRLAM')        
     ILTYPE=105
     ILEV  =0    
-    CALL READ_GRIB(HGRIB,KLUOUT,81,IRET,PMASK,KLTYPE=ILTYPE,KLEV1=ILEV)            
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,81,IRET,PMASK,KLTYPE=ILTYPE,KLEV1=ILEV)            
   CASE DEFAULT
     CALL ABOR1_SFX('MODE_READ_GRIB:READ_GRIB_LAND_MASK: OPTION NOT SUPPORTED '//HINMODEL)
 END SELECT
@@ -432,8 +481,11 @@ END SUBROUTINE READ_GRIB_LAND_MASK
 !     ############################
       SUBROUTINE READ_GRIB_ZS(HGRIB,KLUOUT,HINMODEL,PZS)
 !     ############################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_CSTS,       ONLY : XG
+USE MODD_GRID_GRIB, ONLY : NGRIB_VERSION
 !
 IMPLICIT NONE
 !
@@ -455,13 +507,17 @@ WRITE (KLUOUT,'(A)') 'MODE_READ_GRIB:READ_GRIB_ZS: | Reading orography from ',HI
 !
 SELECT CASE (HINMODEL)
   CASE ('ECMWF ')
-    CALL READ_GRIB(HGRIB,KLUOUT,129,IRET,PZS) 
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,129,IRET,PZS) 
   CASE ('NCEP  ')
-    CALL READ_GRIB(HGRIB,KLUOUT,228002,IRET,PZS)               
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,228002,IRET,PZS)               
   CASE ('ARPEGE','MOCAGE')
-    CALL READ_GRIB(HGRIB,KLUOUT,8,IRET,PZS)               
+    IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN
+      CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,5,IRET,PZS)
+    ELSE
+      CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,8,IRET,PZS)               
+    ENDIF
   CASE ('HIRLAM','ALADIN')
-    CALL READ_GRIB(HGRIB,KLUOUT,6,IRET,PZS)                  
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,6,IRET,PZS)                  
   CASE DEFAULT
     CALL ABOR1_SFX('MODE_READ_GRIB:READ_GRIB_ZS:OPTION NOT SUPPORTED '//HINMODEL)
 END SELECT
@@ -527,7 +583,11 @@ END SUBROUTINE READ_GRIB_ZS_SEA
 !     ###########################
       SUBROUTINE READ_GRIB_T(HGRIB,KLUOUT,HINMODEL,PT)
 !     ###########################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
+USE MODD_GRID_GRIB, ONLY : NGRIB_VERSION
+
 IMPLICIT NONE
 !
  CHARACTER(LEN=*),   INTENT(IN)    :: HGRIB     ! Grib file name
@@ -538,6 +598,7 @@ REAL, DIMENSION(:), POINTER       :: PT        !
 INTEGER(KIND=kindOfInt)                           :: IRET      ! return code
 INTEGER                           :: ILTYPE    ! type of level (Grib code table 3)
 INTEGER                           :: ILEV      ! level definition
+INTEGER                           :: IPARAM    ! number of ParamId or IndicatorOfParameter or ParameterNumber 
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 CHARACTER(LEN=7)   :: YTYPELEVEL  ! Type of searched level 
 
@@ -548,18 +609,24 @@ WRITE (KLUOUT,'(A)') 'MODE_READ_GRIB:READ_GRIB_T: | Reading surface temperature'
 !
 SELECT CASE (HINMODEL)
   CASE ('ECMWF ')
-    CALL READ_GRIB(HGRIB,KLUOUT,139,IRET,PT)    
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,139,IRET,PT)    
 
   CASE ('ARPEGE','ALADIN','MOCAGE')
     ILEV=0
-    ILTYPE=111
-    CALL READ_GRIB(HGRIB,KLUOUT,11,IRET,PT,KLTYPE=ILTYPE,KLEV1=ILEV) 
+    IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN
+      IPARAM=18
+      ILTYPE=1
+    ELSE
+      IPARAM=11
+      ILTYPE=111
+    ENDIF
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,PT,KLTYPE=ILTYPE,KLEV1=ILEV) 
     IF (IRET /= 0) THEN
       ILTYPE=1
-      CALL READ_GRIB(HGRIB,KLUOUT,11,IRET,PT,KLTYPE=ILTYPE) 
+      CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,PT,KLTYPE=ILTYPE) 
       IF (IRET /= 0) THEN
          ILTYPE=105
-        CALL READ_GRIB(HGRIB,KLUOUT,11,IRET,PT,KLTYPE=ILTYPE,KLEV1=ILEV)   
+        CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,PT,KLTYPE=ILTYPE,KLEV1=ILEV)   
       ENDIF        
     END IF
 
@@ -567,13 +634,13 @@ SELECT CASE (HINMODEL)
     WRITE (KLUOUT,'(A)') 'MODE_READ_GRIB:READ_GRIB_T: | Reading surface temperature tile 4'
      ILTYPE=105
      ILEV=904
-    CALL READ_GRIB(HGRIB,KLUOUT,11,IRET,PT,KLTYPE=ILTYPE,KLEV1=ILEV)
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,11,IRET,PT,KLTYPE=ILTYPE,KLEV1=ILEV)
 
   CASE ('NCEP  ')
     YTYPELEVEL='surface'
     ILEV=0
     ILTYPE=-2
-    CALL READ_GRIB(HGRIB,KLUOUT,130,IRET,PT,KLTYPE=ILTYPE,KLEV1=ILEV,KLEV2=ILEV,HTYPELEVEL=YTYPELEVEL) 
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,130,IRET,PT,KLTYPE=ILTYPE,KLEV1=ILEV,KLEV2=ILEV,HTYPELEVEL=YTYPELEVEL) 
 
   CASE DEFAULT
     CALL ABOR1_SFX('MODE_READ_GRIB:READ_GRIB_T:OPTION NOT SUPPORTED '//HINMODEL)
@@ -614,6 +681,8 @@ END SUBROUTINE READ_GRIB_TS
 !     ###########################
       SUBROUTINE READ_GRIB_SST(HGRIB,KLUOUT,HINMODEL,PMASK,PSST)
 !     ###########################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_SURF_PAR,   ONLY : XUNDEF
 !
@@ -632,7 +701,7 @@ IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_SST',0,ZHOOK_HANDLE)
 !
 SELECT CASE (HINMODEL)
   CASE ('ECMWF ')
-     CALL READ_GRIB(HGRIB,KLUOUT,34,IRET,PSST)
+     CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,34,IRET,PSST)
      IF (IRET /= 0) CALL READ_GRIB_T(HGRIB,KLUOUT,HINMODEL,PSST)
   CASE ('ARPEGE','ALADIN','MOCAGE','HIRLAM','NCEP  ')
     CALL READ_GRIB_T(HGRIB,KLUOUT,HINMODEL,PSST)
@@ -651,6 +720,7 @@ END SUBROUTINE READ_GRIB_SST
 !
 !    MODIFICATIONS
 !    Julien Pergaud(via J.Escobar) 10/2018 : correction for GFS undef=9999. temperature values
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_SURF_PAR,   ONLY : XUNDEF
 !
@@ -669,7 +739,7 @@ IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_TSWATER',0,ZHOOK_HANDLE)
 !
 SELECT CASE (HINMODEL)
   CASE ('ECMWF ')
-     CALL READ_GRIB(HGRIB,KLUOUT,3080,IRET,PTS)
+     CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,3080,IRET,PTS)
      IF (IRET /= 0) CALL READ_GRIB_T2(HGRIB,KLUOUT,HINMODEL,PMASK,PTS)
   CASE ('ARPEGE','ALADIN','MOCAGE','HIRLAM','NCEP  ')
     CALL READ_GRIB_T2(HGRIB,KLUOUT,HINMODEL,PMASK,PTS)
@@ -678,6 +748,7 @@ SELECT CASE (HINMODEL)
 END SELECT
 !
 IF (SIZE(PMASK)==SIZE(PTS)) WHERE ((PMASK(:)/=1.) .OR. ((PMASK(:)==1.) .AND.(PTS(:)==9999.))) PTS = XUNDEF
+
 !
 IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_TSWATER',1,ZHOOK_HANDLE)
 END SUBROUTINE READ_GRIB_TSWATER
@@ -685,8 +756,11 @@ END SUBROUTINE READ_GRIB_TSWATER
 !     ###########################
       SUBROUTINE READ_GRIB_T2(HGRIB,KLUOUT,HINMODEL,PMASK,PT2)
 !     ###########################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_SURF_PAR,   ONLY : XUNDEF
+USE MODD_GRID_GRIB, ONLY : NGRIB_VERSION
 !
 IMPLICIT NONE
  !
@@ -698,6 +772,7 @@ REAL, DIMENSION(:), POINTER       :: PT2       !
 !
 INTEGER(KIND=kindOfInt)                           :: IRET
 INTEGER                           :: ILTYPE, ILEV    ! type of level (Grib code table 3)
+INTEGER                           :: IPARAM    ! number of ParamId or IndicatorOfParameter or ParameterNumber
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 CHARACTER(LEN=19)   :: YTYPELEVEL  ! Type of searched level 
 REAL :: ZLEV1,ZLEV2
@@ -708,24 +783,30 @@ WRITE (KLUOUT,'(A)') 'MODE_READ_GRIB:READ_GRIB_T2: | Reading deep soil temperatu
 !
 SELECT CASE (HINMODEL)
   CASE ('ECMWF ')
-     CALL READ_GRIB(HGRIB,KLUOUT,170,IRET,PT2)   
+     CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,170,IRET,PT2)   
   CASE ('ARPEGE','ALADIN','MOCAGE')
-     ILTYPE=111
-     CALL READ_GRIB(HGRIB,KLUOUT,11,IRET,PT2,KLTYPE=ILTYPE) 
+     IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN
+      IPARAM=18
+      ILTYPE=106
+    ELSE
+      IPARAM=11
+      ILTYPE=111
+    ENDIF
+     CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,PT2,KLTYPE=ILTYPE) 
     IF (IRET /= 0) THEN
        ILTYPE=105
-      CALL READ_GRIB(HGRIB,KLUOUT,11,IRET,PT2,KLTYPE=ILTYPE)   
+      CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,PT2,KLTYPE=ILTYPE)   
     ENDIF
   CASE ('NCEP  ') ! toto
      YTYPELEVEL='depthBelowLandLayer'
      ILTYPE=-2
      ZLEV1=0.1
      ZLEV2=0.4
-     CALL READ_GRIB(HGRIB,KLUOUT,228139,IRET,PT2,KLTYPE=ILTYPE,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)  
+     CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,228139,IRET,PT2,KLTYPE=ILTYPE,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)  
   CASE ('HIRLAM ')
      ILTYPE=105
      ILEV=954
-    CALL READ_GRIB(HGRIB,KLUOUT,11,IRET,PT2,KLTYPE=ILTYPE,KLEV1=ILEV)      
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,11,IRET,PT2,KLTYPE=ILTYPE,KLEV1=ILEV)      
    CASE DEFAULT
      CALL ABOR1_SFX('MODE_READ_GRIB:READ_GRIB_T2:OPTION NOT SUPPORTED '//HINMODEL)
 END SELECT
@@ -844,15 +925,17 @@ DO JL=1,KNLAYERDEEP
   PFIELDOUT(:,JL)=PFIELDIN(:,JL)
   IF (SIZE(PMASK)==SIZE(PFIELDOUT,1)) &
     WHERE ((PMASK(:)/=1.) .OR. ((PMASK(:)==1.) .AND.(PFIELDOUT(:,JL)==9999.))) PFIELDOUT(:,JL) = XUNDEF
+
 ENDDO
 !
-
 IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:FILL_PFIELD',1,ZHOOK_HANDLE)
 END SUBROUTINE FILL_PFIELD
 !-------------------------------------------------------------------
 !     #######################
       SUBROUTINE READ_GRIB_TG_ECMWF(HGRIB,KLUOUT,HINMODEL,PMASK,PTG,PD)
 !     #######################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 IMPLICIT NONE
 !
@@ -890,7 +973,7 @@ ALLOCATE(ZD(5))
 ILTYPE= -1
 ILEV1 = -1
 ILEV2 = -1
- CALL READ_GRIB(HGRIB,KLUOUT,139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
 !
 IF (IRET== 0) THEN
   CALL PUT_LAYER_DEPTH(KLUOUT,1,'READ_GRIB_TG_ECMWF',ILTYPE,ILEV1,ILEV2,4,0.07,0.07,ZD(1))
@@ -905,7 +988,7 @@ ENDIF
 ILTYPE= -1
 ILEV1 = -1
 ILEV2 = -1
- CALL READ_GRIB(HGRIB,KLUOUT,236,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,236,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
 !
 IF (IRET == 0) THEN
   INLAYERDEEP = 4
@@ -921,7 +1004,7 @@ ENDIF
 ILTYPE= -1
 ILEV1 = -1
 ILEV2 = -1
- CALL READ_GRIB(HGRIB,KLUOUT,183,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,183,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
 !
 IF (IRET == 0) THEN      
   CALL PUT_LAYER_DEPTH(KLUOUT,3,'READ_GRIB_TG_ECMWF',ILTYPE,ILEV1,ILEV2,INLAYERDEEP,0.72,0.42,ZD(3))
@@ -936,7 +1019,7 @@ ENDIF
 ILTYPE= -1
 ILEV1 = -1
 ILEV2 = -1
- CALL READ_GRIB(HGRIB,KLUOUT,170,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,170,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
 !
 IF (IRET== 0) THEN         
   CALL PUT_LAYER_DEPTH(KLUOUT,2,'READ_GRIB_TG_ECMWF',ILTYPE,ILEV1,ILEV2,INLAYERDEEP,0.21,0.42,ZD(2))
@@ -993,6 +1076,9 @@ END SUBROUTINE READ_GRIB_TG_ECMWF
 !    given. If they are present, they are used, if not the default value is taken and
 !    a warning message is issued.
 !
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
+!
 IMPLICIT NONE
 !
 !* dummy arguments
@@ -1028,7 +1114,7 @@ ILTYPE= -1
 ILEV1 = -1
 ILEV2 = -1
 IPAR=39
- CALL READ_GRIB(HGRIB,KLUOUT,140,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,KPARAM2=IPAR)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,140,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,KPARAM2=IPAR)
 !
 IF (IRET == 0) THEN 
   CALL PUT_LAYER_DEPTH(KLUOUT,1,'READ_GRIB_WG_ECMWF_1',ILTYPE,ILEV1,ILEV2,4,0.07,0.07,ZD(1))
@@ -1046,7 +1132,7 @@ ILTYPE= -1
 ILEV1 = -1
 ILEV2 = -1
 IPAR=42
- CALL READ_GRIB(HGRIB,KLUOUT,237,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,KPARAM2=IPAR)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,237,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,KPARAM2=IPAR)
 !
 IF (IRET == 0) THEN   
   INLAYERDEEP = 4
@@ -1065,7 +1151,7 @@ ILTYPE= -1
 ILEV1 = -1
 ILEV2 = -1
 IPAR=41
- CALL READ_GRIB(HGRIB,KLUOUT,184,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,KPARAM2=IPAR)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,184,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,KPARAM2=IPAR)
 !
 IF (IRET == 0) THEN
   CALL PUT_LAYER_DEPTH(KLUOUT,3,'READ_GRIB_WG_ECMWF_1',ILTYPE,ILEV1,ILEV2,INLAYERDEEP,0.72,0.42,ZD(3))
@@ -1083,7 +1169,7 @@ ILTYPE= -1
 ILEV1 = -1
 ILEV2 = -1
 IPAR=40
- CALL READ_GRIB(HGRIB,KLUOUT,171,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,KPARAM2=IPAR)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,171,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,KPARAM2=IPAR)
 !
 IF (IRET == 0) THEN
   CALL PUT_LAYER_DEPTH(KLUOUT,2,'READ_GRIB_WG_ECMWF_1',ILTYPE,ILEV1,ILEV2,INLAYERDEEP,0.21,0.42,ZD(2))
@@ -1228,6 +1314,8 @@ END SUBROUTINE HARMONIZE_GRIB_WG_WGI_ECMWF
 !     #######################
       SUBROUTINE READ_GRIB_WG_ECMWF(HGRIB,KLUOUT,HINMODEL,PMASK,PFIELD,PD)
 !     #######################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_GRID_GRIB,  ONLY : NNI
 USE MODD_SURF_PAR,   ONLY : XUNDEF
@@ -1257,7 +1345,7 @@ IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_WG_ECMWF',0,ZHOOK_HANDLE)
 !
 ! 1.  Get soil type to compute SWI
 !     ----------------------------
- CALL READ_GRIB(HGRIB,KLUOUT,43,IRET,ZSLT)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,43,IRET,ZSLT)
 !--------------------------------------------------------------------------------
 ALLOCATE (ZWFC(SIZE(PFIELD,1)))
 ALLOCATE (ZWWILT(SIZE(PFIELD,1)))
@@ -1321,6 +1409,8 @@ END SUBROUTINE READ_GRIB_WG_ECMWF
 !     #######################
       SUBROUTINE READ_GRIB_WGI_ECMWF(HGRIB,KLUOUT,HINMODEL,PMASK,PFIELD,PD)
 !     #######################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_GRID_GRIB,  ONLY : NNI
 USE MODD_SURF_PAR,   ONLY : XUNDEF
@@ -1349,7 +1439,7 @@ IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_WGI_ECMWF',0,ZHOOK_HANDLE)
 !
 ! 1.  Get soil type to compute WSAT
 !     ----------------------------
- CALL READ_GRIB(HGRIB,KLUOUT,43,IRET,ZSLT)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,43,IRET,ZSLT)
 !--------------------------------------------------------------------------------
 ALLOCATE (ZWSAT(SIZE(PFIELD,1)))
 ZWSAT(:)=0.
@@ -1458,6 +1548,8 @@ END SUBROUTINE READ_GRIB_TG_METEO_FRANCE
 !     #######################
       SUBROUTINE READ_GRIB_SAND_CLAY_METEO_FRANCE(HGRIB,KLUOUT,HINMODEL,PSAND,PCLAY,GISBA)
 !     ######################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 IMPLICIT NONE
 !
@@ -1481,7 +1573,7 @@ IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_SAND_CLAY_METEO_FRANCE',0,ZHOO
 !
 IF (HINMODEL == 'ARPEGE' .OR. HINMODEL == 'MOCAGE') IPAR=171
 IF (HINMODEL == 'ALADIN') IPAR=128
- CALL READ_GRIB(HGRIB,KLUOUT,IPAR,IRET,PCLAY)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPAR,IRET,PCLAY)
 !
 ! if not available, the model is not ISBA (IWMODE=1)
 IF (IRET /= 0) THEN
@@ -1496,7 +1588,7 @@ END IF
 !     ------------------------------------------
 IF (HINMODEL == 'ARPEGE' .OR. HINMODEL == 'MOCAGE') IPAR=172
 IF (HINMODEL == 'ALADIN') IPAR=129
- CALL READ_GRIB(HGRIB,KLUOUT,IPAR,IRET,PSAND)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPAR,IRET,PSAND)
 !
 ! if not available, the model is not ISBA (IWMODE=1)
 IF (GISBA) THEN
@@ -1513,8 +1605,10 @@ END SUBROUTINE READ_GRIB_SAND_CLAY_METEO_FRANCE
 !     #######################
       SUBROUTINE READ_GRIB_WG_METEO_FRANCE(HGRIB,KLUOUT,HINMODEL,PMASK,PFIELD,PD)
 !     #######################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
-USE MODD_GRID_GRIB,  ONLY : NNI
+USE MODD_GRID_GRIB,  ONLY : NNI,NGRIB_VERSION
 USE MODD_SURF_PAR,   ONLY : XUNDEF
 !
 IMPLICIT NONE
@@ -1535,6 +1629,7 @@ INTEGER(KIND=kindOfInt)                           :: IRET      ! return code
 INTEGER                           :: ILTYPE    ! type of level (Grib code table 3)
 INTEGER                           :: ILEV1     ! level definition
 INTEGER                           :: ILEV2     ! level definition
+INTEGER                           :: IPARAM    ! number of ParamId or IndicatorOfParameter or ParameterNumber
 REAL,  DIMENSION(:),   POINTER    :: ZCLAY => NULL()     ! clay fraction
 REAL,  DIMENSION(:),   POINTER    :: ZSAND => NULL()     ! sand fraction
 REAL,  DIMENSION(:),   POINTER    :: ZFIELD => NULL()
@@ -1565,13 +1660,19 @@ PD(:,2) = 0.20
 !     ---------------------
 ILEV1   = 0
 IF (HINMODEL == 'ARPEGE' .OR. HINMODEL=='MOCAGE') THEN
-  ILTYPE  = 112     
-  ILEV2   = 1        
-  CALL READ_GRIB(HGRIB,KLUOUT,153,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
+  IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN
+    IPARAM=20
+    ILTYPE=1
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,ZFIELD,KLTYPE=ILTYPE)
+  ELSE
+    IPARAM=153
+    ILEV2   = 1 
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
+  ENDIF
 ELSE
   ILTYPE  = 105
   ILEV2   = 0
-  CALL READ_GRIB(HGRIB,KLUOUT,86,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
+  CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,86,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
 ENDIF
 IF (IRET /= 0) THEN
   CALL ABOR1_SFX('MODE_READ_GRIB: SOIL MOISTURE LEVEL 1 MISSING (READ_GRIB_WG_METEO_FRANCE)')
@@ -1582,15 +1683,21 @@ PFIELD(:,1) = ZFIELD(:)
 ! 3.  Read layer 2 moisture
 !     ---------------------
 IF (HINMODEL == 'ARPEGE' .OR. HINMODEL=='MOCAGE') THEN
-  ILTYPE  = 112  
-  ILEV1   = 0  
-  ILEV2   = 250             
-  CALL READ_GRIB(HGRIB,KLUOUT,153,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
+  IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN
+    IPARAM=20
+    ILTYPE=106
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,ZFIELD,KLTYPE=ILTYPE)
+  ELSE
+    IPARAM=153
+    ILEV1   = 0  
+    ILEV2   = 250             
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
+  ENDIF  
 ELSE
   ILTYPE  = 111
   ILEV1   = -1
   ILEV2   = -1        
-  CALL READ_GRIB(HGRIB,KLUOUT,86,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
+  CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,86,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
 ENDIF
 IF (IRET /= 0) THEN
   CALL ABOR1_SFX('MODE_READ_GRIB: SOIL MOISTURE LEVEL 2 MISSING (READ_GRIB_WG_METEO_FRANCE)')
@@ -1603,9 +1710,9 @@ PFIELD(:,2) = ZFIELD(:)
 !* note that soil water reservoir is considered uniform between 0.2m and GRIB soil depth
 IF (GISBA) THEN
   IF (HINMODEL == 'ARPEGE' .OR. HINMODEL == 'MOCAGE') THEN
-    CALL READ_GRIB(HGRIB,KLUOUT,173,IRET,ZFIELD)
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,173,IRET,ZFIELD)
   ELSE
-    CALL READ_GRIB(HGRIB,KLUOUT,130,IRET,ZFIELD)
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,130,IRET,ZFIELD)
   ENDIF
   IF (IRET /= 0) THEN
     CALL ABOR1_SFX('MODE_READ_GRIB: SOIL MOISTURE LEVEL 2 DEPTH MISSING (READ_GRIB_WG_METEO_FRANCE)')          
@@ -1665,8 +1772,10 @@ END SUBROUTINE READ_GRIB_WG_METEO_FRANCE
 !     #######################
       SUBROUTINE READ_GRIB_WGI_METEO_FRANCE(HGRIB,KLUOUT,HINMODEL,PMASK,PFIELD,PD)
 !     #######################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
-USE MODD_GRID_GRIB,  ONLY : NNI
+USE MODD_GRID_GRIB,  ONLY : NNI,NGRIB_VERSION
 USE MODD_SURF_PAR,   ONLY : XUNDEF
 !
 IMPLICIT NONE
@@ -1685,6 +1794,7 @@ REAL, DIMENSION(:,:), POINTER       :: PD        ! thickness of each layer
 LOGICAL                           :: GISBA     ! T: surface scheme in file is ISBA
 INTEGER(KIND=kindOfInt)                           :: IRET      ! return code
 INTEGER                           :: ILTYPE    ! type of level (Grib code table 3)
+INTEGER                           :: IPARAM    ! number of ParamId or IndicatorOfParameter or ParameterNumber
 INTEGER                           :: ILEV1     ! level definition
 INTEGER                           :: ILEV2     ! level definition
 REAL,  DIMENSION(:),   POINTER    :: ZCLAY => NULL()     ! clay fraction
@@ -1714,13 +1824,20 @@ PD(:,1) = 0.01
 !     ---------------------
 ILEV1   = 0  
 IF (HINMODEL == 'ARPEGE' .OR. HINMODEL=='MOCAGE') THEN
-  ILTYPE  = 112     
-  ILEV2   = 1
-  CALL READ_GRIB(HGRIB,KLUOUT,152,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+  IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN
+    IPARAM = 22
+    ILTYPE  = 1     
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,ZFIELD,KLTYPE=ILTYPE)
+  ELSE
+    IPARAM = 152
+    ILTYPE  = 112     
+    ILEV2   = 1
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+  ENDIF
 ELSE
   ILTYPE  = 105      
   ILEV2   = 0        
-  CALL READ_GRIB(HGRIB,KLUOUT,139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+  CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
 END IF
 !
 IF (IRET == 0) THEN
@@ -1733,15 +1850,22 @@ END IF
 ! 3.  Read layer 2 soil ice
 !     ---------------------
 IF (HINMODEL == 'ARPEGE' .OR. HINMODEL=='MOCAGE') THEN
-  ILTYPE  = 112
-  ILEV1   = 0        
-  ILEV2   = 250
-  CALL READ_GRIB(HGRIB,KLUOUT,152,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+  IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN
+    IPARAM = 22
+    ILTYPE  = 106     
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,ZFIELD,KLTYPE=ILTYPE)
+  ELSE
+    IPARAM = 152
+    ILTYPE  = 112     
+    ILEV1   = 0        
+    ILEV2   = 250
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+  ENDIF
 ELSE
   ILTYPE  = 111
   ILEV1   = -1        
   ILEV2   = -1        
-  CALL READ_GRIB(HGRIB,KLUOUT,139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+  CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
 END IF
 !
 IF (IRET == 0) THEN
@@ -1755,9 +1879,9 @@ END IF
 !     ------------------------------
 IF (GISBA) THEN
   IF (HINMODEL == 'ARPEGE' .OR. HINMODEL=='MOCAGE') THEN 
-    CALL READ_GRIB(HGRIB,KLUOUT,173,IRET,ZFIELD)
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,173,IRET,ZFIELD)
   ELSE
-    CALL READ_GRIB(HGRIB,KLUOUT,130,IRET,ZFIELD)
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,130,IRET,ZFIELD)
   ENDIF
   IF (IRET /= 0) THEN
     CALL ABOR1_SFX('MODE_READ_GRIB: SOIL ICE LEVEL 2 MISSING (READ_GRIB_WGI_METEO_FRANCE)')
@@ -1806,6 +1930,8 @@ END SUBROUTINE READ_GRIB_WGI_METEO_FRANCE
 !     #######################
       SUBROUTINE READ_GRIB_TG_HIRLAM(HGRIB,KLUOUT,HINMODEL,PMASK,PTG,PDT)
 !     #######################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_GRID_GRIB,  ONLY : NNI
 USE MODD_SURF_PAR,   ONLY : XUNDEF
@@ -1837,7 +1963,7 @@ WRITE  (KLUOUT,'(A)') 'MODE_READ_GRIB:READ_GRIB_TG_HIRLAM: | Reading soil temper
 !     -----------------------
 ILEV1 = 904
 ILEV2 = -1
- CALL READ_GRIB(HGRIB,KLUOUT,11,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,11,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
 IF (IRET /= 0 ) THEN
   CALL ABOR1_SFX('MODE_READ_GRIB: SOIL TEMPERATURE LEVEL 1 MISSING (READ_GRIB_TG_HIRLAM)')
 END IF
@@ -1853,7 +1979,7 @@ WRITE (KLUOUT,'(A)') 'MODE_READ_GRIB:READ_GRIB_TG_HIRLAM: | Reading deep soil te
 !
 ILEV1 = 954
 ILEV2 = -1
- CALL READ_GRIB(HGRIB,KLUOUT,11,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,11,IRET,ZFIELD,KLEV1=ILEV1,KLEV2=ILEV2)
 IF (IRET /= 0) THEN
   CALL ABOR1_SFX('MODE_READ_GRIB: DEEP SOIL TEMPERATURE MISSING (READ_GRIB_TG_HIRLAM)')
 END IF
@@ -1881,6 +2007,8 @@ END SUBROUTINE READ_GRIB_TG_HIRLAM
 !     #######################
       SUBROUTINE READ_GRIB_WG_HIRLAM(HGRIB,KLUOUT,HINMODEL,PMASK,PFIELD,PD)
 !     #######################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_GRID_GRIB,  ONLY : NNI
 USE MODD_SURF_PAR,   ONLY : XUNDEF
@@ -1923,7 +2051,7 @@ ALLOCATE(ZD(2))
 ILTYPE=105
 ILEV1=904
 ILEV2=-1
- CALL READ_GRIB(HGRIB,KLUOUT,86,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,86,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
 IF (IRET /= 0 ) THEN
   CALL ABOR1_SFX('MODE_READ_GRIB: SOIL MOISTURE LEVEL 1 MISSING (READ_GRIB_WG_HIRLAM)')
 END IF
@@ -1941,7 +2069,7 @@ ZWG(:,1) = ZWG(:,1) / ZD(1)      ! convert units to m3/m3
 ILTYPE=105
 ILEV1=954
 ILEV2=-1
- CALL READ_GRIB(HGRIB,KLUOUT,86,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,86,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2)
 IF (IRET /= 0 ) THEN
   CALL ABOR1_SFX('MODE_READ_GRIB: SOIL MOISTURE LEVEL 2 MISSING (READ_GRIB_WG_HIRLAM)')
 END IF
@@ -1978,6 +2106,8 @@ END SUBROUTINE READ_GRIB_WG_HIRLAM
 !     #######################
       SUBROUTINE READ_GRIB_WGI_HIRLAM(HGRIB,KLUOUT,PFIELD,PD)
 !     #######################
+!    MODIFICATIONS
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_GRID_GRIB,  ONLY : NNI
 !
@@ -2014,10 +2144,11 @@ END SUBROUTINE READ_GRIB_WGI_HIRLAM
 !!    MODIFICATIONS
 !!    -------------
 !!    C Ardilouze 07/2013 : possibility to read snow density (ERAI-land)
+!!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !!
 !-------------------------------------------------------------------------------
 !
-USE MODD_GRID_GRIB,  ONLY : NNI
+USE MODD_GRID_GRIB,  ONLY : NNI,NGRIB_VERSION
 USE MODD_SURF_PAR,   ONLY : XUNDEF
 USE MODD_SNOW_PAR,   ONLY : XRHOSMAX
 !
@@ -2045,11 +2176,15 @@ WRITE  (KLUOUT,'(A)') 'MODE_READ_GRIB:READ_GRIB_SNOW_VEG_AND_DEPTH: | Reading sn
 !
 SELECT CASE(HINMODEL)
   CASE('ECMWF ')
-    CALL READ_GRIB(HGRIB,KLUOUT,141,IRET,ZFIELD)
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,141,IRET,ZFIELD)
   CASE('ARPEGE','ALADIN','MOCAGE','HIRLAM')
-    CALL READ_GRIB(HGRIB,KLUOUT,66,IRET,ZFIELD)
+    IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN
+      CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,11,IRET,ZFIELD)
+    ELSE
+      CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,66,IRET,ZFIELD)
+    ENDIF
   CASE('NCEP  ')
-    CALL READ_GRIB(HGRIB,KLUOUT,3066,IRET,ZFIELD)    
+    CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,3066,IRET,ZFIELD)    
   CASE DEFAULT
     CALL ABOR1_SFX('MODE_READ_GRIB:READ_GRIB_SNOW_VEG_AND_DEPTH: OPTION NOT SUPPORTED '//HINMODEL)
 END SELECT
@@ -2091,6 +2226,7 @@ END SUBROUTINE READ_GRIB_SNOW_VEG_AND_DEPTH
 !!    AUTHOR
 !!    -------------
 !!    C Ardilouze 07/2013 : possibility to read snow albedo (ERAI-land)
+!!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !!
 !-------------------------------------------------------------------------------
 !
@@ -2120,7 +2256,7 @@ WRITE  (KLUOUT,'(A)') 'MODE_READ_GRIB:READ_GRIB_SNOW_ALB: | Reading snow albedo'
 ALLOCATE(PSNVA(NNI))
 PSNVA(:) = 0.5 * ( XANSMIN + XANSMAX )
 IF (HINMODEL == 'ECMWF') THEN
-  CALL READ_GRIB(HGRIB,KLUOUT,32,IRET,ZFIELD)
+  CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,32,IRET,ZFIELD)
   IF (IRET == 0 ) THEN
     DEALLOCATE(PSNVA)      
     ALLOCATE(PSNVA(SIZE(ZFIELD)))
@@ -2139,6 +2275,7 @@ END SUBROUTINE READ_GRIB_SNOW_ALB
 !!    AUTHOR
 !!    -------------
 !!    C Ardilouze 08/2013 : possibility to read snow density (ERAI-land)
+!!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !!
 !-------------------------------------------------------------------------------
 !
@@ -2168,7 +2305,7 @@ WRITE  (KLUOUT,'(A)') 'MODE_READ_GRIB:READ_GRIB_SNOW_DEN: | Reading snow density
 ALLOCATE(PSNV(NNI))
 PSNV(:) = XRHOSMAX
 IF (HINMODEL == 'ECMWF') THEN
-  CALL READ_GRIB(HGRIB,KLUOUT,33,IRET,ZFIELD)
+  CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,33,IRET,ZFIELD)
   IF (IRET == 0 ) THEN
     DEALLOCATE(PSNV)      
     ALLOCATE(PSNV(SIZE(ZFIELD)))
@@ -2298,6 +2435,7 @@ END SUBROUTINE READ_GRIB_TF_TEB
 !     #######################
       SUBROUTINE READ_GRIB_TG_NCEP(HGRIB,KLUOUT,HINMODEL,PMASK,PTG,PD)
 !     #######################
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 IMPLICIT NONE
 !
@@ -2313,7 +2451,7 @@ REAL, DIMENSION(:,:), POINTER       :: PD        ! thickness of each layer
 !* local variables
 !  ---------------
 INTEGER(KIND=kindOfInt)                           :: IRET      ! return code
-INTEGER                           :: ILTYPE,ITER    ! type of level (Grib code table 3)
+INTEGER                           :: ILTYPE    ! type of level (Grib code table 3)
 INTEGER                           :: ILEV1     ! level definition
 INTEGER                           :: ILEV2     ! level definition
 INTEGER                           :: JL         ! layer loop counter
@@ -2341,10 +2479,9 @@ ILEV1 = -2
 ILEV2 = -2
 ZLEV1= 0.0
 ZLEV2= 0.1
-CALL READ_GRIB(HGRIB,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
+CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,&
+               HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 !
-
-
 IF (IRET== 0) THEN
   ZD(1)=(ZLEV2 - ZLEV1)
 
@@ -2364,8 +2501,8 @@ ZLEV1= 1.0
 ZLEV2= 2.0
 
 !
-CALL READ_GRIB(HGRIB,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
-
+CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,&
+               HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 
 IF (IRET == 0) THEN
   INLAYERDEEP = 4
@@ -2386,9 +2523,9 @@ ILEV2 = -2
 ZLEV1= 0.4
 ZLEV2= 1.0
 
- CALL READ_GRIB(HGRIB,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,&
+                HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 !
-
 IF (IRET == 0) THEN      
   ZD(3)=(ZLEV2 - ZLEV1)
   ZTG(:,3)=ZFIELD 
@@ -2404,10 +2541,9 @@ ILEV1 = -2
 ILEV2 = -2
 ZLEV1= 0.1
 ZLEV2= 0.4
- CALL READ_GRIB(HGRIB,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,&
+                HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 !
-
-
 IF (IRET== 0) THEN 
   ZD(2)=(ZLEV2 - ZLEV1)   
   ZTG(:,2)=ZFIELD
@@ -2431,21 +2567,17 @@ IF(SUM(ZD(1:INLAYERDEEP)) < 3.) THEN
 
   ZTG(:,INLAYERDEEP)=ZTG(:,INLAYERDEEP-1)
 ENDIF
-
-
 !
 !--------------------------------------------------------------------------------
 ! 6.  Set temperature profile and layer thicknesses
 !     ----------------------------------------------
-
+!
 WRITE  (KLUOUT,'(A)') 'MODE_READ_GRIB: FILL PROFILE'
-
+!
  CALL FILL_PFIELD(KLUOUT,'READ_GRIB_TG_NCEP',INLAYERDEEP,ZD,ZTG,PMASK,PTG,PD)
 DEALLOCATE(ZD)
 DEALLOCATE(ZTG)
 !
-
-
 IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_TG_NCEP',1,ZHOOK_HANDLE)
 
 WRITE  (KLUOUT,'(A)') 'MODE_READ_GRIB:END READ GRIB'
@@ -2455,6 +2587,7 @@ END SUBROUTINE READ_GRIB_TG_NCEP
 !     #######################
       SUBROUTINE READ_GRIB_WG_NCEP(HGRIB,KLUOUT,HINMODEL,PMASK,PFIELD,PD)
 !     #######################
+!    Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 
 !
 USE MODD_GRID_GRIB,  ONLY : NNI
 USE MODD_SURF_PAR,   ONLY : XUNDEF
@@ -2504,7 +2637,8 @@ ILEV1 = -2
 ILEV2 = -2
 ZLEV1= 0.0
 ZLEV2= 0.1
-CALL READ_GRIB(HGRIB,KLUOUT,260185,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
+CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,260185,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,&
+               HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 !
 IF (IRET== 0) THEN
   ZD(1)=(ZLEV2 - ZLEV1)
@@ -2524,7 +2658,8 @@ ZLEV1= 1.0
 ZLEV2= 2.0
 
 !
-CALL READ_GRIB(HGRIB,KLUOUT,260185,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
+CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,260185,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,&
+               HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 
 IF (IRET == 0) THEN
   INLAYERDEEP = 4
@@ -2545,7 +2680,8 @@ ILEV2 = -2
 ZLEV1= 0.4
 ZLEV2= 1.0
 
- CALL READ_GRIB(HGRIB,KLUOUT,260185,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,260185,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,&
+                HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 !
 IF (IRET == 0) THEN      
   ZD(3)=(ZLEV2 - ZLEV1)
@@ -2562,7 +2698,8 @@ ILEV1 = -2
 ILEV2 = -2
 ZLEV1= 0.1
 ZLEV2= 0.4
- CALL READ_GRIB(HGRIB,KLUOUT,260185,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
+ CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,260185,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,&
+               HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2)
 !
 IF (IRET== 0) THEN 
   ZD(2)=(ZLEV2 - ZLEV1)   
diff --git a/src/SURFEX/prep_grib_grid.F90 b/src/SURFEX/prep_grib_grid.F90
index 7d148175e1c36065beab673558e926cf2e459e53..9461f2e4015f0d8afca12bdcadf43e548b8f9ab1 100644
--- a/src/SURFEX/prep_grib_grid.F90
+++ b/src/SURFEX/prep_grib_grid.F90
@@ -36,6 +36,8 @@
 !!      S. Faroux 01/2011 : to use library GRIB_API instead of GRIBEX (from
 !!                          read_all_data_grib_case)
 !!      J. Escobar 1/06/2018 : remove IALLGRIB loop , useless & very memory consuming
+!!      Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 and adaptation to EPYGRAM-edited GRIB
+!!      
 !-------------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -56,7 +58,7 @@ USE MODD_GRID_ROTLATLON
 USE MODD_GRID_GAUSS, ONLY : XILA1, XILO1, XILA2, XILO2, NINLA, NINLO, NILEN, LROTPOLE, XCOEF, XLAP, XLOP, &
                             XLAT, XLON
 USE MODD_GRID_AROME, ONLY : XX, XY, NX, NY, XLAT0, XLON0, XLATOR, XLONOR, XRPK, XBETA, XZX, XZY, NIX
-USE MODD_GRID_GRIB,  ONLY : NNI, CGRIB_FILE
+USE MODD_GRID_GRIB,  ONLY : NNI, CGRIB_FILE,NGRIB_VERSION
 USE MODD_SURF_PAR,   ONLY : XUNDEF, NUNDEF
 USE MODD_CSTS,       ONLY : XPI
 !
@@ -113,6 +115,9 @@ INTEGER                            :: JLOOP1        ! Dummy counter
 !JUAN
 !JUAN
 INTEGER :: INFOMPI, J
+INTEGER(KIND=kindOfInt),DIMENSION(:),ALLOCATABLE            :: INLO_GRIB   ! Number of points along a parallel
+
+!
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 !---------------------------------------------------------------------------------------
@@ -148,6 +153,11 @@ END IF
 IF (IRET /= 0) THEN
   CALL ABOR1_SFX('PREP_GRIB_GRID: Error in reading center')
 END IF
+!
+ CALL GRIB_GET(IGRIB,'editionNumber',NGRIB_VERSION,IRET)
+IF (IRET /= 0) THEN
+  CALL ABOR1_SFX('PREP_GRIB_GRID: Error in reading editionNumber')
+END IF
 !
  CALL GRIB_GET(IGRIB,'typeOfGrid',HGRID,IRET)
 IF (IRET /= 0) THEN
@@ -464,14 +474,32 @@ SELECT CASE (HGRIDTYPE)
      !
        HGRIDTYPE = 'GAUSS     '
        IF (NRANK==NPIO) THEN
+! PROBLEME AVEC LES GRIB d'EPYGRAM
+! dans longitudeOfLastGridPointInDegrees la longitude du dernier point du
+! tableau (donc au pole sud)  
+! dans les GRIB1 on a la valeur max du tableau des longitudes (donc à
+! l'equateur) REMARQUE : c'est ce qu'on a pour le CEP
+! pour éviter de changer le GRIB on calcule différemment XILO2 en le recalculant 
+! le max de la longitude au niveau de l'équateur garce au champ 'pl'
+!
        CALL GRIB_GET(IGRIB,'latitudeOfFirstGridPointInDegrees',XILA1)
        CALL GRIB_GET(IGRIB,'longitudeOfFirstGridPointInDegrees',XILO1)
        CALL GRIB_GET(IGRIB,'latitudeOfLastGridPointInDegrees',XILA2)
        CALL GRIB_GET(IGRIB,'longitudeOfLastGridPointInDegrees',XILO2)
-     
        CALL GRIB_GET(IGRIB,'stretchingFactor',XCOEF)
        CALL GRIB_GET(IGRIB,'latitudeOfStretchingPoleInDegrees',XLAP)
        CALL GRIB_GET(IGRIB,'longitudeOfStretchingPoleInDegrees',XLOP)
+
+       IF (NRANK==NPIO) THEN
+         ALLOCATE (ININLO_GRIB(NINLA))
+         CALL GRIB_IS_MISSING(IGRIB,'pl',IMISSING,IRET)
+         IF (IRET == 0 .OR. IMISSING/=1)  THEN !  quasi-regular
+           CALL GRIB_GET(IGRIB,'pl',ININLO_GRIB)
+           XILO2=360.-360./(MAXVAL(INLO_GRIB))
+           print*,"XILO2=",XILO2
+         ENDIF
+         DEALLOCATE(ININLO_GRIB)
+        ENDIF
       ENDIF
       LROTPOLE = .TRUE.
        IF (NPROC>1) THEN