26 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
28 INTEGER(KIND=kindOfInt) :: IRET
29 REAL(KIND=JPRB) :: ZHOOK_HANDLE
31 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:MAKE_GRIB_INDEX',0,zhook_handle)
33 IF (
cgrib_file==hgrib)
CALL dr_hook(
'MODE_READ_GRIB:MAKE_GRIB_INDEX',1,zhook_handle)
38 CALL grib_index_create(
nidx,hgrib,
'indicatorOfParameter',iret)
39 IF (iret/=0)
CALL abor1_sfx(
"MODE_READ_GRIB:MAKE_GRIB_INDEX: error while creating the grib index")
41 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:MAKE_GRIB_INDEX',1,zhook_handle)
53 INTEGER(KIND=kindOfInt) :: IRET
55 REAL(KIND=JPRB) :: ZHOOK_HANDLE
57 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:CLEAR_GRIB_INDEX',0,zhook_handle)
61 CALL grib_index_release(
nidx,iret)
62 IF (iret/=0)
CALL abor1_sfx(
"MODE_READ_GRIB:MAKE_GRIB_INDEX: error while deleting the grib index")
65 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:CLEAR_GRIB_INDEX',1,zhook_handle)
77 INTEGER,
INTENT(IN) :: KLUOUT
78 INTEGER,
INTENT(INOUT) :: KLTYPE
79 INTEGER,
INTENT(INOUT) :: KLEV1
80 INTEGER,
INTENT(INOUT) :: KLEV2
81 INTEGER(KIND=kindOfInt),
INTENT(INOUT) :: KGRIB
82 INTEGER,
INTENT(OUT) :: KFOUND
87 INTEGER(KIND=kindOfInt) :: IRET
89 REAL(KIND=JPRB) :: ZHOOK_HANDLE
91 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:GET_GRIB_MESSAGE',0,zhook_handle)
96 DO WHILE (iret /= grib_end_of_index .AND. kfound/=3)
102 CALL grib_get(kgrib,
'indicatorOfTypeOfLevel',iltype,iret)
103 CALL test_iret(kluout,iltype,kltype,iret)
111 CALL grib_get(kgrib,
'topLevel',ilev1,iret)
120 CALL grib_get(kgrib,
'bottomLevel',ilev2,iret)
124 IF (iret.EQ.0) kfound = kfound + 1
130 IF (kfound.NE.3)
THEN 131 CALL grib_release(kgrib)
132 CALL grib_new_from_index(
nidx,kgrib,iret)
137 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:GET_GRIB_MESSAGE',1,zhook_handle)
142 SUBROUTINE test_iret(KLUOUT,VAL1,VAL0,KRET)
147 INTEGER,
INTENT(IN) :: KLUOUT
148 INTEGER,
INTENT(IN) :: VAL1
149 INTEGER,
INTENT(INOUT) :: VAL0
150 INTEGER(KIND=kindOfInt),
INTENT(INOUT) :: KRET
152 REAL(KIND=JPRB) :: ZHOOK_HANDLE
154 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:TEST_IRET',0,zhook_handle)
157 WRITE (kluout,
'(A)')
' | Error encountered in the Grib file, skipping field' 158 ELSE IF (kret == -6)
THEN 159 WRITE (kluout,
'(A)')
' | ECMWF pseudo-Grib data encountered, skipping field' 160 ELSEIF (val1 /= val0)
THEN 168 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:TEST_IRET',1,zhook_handle)
174 SUBROUTINE read_grib(HGRIB,KLUOUT,KPARAM,KRET,PFIELD,KLTYPE,KLEV1,KLEV2,KPARAM2)
181 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
182 INTEGER,
INTENT(IN) :: KLUOUT
183 INTEGER,
INTENT(IN) :: KPARAM
184 INTEGER(KIND=kindOfInt),
INTENT(OUT) :: KRET
185 REAL,
DIMENSION(:),
POINTER :: PFIELD
186 INTEGER,
INTENT(INOUT),
OPTIONAL :: KLTYPE
187 INTEGER,
INTENT(INOUT),
OPTIONAL :: KLEV1
188 INTEGER,
INTENT(INOUT),
OPTIONAL :: KLEV2
189 INTEGER,
INTENT(INOUT),
OPTIONAL :: KPARAM2
191 INTEGER :: ILTYPE, ILEV1, ILEV2
192 INTEGER(KIND=kindOfInt) :: IGRIB
193 INTEGER :: ISIZE, IFOUND
194 REAL(KIND=JPRB) :: ZHOOK_HANDLE
196 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB',0,zhook_handle)
199 IF (
PRESENT(kltype)) iltype=kltype
201 IF (
PRESENT(klev1)) ilev1=klev1
203 IF (
PRESENT(klev2)) ilev2=klev2
210 CALL grib_index_select(
nidx,
'indicatorOfParameter',kparam,kret)
211 CALL grib_new_from_index(
nidx,igrib,kret)
212 IF (kret.EQ.0)
CALL get_grib_message(kluout,iltype,ilev1,ilev2,igrib,ifound)
214 IF (
PRESENT(kparam2))
THEN 216 CALL grib_index_select(
nidx,
'indicatorOfParameter',kparam2,kret)
217 CALL grib_new_from_index(
nidx,igrib,kret)
220 IF (
PRESENT(kltype)) iltype=kltype
230 IF (
PRESENT(kltype)) kltype = iltype
231 IF (
PRESENT(klev1)) klev1 = ilev1
232 IF (
PRESENT(klev2)) klev2 = ilev2
234 IF (.NOT.
ASSOCIATED(pfield))
THEN 235 CALL grib_get_size(igrib,
'values',isize,kret)
236 IF (kret.NE.0)
CALL abor1_sfx(
"MODE_READ_GRIB:READ_GRIB: Problem getting size of values")
237 ALLOCATE(pfield(isize))
240 CALL grib_get(igrib,
'values',pfield,kret)
241 IF (kret.NE.0)
CALL abor1_sfx(
"MODE_READ_GRIB:READ_GRIB: Problem getting values")
242 CALL grib_release(igrib,kret)
243 IF (kret.NE.0)
CALL abor1_sfx(
"MODE_READ_GRIB:READ_GRIB: Problem releasing memory")
251 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB',1,zhook_handle)
262 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
263 INTEGER,
INTENT(IN) :: KLUOUT
264 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
265 REAL,
DIMENSION(:),
POINTER :: PMASK
267 INTEGER(KIND=kindOfInt) :: IRET
270 REAL(KIND=JPRB) :: ZHOOK_HANDLE
272 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_LAND_MASK',0,zhook_handle)
273 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_LAND_MASK: | Reading land mask from ',hinmodel
275 SELECT CASE (hinmodel)
277 CALL read_grib(hgrib,kluout,172,iret,pmask)
278 CASE (
'ARPEGE',
'ALADIN',
'MOCAGE')
279 CALL read_grib(hgrib,kluout,81,iret,pmask)
283 CALL read_grib(hgrib,kluout,81,iret,pmask,kltype=iltype,klev1=ilev)
285 CALL abor1_sfx(
'MODE_READ_GRIB:READ_GRIB_LAND_MASK: OPTION NOT SUPPORTED '//hinmodel)
289 CALL abor1_sfx(
'MODE_READ_GRIB: LAND SEA MASK MISSING (READ_GRIB_LAND_MASK)')
298 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_LAND_MASK',1,zhook_handle)
309 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
310 INTEGER,
INTENT(IN) :: KLUOUT
311 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
312 REAL,
DIMENSION(:),
POINTER :: PZS
314 INTEGER(KIND=kindOfInt) :: IRET
315 REAL(KIND=JPRB) :: ZHOOK_HANDLE
318 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_ZS',0,zhook_handle)
319 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_ZS: | Reading orography from ',hinmodel
321 SELECT CASE (hinmodel)
323 CALL read_grib(hgrib,kluout,129,iret,pzs)
324 CASE (
'ARPEGE',
'MOCAGE')
326 CASE (
'HIRLAM',
'ALADIN')
329 CALL abor1_sfx(
'MODE_READ_GRIB:READ_GRIB_ZS:OPTION NOT SUPPORTED '//hinmodel)
333 CALL abor1_sfx(
'MODE_READ_GRIB: OROGRAPHY MISSING (READ_GRIB_ZS_LAND)')
339 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_ZS',1,zhook_handle)
348 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
349 INTEGER,
INTENT(IN) :: KLUOUT
350 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
351 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
352 REAL,
DIMENSION(:),
POINTER :: PZSL
354 REAL(KIND=JPRB) :: ZHOOK_HANDLE
356 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_ZS_LAND',0,zhook_handle)
360 IF (
SIZE(pmask)==
SIZE(pzsl)) &
361 WHERE (pmask(:)/=1.) pzsl = 0.
363 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_ZS_LAND',1,zhook_handle)
372 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
373 INTEGER,
INTENT(IN) :: KLUOUT
374 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
375 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
376 REAL,
DIMENSION(:),
POINTER :: PZSS
378 REAL(KIND=JPRB) :: ZHOOK_HANDLE
380 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_ZS_SEA',0,zhook_handle)
384 IF (
SIZE(pmask)==
SIZE(pzss)) &
385 WHERE (pmask(:)/=0.) pzss = 0.
387 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_ZS_SEA',1,zhook_handle)
396 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
397 INTEGER,
INTENT(IN) :: KLUOUT
398 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
399 REAL,
DIMENSION(:),
POINTER :: PT
401 INTEGER(KIND=kindOfInt) :: IRET
404 REAL(KIND=JPRB) :: ZHOOK_HANDLE
407 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_T',0,zhook_handle)
408 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_T: | Reading surface temperature' 410 SELECT CASE (hinmodel)
414 CASE (
'ARPEGE',
'ALADIN',
'MOCAGE')
417 CALL read_grib(hgrib,kluout,11,iret,pt,kltype=iltype,klev1=ilev)
420 CALL read_grib(hgrib,kluout,11,iret,pt,kltype=iltype)
423 CALL read_grib(hgrib,kluout,11,iret,pt,kltype=iltype,klev1=ilev)
428 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_T: | Reading surface temperature tile 4' 431 CALL read_grib(hgrib,kluout,11,iret,pt,kltype=iltype,klev1=ilev)
434 CALL abor1_sfx(
'MODE_READ_GRIB:READ_GRIB_T:OPTION NOT SUPPORTED '//hinmodel)
438 CALL abor1_sfx(
'MODE_READ_GRIB: SURFACE TEMPERATURE MISSING (READ_GRIB_T)')
441 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_T',1,zhook_handle)
445 SUBROUTINE read_grib_ts(HGRIB,KLUOUT,HINMODEL,PMASK,PTS)
452 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
453 INTEGER,
INTENT(IN) :: KLUOUT
454 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
455 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
456 REAL,
DIMENSION(:),
POINTER :: PTS
458 REAL(KIND=JPRB) :: ZHOOK_HANDLE
460 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TS',0,zhook_handle)
464 IF (
SIZE(pmask)==
SIZE(pts))
WHERE (pmask(:)/=1.) pts =
xundef 466 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TS',1,zhook_handle)
477 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
478 INTEGER,
INTENT(IN) :: KLUOUT
479 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
480 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
481 REAL,
DIMENSION(:),
POINTER :: PSST
484 REAL(KIND=JPRB) :: ZHOOK_HANDLE
486 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_SST',0,zhook_handle)
488 SELECT CASE (hinmodel)
490 CALL read_grib(hgrib,kluout,34,iret,psst)
491 IF (iret /= 0)
CALL read_grib_t(hgrib,kluout,hinmodel,psst)
492 CASE (
'ARPEGE',
'ALADIN',
'MOCAGE',
'HIRLAM')
495 CALL abor1_sfx(
'MODE_READ_GRIB:READ_GRIB_SST:OPTION NOT SUPPORTED '//hinmodel)
498 IF (
SIZE(pmask)==
SIZE(psst))
WHERE (pmask(:)/=0.) psst =
xundef 500 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_SST',1,zhook_handle)
511 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
512 INTEGER,
INTENT(IN) :: KLUOUT
513 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
514 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
515 REAL,
DIMENSION(:),
POINTER :: PTS
518 REAL(KIND=JPRB) :: ZHOOK_HANDLE
520 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TSWATER',0,zhook_handle)
522 SELECT CASE (hinmodel)
524 CALL read_grib(hgrib,kluout,3080,iret,pts)
525 IF (iret /= 0)
CALL read_grib_t2(hgrib,kluout,hinmodel,pmask,pts)
526 CASE (
'ARPEGE',
'ALADIN',
'MOCAGE',
'HIRLAM')
529 CALL abor1_sfx(
'MODE_READ_GRIB:READ_GRIB_TSWATER:OPTION NOT SUPPORTED '//hinmodel)
532 IF (
SIZE(pmask)==
SIZE(pts))
WHERE (pmask(:)/=0.) pts =
xundef 534 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TSWATER',1,zhook_handle)
538 SUBROUTINE read_grib_t2(HGRIB,KLUOUT,HINMODEL,PMASK,PT2)
545 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
546 INTEGER,
INTENT(IN) :: KLUOUT
547 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
548 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
549 REAL,
DIMENSION(:),
POINTER :: PT2
551 INTEGER(KIND=kindOfInt) :: IRET
552 INTEGER :: ILTYPE, ILEV
553 REAL(KIND=JPRB) :: ZHOOK_HANDLE
556 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_T2',0,zhook_handle)
557 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_T2: | Reading deep soil temperature' 559 SELECT CASE (hinmodel)
561 CALL read_grib(hgrib,kluout,170,iret,pt2)
562 CASE (
'ARPEGE',
'ALADIN',
'MOCAGE')
564 CALL read_grib(hgrib,kluout,11,iret,pt2,kltype=iltype)
567 CALL read_grib(hgrib,kluout,11,iret,pt2,kltype=iltype)
572 CALL read_grib(hgrib,kluout,11,iret,pt2,kltype=iltype,klev1=ilev)
574 CALL abor1_sfx(
'MODE_READ_GRIB:READ_GRIB_T2:OPTION NOT SUPPORTED '//hinmodel)
578 CALL abor1_sfx(
'MODE_READ_GRIB: DEEP SOIL TEMPERATURE MISSING (READ_GRIB_T2)')
581 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_T2',1,zhook_handle)
593 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
594 INTEGER,
INTENT(IN) :: KLUOUT
595 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
596 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
597 REAL,
DIMENSION(:),
POINTER :: ZFIELD
599 REAL(KIND=JPRB) :: ZHOOK_HANDLE
602 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_T2_LAND',0,zhook_handle)
606 IF (
SIZE(pmask)==
SIZE(zfield))
WHERE (pmask(:)/=1.) zfield =
xundef 608 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_T2_LAND',1,zhook_handle)
612 SUBROUTINE put_layer_depth(KLUOUT,KLEV,HROUT,KLTYPE,KLEV1,KLEV2,KNLAYERDEEP,PV4,PV,PD)
616 INTEGER,
INTENT(IN) :: KLUOUT
617 INTEGER,
INTENT(IN) :: KLEV
618 CHARACTER(LEN=*),
INTENT(IN) :: HROUT
619 INTEGER,
INTENT(INOUT) :: KLTYPE
620 INTEGER,
INTENT(IN) :: KLEV1
621 INTEGER,
INTENT(IN) :: KLEV2
622 INTEGER,
INTENT(IN) :: KNLAYERDEEP
623 REAL,
INTENT(IN) :: PV4
624 REAL,
INTENT(IN) :: PV
625 REAL,
INTENT(OUT) :: PD
626 REAL(KIND=JPRB) :: ZHOOK_HANDLE
628 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:PUT_LAYER_DEPTH',0,zhook_handle)
630 IF (klev2 == -1) kltype = 0
631 IF (kltype==112)
THEN 632 pd = (klev2 - klev1) / 100.
634 IF (knlayerdeep == 4)
THEN 639 WRITE (kluout,
'(A,i1,A,f5.2,A)')
'MODE_READ_GRIB:'//
trim(hrout)//
': | Level ',&
640 klev,
' height not available, assuming ',pd,
' m' 643 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:PUT_LAYER_DEPTH',1,zhook_handle)
647 SUBROUTINE fill_pfield(KLUOUT,HROUT,KNLAYERDEEP,PDIN,PFIELDIN,PMASK,PFIELDOUT,PDOUT)
654 INTEGER,
INTENT(IN) :: KLUOUT
655 CHARACTER(LEN=*),
INTENT(IN) :: HROUT
656 INTEGER,
INTENT(IN) :: KNLAYERDEEP
657 REAL,
DIMENSION(:),
INTENT(IN) :: PDIN
658 REAL,
DIMENSION(:,:),
INTENT(IN) :: PFIELDIN
659 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
660 REAL,
DIMENSION(:,:),
POINTER :: PFIELDOUT
661 REAL,
DIMENSION(:,:),
POINTER :: PDOUT
663 CHARACTER(LEN=20) :: FMT0
665 REAL(KIND=JPRB) :: ZHOOK_HANDLE
667 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:FILL_PFIELD',0,zhook_handle)
671 WRITE(fmt0,fmt=
'(A8,I1,A11)')
'(A,I1,A,',knlayerdeep,
'(F5.2,","))' 672 WRITE (kluout,fmt=fmt0)
'MODE_READ_GRIB:'//
trim(hrout)//
': | ',knlayerdeep,&
673 ' deep layers, heights are : ',pdin(1:knlayerdeep)
677 ALLOCATE(pfieldout(
SIZE(pfieldin,1),knlayerdeep))
678 ALLOCATE(pdout(
SIZE(pfieldin,1),knlayerdeep))
681 pdout(:,jl)=
sum(pdin(1:jl))
682 pfieldout(:,jl)=pfieldin(:,jl)
683 IF (
SIZE(pmask)==
SIZE(pfieldout,1)) &
684 WHERE (pmask(:)/=1.) pfieldout(:,jl) =
xundef 687 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:FILL_PFIELD',1,zhook_handle)
698 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
699 INTEGER,
INTENT(IN) :: KLUOUT
700 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
701 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
702 REAL,
DIMENSION(:,:),
POINTER :: PTG
703 REAL,
DIMENSION(:,:),
POINTER :: PD
707 INTEGER(KIND=kindOfInt) :: IRET
712 INTEGER :: INLAYERDEEP
713 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
714 REAL,
DIMENSION(:,:),
ALLOCATABLE:: ZTG
715 REAL,
DIMENSION(:) ,
ALLOCATABLE:: ZD
716 REAL(KIND=JPRB) :: ZHOOK_HANDLE
718 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TG_ECMWF',0,zhook_handle)
719 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_TG_ECMWF: | Reading soil temperature' 728 CALL read_grib(hgrib,kluout,139,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2)
731 CALL put_layer_depth(kluout,1,
'READ_GRIB_TG_ECMWF',iltype,ilev1,ilev2,4,0.07,0.07,zd(1))
732 ALLOCATE(ztg(
SIZE(zfield),5))
735 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL TEMPERATURE LEVEL 1 MISSING (READ_GRIB_TG_ECMWF)')
743 CALL read_grib(hgrib,kluout,236,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2)
747 CALL put_layer_depth(kluout,4,
'READ_GRIB_TG_ECMWF',iltype,ilev1,ilev2,inlayerdeep,1.89,1.89,zd(4))
759 CALL read_grib(hgrib,kluout,183,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2)
762 CALL put_layer_depth(kluout,3,
'READ_GRIB_TG_ECMWF',iltype,ilev1,ilev2,inlayerdeep,0.72,0.42,zd(3))
774 CALL read_grib(hgrib,kluout,170,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2)
777 CALL put_layer_depth(kluout,2,
'READ_GRIB_TG_ECMWF',iltype,ilev1,ilev2,inlayerdeep,0.21,0.42,zd(2))
781 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL TEMPERATURE LEVEL 2 MISSING (READ_GRIB_TG_ECMWF)')
787 IF(
sum(zd(1:inlayerdeep)) < 3.)
THEN 789 inlayerdeep=inlayerdeep+1
790 zd(inlayerdeep)=3.-
sum(zd(1:inlayerdeep-1))
791 ztg(:,inlayerdeep)=ztg(:,inlayerdeep-1)
797 CALL fill_pfield(kluout,
'READ_GRIB_TG_ECMWF',inlayerdeep,zd,ztg,pmask,ptg,pd)
801 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TG_ECMWF',1,zhook_handle)
835 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
836 INTEGER,
INTENT(IN) :: KLUOUT
837 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
838 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
839 REAL,
DIMENSION(:,:),
POINTER :: PWG
840 REAL,
DIMENSION(:,:),
POINTER :: PD
844 INTEGER(KIND=kindOfInt) :: IRET
849 INTEGER :: INLAYERDEEP
850 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
851 REAL,
DIMENSION(:,:),
ALLOCATABLE:: ZWG
852 REAL,
DIMENSION(:) ,
ALLOCATABLE:: ZD
853 REAL(KIND=JPRB) :: ZHOOK_HANDLE
855 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WG_ECMWF_1',0,zhook_handle)
856 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_WG_ECMWF_1: | Reading soil moisture' 866 CALL read_grib(hgrib,kluout,140,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2,kparam2=ipar)
869 CALL put_layer_depth(kluout,1,
'READ_GRIB_WG_ECMWF_1',iltype,ilev1,ilev2,4,0.07,0.07,zd(1))
870 ALLOCATE(zwg(
SIZE(zfield,1),4))
873 IF (ipar==140) zwg(:,1)=zwg(:,1) / zd(1)
875 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL MOISTURE LEVEL 1 MISSING (READ_GRIB_WG_ECMWF_1)')
884 CALL read_grib(hgrib,kluout,237,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2,kparam2=ipar)
888 CALL put_layer_depth(kluout,4,
'READ_GRIB_WG_ECMWF_1',iltype,ilev1,ilev2,inlayerdeep,1.89,1.89,zd(4))
891 IF (ipar==237) zwg(:,4)=zwg(:,4) / zd(1)
903 CALL read_grib(hgrib,kluout,184,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2,kparam2=ipar)
906 CALL put_layer_depth(kluout,3,
'READ_GRIB_WG_ECMWF_1',iltype,ilev1,ilev2,inlayerdeep,0.72,0.42,zd(3))
909 IF (ipar==184) zwg(:,3)=zwg(:,3) / zd(1)
921 CALL read_grib(hgrib,kluout,171,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2,kparam2=ipar)
924 CALL put_layer_depth(kluout,2,
'READ_GRIB_WG_ECMWF_1',iltype,ilev1,ilev2,inlayerdeep,0.21,0.42,zd(2))
928 IF (ipar==171) zwg(:,2)=zwg(:,2) / zd(1)
930 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL MOISTURE LEVEL 2 MISSING (READ_GRIB_WG_ECMWF_1)')
935 CALL fill_pfield(kluout,
'READ_GRIB_WG_ECMWF_1',inlayerdeep,zd,zwg,pmask,pwg,pd)
939 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WG_ECMWF_1',1,zhook_handle)
957 REAL,
DIMENSION(:,:),
INTENT(IN) :: PTG
958 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PWG
960 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PWGI
965 REAL(KIND=JPRB) :: ZHOOK_HANDLE
967 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:ECMWF_WGI',0,zhook_handle)
972 WHERE(ptg(:,:) > zt1)
974 ELSEWHERE(ptg(:,:) < zt2)
978 pwgi(:,:)=pwg(:,:) * 0.5* (1 - sin(
xpi * (ptg(:,:) - 0.5*zt1 - 0.5*zt2) / &
980 pwg(:,:) = pwg(:,:) - pwgi(:,:)
983 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:ECMWF_WGI',1,zhook_handle)
1001 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1002 INTEGER,
INTENT(IN) :: KLUOUT
1003 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1004 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1005 REAL,
DIMENSION(:,:),
OPTIONAL,
POINTER :: PWG
1007 REAL,
DIMENSION(:,:),
OPTIONAL,
POINTER :: PD
1008 REAL,
DIMENSION(:,:),
OPTIONAL,
POINTER :: PWGI
1011 REAL,
DIMENSION(:,:),
POINTER :: ZWG => null()
1012 REAL,
DIMENSION(:,:),
POINTER :: ZD => null()
1013 REAL,
DIMENSION(:,:),
POINTER :: ZTG => null()
1014 REAL,
DIMENSION(:,:),
POINTER :: ZDT => null()
1015 REAL,
DIMENSION(:,:),
ALLOCATABLE:: ZWGI
1017 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1019 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:HARMONIZE_GRIB_WG_WGI_ECMWF',0,zhook_handle)
1024 IF (
SIZE(ztg,2) .LT.
SIZE(zwg,2))
THEN 1025 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:HARMONIZE_GRIB_WG_WGI_ECMWF: ' 1026 WRITE (kluout,
'(A)')
'ERROR, YOU HAVE NOT THE SAME NUMBER OF LEVELS ' 1027 WRITE (kluout,
'(A)')
'IN SOIL FOR TEMPERATURE AND HUMIDITY ' 1028 WRITE (kluout,
'(A)')
'VERIFY GRIB FILE ' 1029 CALL abor1_sfx(
"MODE_READ_GRIB:HARMONIZE_GRIB_WG_WGI_ECMWF: VERIFY NUMBER OF LEVELS IN GRIB FILE")
1032 IF (
PRESENT(pd))
THEN 1033 ALLOCATE(pd(
SIZE(zd,1),
SIZE(zd,2)))
1036 IF (
PRESENT(pwgi))
THEN 1037 ALLOCATE(pwgi(
SIZE(zwg,1),
SIZE(zwg,2)))
1043 IF(all(zdt(:,1:
SIZE(zwg,2))==zd(:,1:
SIZE(zwg,2))))
THEN 1044 ALLOCATE(zwgi(
SIZE(zwg,1),
SIZE(zwg,2)))
1045 CALL ecmwf_wgi(ztg(:,1:
SIZE(zwg,2)),zwg,zwgi)
1046 IF (
PRESENT(pwgi)) pwgi(:,:)=zwgi(:,:)
1050 IF (
PRESENT(pwg))
THEN 1051 ALLOCATE(pwg(
SIZE(zwg,1),
SIZE(zwg,2)))
1060 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:HARMONIZE_GRIB_WG_WGI_ECMWF',1,zhook_handle)
1074 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1075 INTEGER,
INTENT(IN) :: KLUOUT
1076 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1077 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1078 REAL,
DIMENSION(:,:),
POINTER :: PFIELD
1079 REAL,
DIMENSION(:,:),
POINTER :: PD
1082 INTEGER(KIND=kindOfInt) :: IRET
1083 REAL,
DIMENSION(:),
POINTER :: ZSLT => null()
1084 REAL,
DIMENSION(:),
ALLOCATABLE:: ZWWILT
1085 REAL,
DIMENSION(:),
ALLOCATABLE:: ZWFC
1087 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1089 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WG_ECMWF',0,zhook_handle)
1095 CALL read_grib(hgrib,kluout,43,iret,zslt)
1097 ALLOCATE (zwfc(
SIZE(pfield,1)))
1098 ALLOCATE (zwwilt(
SIZE(pfield,1)))
1109 ELSEWHERE (zslt(:)==2.)
1112 ELSEWHERE (zslt(:)==3.)
1115 ELSEWHERE (zslt(:)==4.)
1118 ELSEWHERE (zslt(:)==5.)
1121 ELSEWHERE (zslt(:)==6.)
1131 IF (
SIZE(pfield,2)==4)
THEN 1141 DO jl=1,
SIZE(pfield,2)
1142 WHERE ( pfield(:,jl).NE.
xundef .AND. zwfc(:).NE.0. )
1143 pfield(:,jl) = (pfield(:,jl) - zwwilt(:)) / (zwfc(:) - zwwilt(:))
1149 IF (
ASSOCIATED(zslt))
DEALLOCATE(zslt)
1153 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WG_ECMWF',1,zhook_handle)
1167 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1168 INTEGER,
INTENT(IN) :: KLUOUT
1169 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1170 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1171 REAL,
DIMENSION(:,:),
POINTER :: PFIELD
1172 REAL,
DIMENSION(:,:),
POINTER :: PD
1175 INTEGER(KIND=kindOfInt) :: IRET
1176 REAL,
DIMENSION(:),
POINTER :: ZSLT => null()
1177 REAL,
DIMENSION(:) ,
ALLOCATABLE:: ZWSAT
1179 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1181 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WGI_ECMWF',0,zhook_handle)
1187 CALL read_grib(hgrib,kluout,43,iret,zslt)
1189 ALLOCATE (zwsat(
SIZE(pfield,1)))
1198 ELSEWHERE (zslt(:)==2.)
1200 ELSEWHERE (zslt(:)==3.)
1202 ELSEWHERE (zslt(:)==4.)
1204 ELSEWHERE (zslt(:)==5.)
1206 ELSEWHERE (zslt(:)==6.)
1215 IF (
SIZE(pfield,2)==4)
THEN 1224 DO jl=1,
SIZE(pfield,2)
1225 WHERE ( pfield(:,jl).NE.
xundef .AND. zwsat(:).NE.0. )
1226 pfield(:,jl) = pfield(:,jl) / zwsat(:)
1232 IF (
ASSOCIATED(zslt))
DEALLOCATE(zslt)
1235 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WGI_ECMWF',1,zhook_handle)
1249 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1250 INTEGER,
INTENT(IN) :: KLUOUT
1251 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1252 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1253 REAL,
DIMENSION(:,:),
POINTER :: PTG
1254 REAL,
DIMENSION(:,:),
POINTER :: PDT
1257 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
1259 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1261 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TG_METEO_FRANCE',0,zhook_handle)
1262 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_TG_METEO_FRANCE: | Reading soil temperature' 1271 ALLOCATE(ptg(
SIZE(zfield),3))
1272 ALLOCATE(pdt(
SIZE(zfield),3))
1274 ptg(:,1) = zfield(:)
1281 ptg(:,2) = zfield(:)
1290 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TG_METEO_FRANCE',1,zhook_handle)
1301 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1302 INTEGER,
INTENT(IN) :: KLUOUT
1303 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1304 REAL,
DIMENSION(:),
POINTER :: PSAND
1305 REAL,
DIMENSION(:),
POINTER :: PCLAY
1306 LOGICAL,
INTENT(OUT) :: GISBA
1309 INTEGER(KIND=kindOfInt) :: IRET
1311 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1315 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_SAND_CLAY_METEO_FRANCE',0,zhook_handle)
1317 IF (hinmodel ==
'ARPEGE' .OR. hinmodel ==
'MOCAGE') ipar=171
1318 IF (hinmodel ==
'ALADIN') ipar=128
1319 CALL read_grib(hgrib,kluout,ipar,iret,pclay)
1326 pclay(:) = pclay(:) / 100.
1327 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_SAND_CLAY_METEO_FRANCE: | The soil model is ISBA' 1332 IF (hinmodel ==
'ARPEGE' .OR. hinmodel ==
'MOCAGE') ipar=172
1333 IF (hinmodel ==
'ALADIN') ipar=129
1334 CALL read_grib(hgrib,kluout,ipar,iret,psand)
1339 CALL abor1_sfx(
'MODE_READ_GRIB: SAND FRACTION MISSING (READ_GRIB_SAND_CLAY_METEO_FRANCE)')
1341 psand(:) = psand(:) / 100.
1345 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_SAND_CLAY_METEO_FRANCE',1,zhook_handle)
1359 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1360 INTEGER,
INTENT(IN) :: KLUOUT
1361 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1362 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1363 REAL,
DIMENSION(:,:),
POINTER :: PFIELD
1364 REAL,
DIMENSION(:,:),
POINTER :: PD
1369 INTEGER(KIND=kindOfInt) :: IRET
1373 REAL,
DIMENSION(:),
POINTER :: ZCLAY => null()
1374 REAL,
DIMENSION(:),
POINTER :: ZSAND => null()
1375 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
1376 REAL,
DIMENSION(:),
ALLOCATABLE:: ZWWILT
1377 REAL,
DIMENSION(:),
ALLOCATABLE:: ZWFC
1378 REAL,
DIMENSION(:),
ALLOCATABLE:: ZWSAT
1380 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1382 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WG_METEO_FRANCE',0,zhook_handle)
1389 ALLOCATE(pfield(
SIZE(zsand),3))
1390 ALLOCATE(pd(
SIZE(zsand),3))
1392 ALLOCATE(pfield(
nni,3))
1402 IF (hinmodel ==
'ARPEGE' .OR. hinmodel==
'MOCAGE')
THEN 1405 CALL read_grib(hgrib,kluout,153,iret,zfield,klev1=ilev1,klev2=ilev2)
1409 CALL read_grib(hgrib,kluout,86,iret,zfield,klev1=ilev1,klev2=ilev2)
1412 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL MOISTURE LEVEL 1 MISSING (READ_GRIB_WG_METEO_FRANCE)')
1415 pfield(:,1) = zfield(:)
1419 IF (hinmodel ==
'ARPEGE' .OR. hinmodel==
'MOCAGE')
THEN 1423 CALL read_grib(hgrib,kluout,153,iret,zfield,klev1=ilev1,klev2=ilev2)
1428 CALL read_grib(hgrib,kluout,86,iret,zfield,klev1=ilev1,klev2=ilev2)
1431 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL MOISTURE LEVEL 2 MISSING (READ_GRIB_WG_METEO_FRANCE)')
1434 pfield(:,2) = zfield(:)
1440 IF (hinmodel ==
'ARPEGE' .OR. hinmodel ==
'MOCAGE')
THEN 1441 CALL read_grib(hgrib,kluout,173,iret,zfield)
1443 CALL read_grib(hgrib,kluout,130,iret,zfield)
1446 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL MOISTURE LEVEL 2 DEPTH MISSING (READ_GRIB_WG_METEO_FRANCE)')
1460 pfield(:,1) = pfield(:,1) / 10.
1461 pfield(:,2) = pfield(:,2) /(1000. * pd(:,3))
1463 ALLOCATE (zwsat(
SIZE(zsand)))
1464 zwsat(:) = (-1.08*100. * zsand(:) + 494.305) * 0.001
1465 pfield(:,1) = max(min(pfield(:,1),zwsat(:)),0.)
1466 pfield(:,2) = max(min(pfield(:,2),zwsat(:)),0.)
1470 ALLOCATE (zwwilt(
SIZE(zclay)))
1471 ALLOCATE (zwfc(
SIZE(zclay)))
1472 zwwilt(:) = 37.1342e-3 * sqrt( 100. * zclay(:) )
1473 zwfc(:) = 89.0467e-3 * (100. * zclay(:) )**0.3496
1474 pfield(:,1) = (pfield(:,1) - zwwilt(:)) / (zwfc(:) - zwwilt(:))
1475 pfield(:,2) = (pfield(:,2) - zwwilt(:)) / (zwfc(:) - zwwilt(:))
1482 pfield(:,2) = (pfield(:,1)+pfield(:,2)) / (20. + 100.)
1483 pfield(:,1) = pfield(:,1) / 20.
1487 pfield(:,3) = pfield(:,2)
1491 IF (
SIZE(pmask)==
SIZE(pfield,1))
THEN 1492 DO jl=1,
SIZE(pfield,2)
1493 WHERE (pmask(:)/=1.) pfield(:,jl) =
xundef 1497 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WG_METEO_FRANCE',1,zhook_handle)
1511 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1512 INTEGER,
INTENT(IN) :: KLUOUT
1513 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1514 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1515 REAL,
DIMENSION(:,:),
POINTER :: PFIELD
1516 REAL,
DIMENSION(:,:),
POINTER :: PD
1521 INTEGER(KIND=kindOfInt) :: IRET
1525 REAL,
DIMENSION(:),
POINTER :: ZCLAY => null()
1526 REAL,
DIMENSION(:),
POINTER :: ZSAND => null()
1527 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
1528 REAL,
DIMENSION(:),
ALLOCATABLE:: ZWSAT
1530 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1532 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WGI_METEO_FRANCE',0,zhook_handle)
1539 ALLOCATE(pfield(
SIZE(zsand),2))
1540 ALLOCATE(pd(
SIZE(zsand),2))
1542 ALLOCATE(pfield(
nni,2))
1551 IF (hinmodel ==
'ARPEGE' .OR. hinmodel==
'MOCAGE')
THEN 1554 CALL read_grib(hgrib,kluout,152,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2)
1558 CALL read_grib(hgrib,kluout,139,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2)
1562 pfield(:,1) = zfield(:)
1563 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_WGI_METEO_FRANCE: -> Soil ice level 1 is present' 1570 IF (hinmodel ==
'ARPEGE' .OR. hinmodel==
'MOCAGE')
THEN 1574 CALL read_grib(hgrib,kluout,152,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2)
1579 CALL read_grib(hgrib,kluout,139,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2)
1583 pfield(:,2) = zfield(:)
1584 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_WGI_METEO_FRANCE: -> Soil ice level 2 is present' 1592 IF (hinmodel ==
'ARPEGE' .OR. hinmodel==
'MOCAGE')
THEN 1593 CALL read_grib(hgrib,kluout,173,iret,zfield)
1595 CALL read_grib(hgrib,kluout,130,iret,zfield)
1598 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL ICE LEVEL 2 MISSING (READ_GRIB_WGI_METEO_FRANCE)')
1611 pfield(:,1) = pfield(:,1) / 10.
1612 pfield(:,2) = pfield(:,2) /(1000. * pd(:,2))
1614 ALLOCATE (zwsat(
nni))
1615 zwsat(:) = (-1.08*100. * zsand(:) + 494.305) * 0.001
1616 pfield(:,1) = pfield(:,1) / zwsat(:)
1617 pfield(:,2) = pfield(:,2) / zwsat(:)
1631 IF (
SIZE(pmask)==
SIZE(pfield,1))
THEN 1632 DO jl=1,
SIZE(pfield,2)
1633 WHERE (pmask(:)/=1.) pfield(:,jl) =
xundef 1637 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WGI_METEO_FRANCE',1,zhook_handle)
1652 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1653 INTEGER,
INTENT(IN) :: KLUOUT
1654 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1655 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1656 REAL,
DIMENSION(:,:),
POINTER :: PTG
1657 REAL,
DIMENSION(:,:),
POINTER :: PDT
1661 INTEGER(KIND=kindOfInt) :: IRET
1664 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
1666 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1668 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TG_HIRLAM',0,zhook_handle)
1669 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_TG_HIRLAM: | Reading soil temperature' 1675 CALL read_grib(hgrib,kluout,11,iret,zfield,klev1=ilev1,klev2=ilev2)
1676 IF (iret /= 0 )
THEN 1677 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL TEMPERATURE LEVEL 1 MISSING (READ_GRIB_TG_HIRLAM)')
1680 ALLOCATE(ptg(
SIZE(zfield),3))
1681 ALLOCATE(pdt(
SIZE(zfield),3))
1687 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_TG_HIRLAM: | Reading deep soil temperature' 1691 CALL read_grib(hgrib,kluout,11,iret,zfield,klev1=ilev1,klev2=ilev2)
1693 CALL abor1_sfx(
'MODE_READ_GRIB: DEEP SOIL TEMPERATURE MISSING (READ_GRIB_TG_HIRLAM)')
1707 IF (
SIZE(pmask)==
SIZE(ptg,1))
THEN 1709 WHERE (pmask(:)/=1.) ptg(:,jl) =
xundef 1713 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TG_HIRLAM',1,zhook_handle)
1727 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1728 INTEGER,
INTENT(IN) :: KLUOUT
1729 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1730 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1731 REAL,
DIMENSION(:,:),
POINTER :: PFIELD
1732 REAL,
DIMENSION(:,:),
POINTER :: PD
1736 INTEGER(KIND=kindOfInt) :: IRET
1740 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
1741 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZWG
1742 REAL,
DIMENSION(:),
ALLOCATABLE :: ZD
1743 INTEGER :: INLAYERDEEP
1748 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1750 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WG_HIRLAM',0,zhook_handle)
1751 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_WG_HIRLAM: | Reading soil moisture' 1752 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_WG_HIRLAM: | WARNING READING LOW VEGETATION TILE (NR 4) ONLY' 1761 CALL read_grib(hgrib,kluout,86,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2)
1762 IF (iret /= 0 )
THEN 1763 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL MOISTURE LEVEL 1 MISSING (READ_GRIB_WG_HIRLAM)')
1766 ALLOCATE(zwg(
SIZE(zfield),2))
1770 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_WG_HIRLAM: | Level 1 height set to 0.01 m ' 1772 zwg(:,1) = zwg(:,1) / zd(1)
1779 CALL read_grib(hgrib,kluout,86,iret,zfield,kltype=iltype,klev1=ilev1,klev2=ilev2)
1780 IF (iret /= 0 )
THEN 1781 CALL abor1_sfx(
'MODE_READ_GRIB: SOIL MOISTURE LEVEL 2 MISSING (READ_GRIB_WG_HIRLAM)')
1789 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_WG_HIRLAM: | Level 2 height set to 0.42 m ' 1791 WRITE (kluout,
'(A)')
'WARNING MODE_READ_GRIB: ZWG3 AND ZWG4 SET TO 0. (READ_GRIB_WG_HIRLAM)' 1795 CALL fill_pfield(kluout,
'READ_GRIB_WG_HIRLAM',inlayerdeep,zd,zwg,pmask,pfield,pd)
1807 WHERE (pfield(:,jl).NE.
xundef) pfield(:,jl) = (pfield(:,jl) - zwwilt) / (zwfc - zwwilt)
1810 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WG_HIRLAM',1,zhook_handle)
1823 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1824 INTEGER,
INTENT(IN) :: KLUOUT
1825 REAL,
DIMENSION(:,:),
POINTER :: PFIELD
1826 REAL,
DIMENSION(:,:),
POINTER :: PD
1830 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1832 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WGI_HIRLAM',0,zhook_handle)
1834 ALLOCATE (pfield(
nni,2))
1835 ALLOCATE (pd(
nni,2))
1841 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_WGI_HIRLAM',1,zhook_handle)
1857 USE modd_snow_par
, ONLY : xrhosmax
1863 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1864 INTEGER,
INTENT(IN) :: KLUOUT
1865 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1866 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1867 REAL,
DIMENSION(:),
OPTIONAL,
POINTER :: PSNV
1868 REAL,
DIMENSION(:),
OPTIONAL,
POINTER :: PSNVD
1872 INTEGER(KIND=kindOfInt) :: IRET
1873 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
1874 REAL,
DIMENSION(:),
POINTER :: ZFIELD2 => null()
1875 REAL,
DIMENSION(:),
POINTER :: ZRHO => null()
1876 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1878 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_SNOW_VEG_AND_DEPTH',0,zhook_handle)
1879 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_SNOW_VEG_AND_DEPTH: | Reading snow depth and density (if present)' 1881 SELECT CASE(hinmodel)
1883 CALL read_grib(hgrib,kluout,141,iret,zfield)
1884 CASE(
'ARPEGE',
'ALADIN',
'MOCAGE',
'HIRLAM')
1885 CALL read_grib(hgrib,kluout,66,iret,zfield)
1887 CALL abor1_sfx(
'MODE_READ_GRIB:READ_GRIB_SNOW_VEG_AND_DEPTH: OPTION NOT SUPPORTED '//hinmodel)
1890 IF (iret /= 0 )
THEN 1891 CALL abor1_sfx(
'MODE_READ_GRIB: SNOW AND VEG DEPTH MISSING (READ_GRIB_SNOW_VEG_AND_DEPTH)')
1896 IF (
PRESENT(psnv))
THEN 1897 ALLOCATE(psnv(
SIZE(zfield)))
1899 IF (hinmodel==
'ECMWF ') psnv(:) = psnv(:) * zrho(:)
1900 IF (
SIZE(pmask)==
SIZE(psnv)) &
1901 WHERE (pmask(:)/=1.) psnv(:) =
xundef 1904 IF (
PRESENT(psnvd))
THEN 1905 ALLOCATE(psnvd(
SIZE(zfield)))
1907 IF (hinmodel/=
'ECMWF ') psnvd = psnvd / zrho(:)
1908 IF (
SIZE(pmask)==
SIZE(psnvd)) &
1909 WHERE (pmask(:)/=1.) psnvd(:) =
xundef 1916 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_SNOW_VEG_AND_DEPTH',1,zhook_handle)
1932 USE modd_snow_par
, ONLY : xansmin, xansmax
1938 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1939 INTEGER,
INTENT(IN) :: KLUOUT
1940 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1941 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1942 REAL,
DIMENSION(:),
POINTER :: PSNVA
1946 INTEGER(KIND=kindOfInt) :: IRET
1947 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
1948 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1950 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_SNOW_ALB',0,zhook_handle)
1951 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_SNOW_ALB: | Reading snow albedo' 1953 ALLOCATE(psnva(
nni))
1954 psnva(:) = 0.5 * ( xansmin + xansmax )
1955 IF (hinmodel ==
'ECMWF')
THEN 1956 CALL read_grib(hgrib,kluout,32,iret,zfield)
1957 IF (iret == 0 )
THEN 1959 ALLOCATE(psnva(
SIZE(zfield)))
1965 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_SNOW_ALB',1,zhook_handle)
1980 USE modd_snow_par
, ONLY : xrhosmax
1986 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
1987 INTEGER,
INTENT(IN) :: KLUOUT
1988 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
1989 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
1990 REAL,
DIMENSION(:),
POINTER :: PSNV
1994 INTEGER(KIND=kindOfInt) :: IRET
1995 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
1996 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1998 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_SNOW_DEN',0,zhook_handle)
1999 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_SNOW_DEN: | Reading snow density' 2003 IF (hinmodel ==
'ECMWF')
THEN 2004 CALL read_grib(hgrib,kluout,33,iret,zfield)
2005 IF (iret == 0 )
THEN 2007 ALLOCATE(psnv(
SIZE(zfield)))
2013 IF (
SIZE(pmask)==
SIZE(psnv)) &
2014 WHERE (pmask(:)/=1.) psnv =
xundef 2016 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_SNOW_DEN',1,zhook_handle)
2031 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
2032 INTEGER,
INTENT(IN) :: KLUOUT
2033 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
2034 REAL,
INTENT(IN) :: PTI
2035 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
2036 REAL,
DIMENSION(:,:),
POINTER :: PT
2037 REAL,
DIMENSION(:,:),
POINTER :: PD
2041 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
2043 REAL(KIND=JPRB) :: ZHOOK_HANDLE
2045 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_T_TEB',0,zhook_handle)
2046 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_T_TEB: | Reading temperature for buildings' 2050 ALLOCATE(pt(
SIZE(zfield),3))
2051 ALLOCATE(pd(
SIZE(zfield),3))
2063 IF (
SIZE(pmask)==
SIZE(pt,1))
THEN 2065 WHERE (pmask(:)/=1.) pt(:,jl) =
xundef 2069 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_T_TEB',1,zhook_handle)
2082 CHARACTER(LEN=*),
INTENT(IN) :: HGRIB
2083 INTEGER,
INTENT(IN) :: KLUOUT
2084 CHARACTER(LEN=6),
INTENT(IN) :: HINMODEL
2085 REAL,
INTENT(IN) :: PTI
2086 REAL,
DIMENSION(:),
INTENT(IN) :: PMASK
2087 REAL,
DIMENSION(:,:),
POINTER :: PTF
2088 REAL,
DIMENSION(:,:),
POINTER :: PD
2092 INTEGER(KIND=kindOfInt) :: IRET
2093 REAL,
DIMENSION(:),
POINTER :: ZFIELD => null()
2095 REAL(KIND=JPRB) :: ZHOOK_HANDLE
2097 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TF_TEB',0,zhook_handle)
2098 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_TF_TEB: | Reading temperature for building floor' 2103 WRITE (kluout,
'(A)')
'MODE_READ_GRIB:READ_GRIB_TF_TEB: | Reading deep soil temperature' 2107 ALLOCATE(ptf(
SIZE(zfield),3))
2108 ALLOCATE(pd(
SIZE(zfield),3))
2110 ptf(:,2) = zfield(:)
2127 IF (
lhook)
CALL dr_hook(
'MODE_READ_GRIB:READ_GRIB_TF_TEB',1,zhook_handle)
subroutine fill_pfield(KLUOUT, HROUT, KNLAYERDEEP, PDIN, PFIELDIN, PMASK, PFIELDOUT, PDOUT)
subroutine get_grib_message(KLUOUT, KLTYPE, KLEV1, KLEV2, KGRIB, KFOUND)
static const char * trim(const char *name, int *n)
character(len=28) cgrib_file
subroutine read_grib_tswater(HGRIB, KLUOUT, HINMODEL, PMASK, PTS)
subroutine read_grib_t_teb(HGRIB, KLUOUT, HINMODEL, PTI, PMASK, PT, PD)
subroutine read_grib_zs(HGRIB, KLUOUT, HINMODEL, PZS)
subroutine read_grib_tf_teb(HGRIB, KLUOUT, HINMODEL, PTI, PMASK, PTF, PD)
subroutine read_grib_tg_meteo_france(HGRIB, KLUOUT, HINMODEL, PMASK, PTG, PDT)
subroutine read_grib_zs_land(HGRIB, KLUOUT, HINMODEL, PMASK, PZSL)
subroutine ecmwf_wgi(PTG, PWG, PWGI)
subroutine read_grib_t2(HGRIB, KLUOUT, HINMODEL, PMASK, PT2)
subroutine read_grib_wgi_ecmwf(HGRIB, KLUOUT, HINMODEL, PMASK, PFIELD, PD)
subroutine read_grib_ts(HGRIB, KLUOUT, HINMODEL, PMASK, PTS)
subroutine abor1_sfx(YTEXT)
subroutine read_grib_tg_hirlam(HGRIB, KLUOUT, HINMODEL, PMASK, PTG, PDT)
subroutine read_grib_t2_land(HGRIB, KLUOUT, HINMODEL, PMASK, ZFIELD)
subroutine read_grib_snow_alb(HGRIB, KLUOUT, HINMODEL, PMASK, PSNVA)
subroutine read_grib_t(HGRIB, KLUOUT, HINMODEL, PT)
subroutine read_grib_sand_clay_meteo_france(HGRIB, KLUOUT, HINMODEL, PSAND, PCLAY, GISBA)
subroutine read_grib(HGRIB, KLUOUT, KPARAM, KRET, PFIELD, KLTYPE, KLEV1, KLEV2, KPARAM2)
subroutine read_grib_zs_sea(HGRIB, KLUOUT, HINMODEL, PMASK, PZSS)
integer(kind=kindofint) nidx
subroutine read_grib_snow_veg_and_depth(HGRIB, KLUOUT, HINMODEL, PMASK, PSNV, PSNVD)
subroutine harmonize_grib_wg_wgi_ecmwf(HGRIB, KLUOUT, HINMODEL, PMASK, PWG, PD, PWGI)
subroutine read_grib_snow_den(HGRIB, KLUOUT, HINMODEL, PMASK, PSNV)
subroutine read_grib_sst(HGRIB, KLUOUT, HINMODEL, PMASK, PSST)
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
subroutine test_iret(KLUOUT, VAL1, VAL0, KRET)
subroutine read_grib_land_mask(HGRIB, KLUOUT, HINMODEL, PMASK)
subroutine read_grib_wg_ecmwf_1(HGRIB, KLUOUT, HINMODEL, PMASK, PWG, PD)
subroutine read_grib_wg_meteo_france(HGRIB, KLUOUT, HINMODEL, PMASK, PFIELD, PD)
subroutine read_grib_tg_ecmwf(HGRIB, KLUOUT, HINMODEL, PMASK, PTG, PD)
subroutine read_grib_wg_hirlam(HGRIB, KLUOUT, HINMODEL, PMASK, PFIELD, PD)
subroutine read_grib_wgi_hirlam(HGRIB, KLUOUT, PFIELD, PD)
subroutine put_layer_depth(KLUOUT, KLEV, HROUT, KLTYPE, KLEV1, KLEV2, KNLAYERDEEP, PV4, PV, PD)
subroutine make_grib_index(HGRIB)
subroutine clear_grib_index
subroutine read_grib_wgi_meteo_france(HGRIB, KLUOUT, HINMODEL, PMASK, PFIELD, PD)
subroutine read_grib_wg_ecmwf(HGRIB, KLUOUT, HINMODEL, PMASK, PFIELD, PD)