diff --git a/src/SURFEX/mode_read_grib.F90 b/src/SURFEX/mode_read_grib.F90 index 2eb32506329b395fc5f067472fdda84b334668f5..501ae26da178a98e7ee04f3330aaaaad92f24211 100644 --- a/src/SURFEX/mode_read_grib.F90 +++ b/src/SURFEX/mode_read_grib.F90 @@ -406,8 +406,6 @@ SELECT CASE (HINMODEL) CALL READ_GRIB(HGRIB,KLUOUT,172,IRET,PMASK) CASE ('NCEP ') CALL READ_GRIB(HGRIB,KLUOUT,172,IRET,PMASK) - - CASE ('ARPEGE','ALADIN','MOCAGE') CALL READ_GRIB(HGRIB,KLUOUT,81,IRET,PMASK) CASE ('HIRLAM') @@ -651,6 +649,9 @@ END SUBROUTINE READ_GRIB_SST SUBROUTINE READ_GRIB_TSWATER(HGRIB,KLUOUT,HINMODEL,PMASK,PTS) ! ########################### ! +! MODIFICATIONS +! Julien Pergaud(via J.Escobar) 10/2018 : correction for GFS undef=9999. temperature values +! USE MODD_SURF_PAR, ONLY : XUNDEF ! IMPLICIT NONE @@ -676,7 +677,7 @@ SELECT CASE (HINMODEL) CALL ABOR1_SFX('MODE_READ_GRIB:READ_GRIB_TSWATER:OPTION NOT SUPPORTED '//HINMODEL) END SELECT ! -IF (SIZE(PMASK)==SIZE(PTS)) WHERE (PMASK(:)/=1.) PTS = XUNDEF +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 @@ -741,6 +742,9 @@ END SUBROUTINE READ_GRIB_T2 SUBROUTINE READ_GRIB_T2_LAND(HGRIB,KLUOUT,HINMODEL,PMASK,ZFIELD) ! ########################### ! +! MODIFICATIONS +! Julien Pergaud(via J.Escobar) 10/2018 : correction for GFS undef=9999. temperature values +! USE MODD_SURF_PAR, ONLY : XUNDEF ! IMPLICIT NONE @@ -758,7 +762,7 @@ IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_T2_LAND',0,ZHOOK_HANDLE) ! CALL READ_GRIB_T2(HGRIB,KLUOUT,HINMODEL,PMASK,ZFIELD) ! -IF (SIZE(PMASK)==SIZE(ZFIELD)) WHERE (PMASK(:)/=1.) ZFIELD = XUNDEF +IF (SIZE(PMASK)==SIZE(ZFIELD)) WHERE ((PMASK(:)/=1.) .OR. ((PMASK(:)==1.) .AND.(ZFIELD(:)==9999.))) ZFIELD = XUNDEF ! IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_T2_LAND',1,ZHOOK_HANDLE) END SUBROUTINE READ_GRIB_T2_LAND @@ -802,6 +806,9 @@ END SUBROUTINE PUT_LAYER_DEPTH SUBROUTINE FILL_PFIELD(KLUOUT,HROUT,KNLAYERDEEP,PDIN,PFIELDIN,PMASK,PFIELDOUT,PDOUT) ! ####################### ! +! MODIFICATIONS +! Julien Pergaud(via J.Escobar) 10/2018 : correction for GFS undef=9999. temperature values +! USE MODD_SURF_PAR, ONLY : XUNDEF ! IMPLICIT NONE @@ -836,9 +843,10 @@ DO JL=1,KNLAYERDEEP PDOUT(:,JL)=SUM(PDIN(1:JL)) PFIELDOUT(:,JL)=PFIELDIN(:,JL) IF (SIZE(PMASK)==SIZE(PFIELDOUT,1)) & - WHERE (PMASK(:)/=1.) PFIELDOUT(:,JL) = XUNDEF + 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 !------------------------------------------------------------------- @@ -2305,7 +2313,7 @@ REAL, DIMENSION(:,:), POINTER :: PD ! thickness of each layer !* local variables ! --------------- INTEGER(KIND=kindOfInt) :: IRET ! return code -INTEGER :: ILTYPE ! type of level (Grib code table 3) +INTEGER :: ILTYPE,ITER ! type of level (Grib code table 3) INTEGER :: ILEV1 ! level definition INTEGER :: ILEV2 ! level definition INTEGER :: JL ! layer loop counter @@ -2335,6 +2343,8 @@ 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) ! + + IF (IRET== 0) THEN ZD(1)=(ZLEV2 - ZLEV1) @@ -2356,6 +2366,7 @@ ZLEV2= 2.0 ! CALL READ_GRIB(HGRIB,KLUOUT,228139,IRET,ZFIELD,KLTYPE=ILTYPE,KLEV1=ILEV1,KLEV2=ILEV2,HTYPELEVEL=YTYPELEVEL,PLEV1=ZLEV1,PLEV2=ZLEV2) + IF (IRET == 0) THEN INLAYERDEEP = 4 ZD(4)=(ZLEV2 - ZLEV1) @@ -2377,6 +2388,7 @@ ZLEV2= 1.0 CALL READ_GRIB(HGRIB,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 @@ -2394,6 +2406,8 @@ 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) ! + + IF (IRET== 0) THEN ZD(2)=(ZLEV2 - ZLEV1) ZTG(:,2)=ZFIELD @@ -2414,7 +2428,6 @@ IF(SUM(ZD(1:INLAYERDEEP)) < 3.) THEN write(KLUOUT,'(a,i3,i3)') 'editionNumber MAKE_GRIB_INDEX',INLAYERDEEP ZD(INLAYERDEEP)=3.-SUM(ZD(1:INLAYERDEEP-1)) - write(KLUOUT,*) 'ZD',ZD ZTG(:,INLAYERDEEP)=ZTG(:,INLAYERDEEP-1) ENDIF @@ -2431,7 +2444,7 @@ WRITE (KLUOUT,'(A)') 'MODE_READ_GRIB: FILL PROFILE' DEALLOCATE(ZD) DEALLOCATE(ZTG) ! -!write(KLUOUT,*) 'OUT FILL ZD',PD,PTG + IF (LHOOK) CALL DR_HOOK('MODE_READ_GRIB:READ_GRIB_TG_NCEP',1,ZHOOK_HANDLE)