diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90 index bc171156015b1a1ad9cad8f8a3d48f5487afa48f..9d20fe12ac7952365ccd50580ee5db133cb3ff79 100644 --- a/src/MNH/read_all_data_grib_case.f90 +++ b/src/MNH/read_all_data_grib_case.f90 @@ -526,8 +526,7 @@ SELECT CASE (IMODEL) CASE(6,7) ! arpege and arome GRIB2 CALL SEARCH_FIELD(IGRIB,INUM_ZS,KDIS=0,KCAT=3,KNUMBER=4) IF(INUM_ZS < 0) THEN - ! Old version of EPyGraM (bug corrected since 01/2020) - CALL SEARCH_FIELD(IGRIB,INUM_ZS,KDIS=0,KCAT=3,KNUMBER=5) + CALL SEARCH_FIELD(IGRIB,INUM_ZS,KDIS=0,KCAT=193,KNUMBER=5) IF(INUM_ZS < 0) THEN WRITE (ILUOUT0,'(A)')'Orography is missing - abort' END IF @@ -637,7 +636,7 @@ SELECT CASE (IMODEL) CASE(1,2,3,4,5) ! arpege mocage aladin et aladin reunion CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=1) CASE(6,7) ! NEW AROME,ARPEGE - CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=3,KNUMBER=25) + CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=3,KNUMBER=0) CASE(10) ! NCEP CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=134) END SELECT @@ -956,7 +955,7 @@ IF (IMODEL==6) THEN ! GRIB2 AROME END IF IF (INUM < 0) THEN ISTARTLEVEL = 1 - CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=83,KLEV1=ISTARTLEVEL) + CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=0,KLEV1=ISTARTLEVEL) END IF IF (INUM > 0) THEN WRITE (ILUOUT0,'(A)') ' | Grib file from French Weather Service - Arome model (forecast)' @@ -1272,7 +1271,7 @@ IF (NRR >1) THEN DO JLOOP1=1, INLEVEL ILEV1 = JLOOP1-1+ISTARTLEVEL - CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=32,KLEV1=ILEV1) + CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=201,KLEV1=ILEV1) IF (INUM < 0) THEN !callabortstop WRITE(YMSG,*) 'Specific ratio ',IPAR,' at level ',JLOOP1,' is missing' diff --git a/src/SURFEX/mode_read_grib.F90 b/src/SURFEX/mode_read_grib.F90 index 2751bff06b17107df33231e213da599818c03176..f92149d19a20c6d00eeb29570069aecf84e819ce 100644 --- a/src/SURFEX/mode_read_grib.F90 +++ b/src/SURFEX/mode_read_grib.F90 @@ -99,7 +99,7 @@ IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:CLEAR_GRIB_INDEX',1,ZHOOK_HANDLE) END SUBROUTINE CLEAR_GRIB_INDEX !------------------------------------------------------------------- ! #################### - SUBROUTINE GET_GRIB_MESSAGE(KLUOUT,KLTYPE,KLEV1,KLEV2,KGRIB,KFOUND,HTYPELEVEL,PLEV1,PLEV2) + SUBROUTINE GET_GRIB_MESSAGE(KLUOUT,KLTYPE,KLEV1,KLEV2,KGRIB,KFOUND,HTYPELEVEL,PLEV1,PLEV2,HNAME) ! #################### ! MODIFICATIONS ! Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 @@ -117,6 +117,7 @@ INTEGER, INTENT(OUT) :: KFOUND CHARACTER(LEN=*), INTENT(INOUT), OPTIONAL :: HTYPELEVEL ! TypeOfLevel JPMODIF REAL, INTENT(INOUT), OPTIONAL :: PLEV1 ! top level of soil REAL, INTENT(INOUT), OPTIONAL :: PLEV2 ! Bottom level of soil +CHARACTER(LEN=*), INTENT(INOUT), OPTIONAL :: HNAME ! name of the parameter ! INTEGER :: ILTYPE @@ -125,6 +126,7 @@ INTEGER :: ILEV2 CHARACTER(LEN=50) :: YTYPELEVEL ! TypeOfLevel JPMODIF REAL :: ZLEV1,ZLEV2 INTEGER(KIND=kindOfInt) :: IRET +CHARACTER(LEN=50) :: CNAME ! REAL(KIND=JPRB) :: ZHOOK_HANDLE ! @@ -133,7 +135,7 @@ IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:GET_GRIB_MESSAGE',0,ZHOOK_HANDLE) IRET = 0 KFOUND=0 ! -DO WHILE (IRET /= GRIB_END_OF_INDEX .AND. KFOUND/=3) +DO WHILE (IRET /= GRIB_END_OF_INDEX .AND. KFOUND/=4) ! IRET = 0 KFOUND=0 @@ -151,6 +153,16 @@ DO WHILE (IRET /= GRIB_END_OF_INDEX .AND. KFOUND/=3) ENDIF ENDIF ! + IF (IRET.EQ.0) THEN + ! + KFOUND = KFOUND + 1 + ! + IF (PRESENT(HNAME)) THEN + CALL GRIB_GET(KGRIB,'name',CNAME,IRET) + CALL TEST_IRET_STR(KLUOUT,CNAME,HNAME,IRET) + END IF + END IF + ! IF (IRET.EQ.0) THEN ! KFOUND = KFOUND + 1 @@ -182,7 +194,7 @@ DO WHILE (IRET /= GRIB_END_OF_INDEX .AND. KFOUND/=3) ! ENDIF ! - IF (KFOUND.NE.3) THEN + IF (KFOUND.NE.4) THEN CALL GRIB_RELEASE(KGRIB) CALL GRIB_NEW_FROM_INDEX(NIDX,KGRIB,IRET) ENDIF @@ -288,7 +300,7 @@ END SUBROUTINE GET_GRIB_MESSAGE !------------------------------------------------------------------- ! #################### SUBROUTINE READ_GRIB(HGRIB,HINMODEL,KLUOUT,KPARAM,KRET,PFIELD,KLTYPE,KLEV1,KLEV2,KPARAM2, & - KLTYPE2,HTYPELEVEL,PLEV1,PLEV2) + KLTYPE2,HTYPELEVEL,PLEV1,PLEV2,HNAME) ! #################### ! MODIFICATIONS ! Gaelle Delautier (via Q.Rodier) 01/2019 : add GRIB 2 @@ -309,6 +321,7 @@ 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 +CHARACTER(LEN=*), INTENT(INOUT), OPTIONAL :: HNAME ! REAL, INTENT(INOUT), OPTIONAL :: PLEV1,PLEV2 ! @@ -317,6 +330,7 @@ INTEGER(KIND=kindOfInt) :: IGRIB INTEGER :: ISIZE, IFOUND REAL(KIND=JPRB) :: ZHOOK_HANDLE REAL :: ZLEV1,ZLEV2 +CHARACTER(LEN=50) :: CNAME ! IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB',0,ZHOOK_HANDLE) ! @@ -350,7 +364,10 @@ END IF WRITE (KLUOUT,*) 'READ_GRIB GRIB_NEW_FROM_INDEX ',KPARAM,IGRIB,KRET IF (KRET.EQ.0) THEN - IF (PRESENT(HTYPELEVEL)) THEN + IF (PRESENT(HNAME)) THEN + CNAME = HNAME + CALL GET_GRIB_MESSAGE(KLUOUT,ILTYPE,ILEV1,ILEV2,IGRIB,IFOUND,HNAME=CNAME) + ELSEIF (PRESENT(HTYPELEVEL)) THEN CALL GET_GRIB_MESSAGE(KLUOUT,ILTYPE,ILEV1,ILEV2,IGRIB,IFOUND,HTYPELEVEL,ZLEV1,ZLEV2) ELSE CALL GET_GRIB_MESSAGE(KLUOUT,ILTYPE,ILEV1,ILEV2,IGRIB,IFOUND) @@ -361,7 +378,7 @@ ENDIF WRITE (KLUOUT,*) 'READ_GRIB GRIB_NEW_FROM_INDEX ',KPARAM,IGRIB,KRET,IFOUND IF (PRESENT(KPARAM2)) THEN - IF (IFOUND/=3) THEN + IF (IFOUND/=4) THEN IF (HINMODEL=='ARPEGE' .AND.NGRIB_VERSION == 2) THEN CALL GRIB_INDEX_SELECT(NIDX,'parameterNumber',KPARAM2,KRET) ELSE @@ -379,7 +396,7 @@ IF (PRESENT(KPARAM2)) THEN ENDIF ENDIF ! -IF (IFOUND==3) THEN +IF (IFOUND==4) THEN ! IF (PRESENT(KLTYPE)) KLTYPE = ILTYPE IF (PRESENT(KLEV1)) KLEV1 = ILEV1 @@ -595,7 +612,7 @@ 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 - +CHARACTER(LEN=50) :: CNAME ! name of the parameter (for ARPEGE GRIB2 converted with Epygram 1.4.8) !------------------------------------------------------------------- !* Read surface temperature IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_T',0,ZHOOK_HANDLE) @@ -608,13 +625,15 @@ SELECT CASE (HINMODEL) CASE ('ARPEGE','ALADIN','MOCAGE') ILEV=0 IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN - IPARAM=18 + IPARAM=0 ILTYPE=1 + CNAME = 'Temperature' + CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,PT,KPARAM2=IPARAM,KLTYPE=ILTYPE,KLEV1=ILEV,HNAME=CNAME) ELSE IPARAM=11 ILTYPE=111 + CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,PT,KLTYPE=ILTYPE,KLEV1=ILEV) ENDIF - CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,PT,KLTYPE=ILTYPE,KLEV1=ILEV) IF (IRET /= 0) THEN ILTYPE=1 CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,PT,KLTYPE=ILTYPE) @@ -1655,7 +1674,7 @@ PD(:,2) = 0.20 ILEV1 = 0 IF (HINMODEL == 'ARPEGE' .OR. HINMODEL=='MOCAGE') THEN IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN - IPARAM=20 + IPARAM=193 ILTYPE=1 CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,ZFIELD,KLTYPE=ILTYPE) ELSE @@ -1678,7 +1697,7 @@ PFIELD(:,1) = ZFIELD(:) ! --------------------- IF (HINMODEL == 'ARPEGE' .OR. HINMODEL=='MOCAGE') THEN IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN - IPARAM=20 + IPARAM=193 ILTYPE=106 CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,IPARAM,IRET,ZFIELD,KLTYPE=ILTYPE) ELSE @@ -2173,7 +2192,7 @@ SELECT CASE(HINMODEL) CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,141,IRET,ZFIELD) CASE('ARPEGE','ALADIN','MOCAGE','HIRLAM') IF (HINMODEL=='ARPEGE' .AND. NGRIB_VERSION==2) THEN - CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,11,IRET,ZFIELD) + CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,60,IRET,ZFIELD) ELSE CALL READ_GRIB(HGRIB,HINMODEL,KLUOUT,66,IRET,ZFIELD) ENDIF