Skip to content
Snippets Groups Projects
Commit 7d5539c7 authored by RODIER Quentin's avatar RODIER Quentin
Browse files

Quentin 11/12/2020: adapt and fix GRIB2 keys expected to read AROME and ARPEGE...

Quentin 11/12/2020: adapt and fix GRIB2 keys expected to read AROME and ARPEGE files converted with Epygram 1.4.8 on Belenos
parent 0509f844
No related branches found
No related tags found
No related merge requests found
......@@ -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'
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment