11 pfield,pcover,pdata,hsftype,hatype,ocover,pdz,kdecade)
17 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pfield
18 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pcover
19 REAL,
DIMENSION(:),
INTENT(IN) :: pdata
20 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
22 CHARACTER(LEN=3),
INTENT(IN) :: hatype
23 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ocover
24 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: pdz
25 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
30 pfield,pcover,pdata,hsftype,hatype,ocover,pdz,kdecade)
36 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: pfield
37 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pcover
38 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdata
39 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
41 CHARACTER(LEN=3),
INTENT(IN) :: hatype
42 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ocover
43 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: pdz
44 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
49 pfield,pcover,pdata,hsftype,hatype,ocover,pdz,kdecade)
55 REAL,
DIMENSION(:),
INTENT(OUT) :: pfield
56 REAL,
DIMENSION(:,:),
INTENT(IN) :: pcover
57 REAL,
DIMENSION(:),
INTENT(IN) :: pdata
58 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
60 CHARACTER(LEN=3),
INTENT(IN) :: hatype
61 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ocover
62 REAL,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: pdz
63 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
68 pfield,pcover,pdata,hsftype,hatype,ocover,pdz,kdecade)
74 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pfield
75 REAL,
DIMENSION(:,:),
INTENT(IN) :: pcover
76 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdata
77 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
79 CHARACTER(LEN=3),
INTENT(IN) :: hatype
80 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ocover
81 REAL,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: pdz
82 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
90 TYPE (date_time),
DIMENSION(:,:),
INTENT(OUT) :: tfield
91 REAL,
DIMENSION(:,:),
INTENT(IN) :: pcover
92 TYPE (date_time),
DIMENSION(:,:),
INTENT(IN) :: tdata
93 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
95 CHARACTER(LEN=3),
INTENT(IN) :: hatype
96 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ocover
97 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
109 pfield,pcover,pdata,hsftype,hatype,ocover,pdz,kdecade)
168 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, nvt_shrb
171 USE yomhook
,ONLY : lhook, dr_hook
172 USE parkind1
,ONLY : jprb
184 REAL,
DIMENSION(:),
INTENT(OUT) :: pfield
185 REAL,
DIMENSION(:,:),
INTENT(IN) :: pcover
186 REAL,
DIMENSION(:),
INTENT(IN) :: pdata
187 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
189 CHARACTER(LEN=3),
INTENT(IN) :: hatype
190 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ocover
191 REAL,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: pdz
192 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
201 REAL,
DIMENSION(SIZE(PCOVER,1)) :: zwork, zdz
203 REAL,
DIMENSION(SIZE(PCOVER,1)) :: zcover_weight
205 REAL,
DIMENSION(SIZE(PCOVER,1)) :: zsum_cover_weight
206 REAL,
DIMENSION(SIZE(PCOVER,1)) :: zweight_max
207 REAL(KIND=JPRB) :: zhook_handle
213 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PGD_1D',0,zhook_handle)
214 IF (
SIZE(pfield)==0 .AND. lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PGD_1D',1,zhook_handle)
215 IF (
SIZE(pfield)==0)
RETURN
224 IF (present(pdz))
THEN
234 zsum_cover_weight(:)=0.
239 IF (.NOT.ocover(jj)) cycle
248 SELECT CASE (hsftype)
253 zweight=dtco%XDATA_NATURE(jj)
256 zweight=dtco%XDATA_TOWN (jj) * dtco%XDATA_GARDEN(jj)
259 zweight=dtco%XDATA_TOWN (jj)
262 zweight=dtco%XDATA_WATER (jj)
265 zweight=dtco%XDATA_SEA (jj)
268 zweight=dtco%XDATA_TOWN (jj) * dtco%XDATA_BLD(jj)
271 zweight=dtco%XDATA_TOWN (jj) * dtco%XDATA_BLD(jj) &
272 * xdata_bld_height(jj)
275 zweight=dtco%XDATA_TOWN (jj) * ( 1. - dtco%XDATA_BLD(jj) )
279 zweight=dtco%XDATA_NATURE(jj) * ( dtco%XDATA_VEGTYPE(jj,nvt_tebd) &
280 + dtco%XDATA_VEGTYPE(jj,nvt_trbe) &
281 + dtco%XDATA_VEGTYPE(jj,nvt_trbd) &
282 + dtco%XDATA_VEGTYPE(jj,nvt_tebe) &
283 + dtco%XDATA_VEGTYPE(jj,nvt_tene) &
284 + dtco%XDATA_VEGTYPE(jj,nvt_bobd) &
285 + dtco%XDATA_VEGTYPE(jj,nvt_bond) &
286 + dtco%XDATA_VEGTYPE(jj,nvt_shrb) &
287 + dtco%XDATA_VEGTYPE(jj,nvt_bone) )
291 zweight=dtco%XDATA_TOWN(jj) * dtco%XDATA_GARDEN(jj) &
292 * ( dtco%XDATA_VEGTYPE(jj,nvt_tebd) &
293 + dtco%XDATA_VEGTYPE(jj,nvt_trbe) &
294 + dtco%XDATA_VEGTYPE(jj,nvt_trbd) &
295 + dtco%XDATA_VEGTYPE(jj,nvt_tebe) &
296 + dtco%XDATA_VEGTYPE(jj,nvt_tene) &
297 + dtco%XDATA_VEGTYPE(jj,nvt_bobd) &
298 + dtco%XDATA_VEGTYPE(jj,nvt_bond) &
299 + dtco%XDATA_VEGTYPE(jj,nvt_shrb) &
300 + dtco%XDATA_VEGTYPE(jj,nvt_bone) )
303 CALL
abor1_sfx(
'AV_PGD_1D: WEIGHTING FUNCTION NOT ALLOWED '//hsftype)
314 zcover_weight(:) = pcover(:,jcover) * zweight
316 zsum_cover_weight(:) = zsum_cover_weight(:) + zcover_weight(:)
332 zwork(:) = zwork(:) + zdata * zcover_weight(:)
341 zwork(:)= zwork(:) + 1./zdata * zcover_weight(:)
351 zwork(:)= zwork(:) + 1./(log(zdz(:)/zdata))**2 * zcover_weight(:)
360 WHERE(zcover_weight(:)>zweight_max(:))
361 zweight_max(:) = zcover_weight(:)
368 CALL
abor1_sfx(
'AV_PGD_1D: (1) AVERAGING TYPE NOT ALLOWED : "'//hatype//
'"')
391 WHERE ( zsum_cover_weight(:) >0. )
392 pfield(:) = zwork(:) / zsum_cover_weight(:)
402 WHERE ( zsum_cover_weight(:) >0. )
403 pfield(:) = zsum_cover_weight(:) / zwork(:)
414 WHERE ( zsum_cover_weight(:) >0. )
415 pfield(:) = zdz(:) * exp( - sqrt(zsum_cover_weight(:)/zwork(:)) )
425 WHERE ( zsum_cover_weight(:) >0. )
432 CALL
abor1_sfx(
'AV_PGD_1D: (2) AVERAGING TYPE NOT ALLOWED')
435 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PGD_1D',1,zhook_handle)
446 pfield,pcover,pdata,hsftype,hatype,ocover,pdz,kdecade)
504 USE modd_data_cover_par, ONLY : nvt_tebd, nvt_bone, nvt_trbe, nvegtype, xcdref, nvt_trbd, &
505 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, nvt_shrb
507 USE modi_vegtype_to_patch
511 USE yomhook
,ONLY : lhook, dr_hook
512 USE parkind1
,ONLY : jprb
524 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pfield
525 REAL,
DIMENSION(:,:),
INTENT(IN) :: pcover
526 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdata
527 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
529 CHARACTER(LEN=3),
INTENT(IN) :: hatype
530 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ocover
531 REAL,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: pdz
532 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
545 INTEGER :: jj, ji, jk
547 REAL :: zcover_weight
549 REAL,
DIMENSION(SIZE(PCOVER,1)) :: zval
551 REAL,
DIMENSION(SIZE(PCOVER,2),NVEGTYPE) :: zweight
553 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PFIELD,2)) :: zsum_cover_weight_patch
555 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PFIELD,2)) :: zwork
556 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PFIELD,2)) :: zdz
558 INTEGER,
DIMENSION(SIZE(PCOVER,1),SIZE(PFIELD,2)) :: imask
559 INTEGER,
DIMENSION(SIZE(PFIELD,2)) :: jcount
560 INTEGER :: patch_list(nvegtype)
561 REAL(KIND=JPRB) :: zhook_handle
569 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD_1D_1',0,zhook_handle)
570 IF (
SIZE(pfield)==0 .AND. lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD_1D',1,zhook_handle)
571 IF (
SIZE(pfield)==0)
RETURN
579 ipatch=
SIZE(pfield,2)
581 IF (present(pdz))
THEN
593 zsum_cover_weight_patch(:,:) = 0.
595 DO jvegtype=1,nvegtype
599 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD_1D_1',1,zhook_handle)
600 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD_1D_2',0,zhook_handle)
602 IF (.NOT.
ASSOCIATED(dtco%XDATA_WEIGHT))
THEN
604 ALLOCATE(dtco%XDATA_WEIGHT(
SIZE(pcover,2),nvegtype,12))
605 dtco%XDATA_WEIGHT(:,:,:) = 0.
610 IF (.NOT.ocover(jj)) cycle
614 DO jvegtype=1,nvegtype
616 IF (dtco%XDATA_VEGTYPE(jj,jvegtype)==0.) cycle
618 dtco%XDATA_WEIGHT(jcover,jvegtype,1)= dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,jvegtype)
620 dtco%XDATA_WEIGHT(jcover,jvegtype,2)= dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,jvegtype)
622 dtco%XDATA_WEIGHT(jcover,jvegtype,3)= dtco%XDATA_WEIGHT(jcover,jvegtype,1) * xdata_veg(jj,kdecade,jvegtype)
624 dtco%XDATA_WEIGHT(jcover,jvegtype,4)= dtco%XDATA_WEIGHT(jcover,jvegtype,1) * (1.-xdata_veg(jj,kdecade,jvegtype))
626 dtco%XDATA_WEIGHT(jcover,jvegtype,5)= dtco%XDATA_WEIGHT(jcover,jvegtype,2) * xdata_veg(jj,kdecade,jvegtype)
628 dtco%XDATA_WEIGHT(jcover,jvegtype,6)= dtco%XDATA_WEIGHT(jcover,jvegtype,2) * (1.-xdata_veg(jj,kdecade,jvegtype))
629 IF ( sum(xdata_lai(jj,:,jvegtype)) .GT. 0.0)
THEN
631 dtco%XDATA_WEIGHT(jcover,jvegtype,7)= dtco%XDATA_WEIGHT(jcover,jvegtype,1)
633 dtco%XDATA_WEIGHT(jcover,jvegtype,8)= dtco%XDATA_WEIGHT(jcover,jvegtype,2)
636 dtco%XDATA_WEIGHT(jcover,jvegtype,9)= dtco%XDATA_WEIGHT(jcover,jvegtype,1) * xdata_lai(jj,kdecade,jvegtype)
638 dtco%XDATA_WEIGHT(jcover,jvegtype,10)= dtco%XDATA_WEIGHT(jcover,jvegtype,2) * xdata_lai(jj,kdecade,jvegtype)
644 IF (jvegtype==nvt_tebd)
THEN
645 dtco%XDATA_WEIGHT(jcover,nvt_tebd,11)= dtco%XDATA_WEIGHT(jcover,nvt_tebd,1)
646 dtco%XDATA_WEIGHT(jcover,nvt_tebd,12)= dtco%XDATA_WEIGHT(jcover,nvt_tebd,2)
648 IF (jvegtype==nvt_bone)
THEN
649 dtco%XDATA_WEIGHT(jcover,nvt_bone,11)= dtco%XDATA_WEIGHT(jcover,nvt_bone,1)
650 dtco%XDATA_WEIGHT(jcover,nvt_bone,12)= dtco%XDATA_WEIGHT(jcover,nvt_bone,2)
652 IF (jvegtype==nvt_trbe)
THEN
653 dtco%XDATA_WEIGHT(jcover,nvt_trbe,11)= dtco%XDATA_WEIGHT(jcover,nvt_trbe,1)
654 dtco%XDATA_WEIGHT(jcover,nvt_trbe,12)= dtco%XDATA_WEIGHT(jcover,nvt_trbe,2)
656 IF (jvegtype==nvt_trbd)
THEN
657 dtco%XDATA_WEIGHT(jcover,nvt_trbd,11)= dtco%XDATA_WEIGHT(jcover,nvt_trbd,1)
658 dtco%XDATA_WEIGHT(jcover,nvt_trbd,12)= dtco%XDATA_WEIGHT(jcover,nvt_trbd,2)
660 IF (jvegtype==nvt_tebe)
THEN
661 dtco%XDATA_WEIGHT(jcover,nvt_tebe,11)= dtco%XDATA_WEIGHT(jcover,nvt_tebe,1)
662 dtco%XDATA_WEIGHT(jcover,nvt_tebe,12)= dtco%XDATA_WEIGHT(jcover,nvt_tebe,2)
664 IF (jvegtype==nvt_tene)
THEN
665 dtco%XDATA_WEIGHT(jcover,nvt_tene,11)= dtco%XDATA_WEIGHT(jcover,nvt_tene,1)
666 dtco%XDATA_WEIGHT(jcover,nvt_tene,12)= dtco%XDATA_WEIGHT(jcover,nvt_tene,2)
668 IF (jvegtype==nvt_bobd)
THEN
669 dtco%XDATA_WEIGHT(jcover,nvt_bobd,11)= dtco%XDATA_WEIGHT(jcover,nvt_bobd,1)
670 dtco%XDATA_WEIGHT(jcover,nvt_bobd,12)= dtco%XDATA_WEIGHT(jcover,nvt_bobd,2)
672 IF (jvegtype==nvt_bond)
THEN
673 dtco%XDATA_WEIGHT(jcover,nvt_bond,11)= dtco%XDATA_WEIGHT(jcover,nvt_bond,1)
674 dtco%XDATA_WEIGHT(jcover,nvt_bond,12)= dtco%XDATA_WEIGHT(jcover,nvt_bond,2)
676 IF (jvegtype==nvt_shrb)
THEN
677 dtco%XDATA_WEIGHT(jcover,nvt_shrb,11)= dtco%XDATA_WEIGHT(jcover,nvt_shrb,1)
678 dtco%XDATA_WEIGHT(jcover,nvt_shrb,12)= dtco%XDATA_WEIGHT(jcover,nvt_shrb,2)
687 SELECT CASE (hsftype)
689 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,1)
691 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,2)
693 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,3)
695 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,4)
697 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,5)
699 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,6)
701 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,7)
703 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,8)
705 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,9)
707 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,10)
709 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,11)
711 zweight(:,:) = dtco%XDATA_WEIGHT(:,:,12)
713 CALL
abor1_sfx(
'AV_PATCH_PGD_1D: WEIGHTING FUNCTION FOR VEGTYPE NOT ALLOWED')
716 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD_1D_2',1,zhook_handle)
717 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD_1D_3',0,zhook_handle)
733 DO jvegtype=1,nvegtype
735 jpatch= patch_list(jvegtype)
737 IF (zweight(jcover,jvegtype)/=0.)
THEN
739 IF (hatype==
'ARI')
THEN
740 zval(:) = pdata(jj,jvegtype)
741 ELSEIF (hatype==
'INV')
THEN
742 zval(:) = 1. / pdata(jj,jvegtype)
743 ELSEIF (hatype==
'CDN')
THEN
744 DO ji=1,
SIZE(pcover,1)
745 zval(ji) = 1./(log(zdz(ji,jpatch)/pdata(jj,jvegtype)))**2
748 CALL
abor1_sfx(
'AV_PATCH_PGD_1D: (1) AVERAGING TYPE NOT ALLOWED')
752 DO ji=1,
SIZE(pcover,1)
753 IF (pcover(ji,jcover)/=0.)
THEN
754 zcover_weight = pcover(ji,jcover) * zweight(jcover,jvegtype)
755 zsum_cover_weight_patch(ji,jpatch) = zsum_cover_weight_patch(ji,jpatch) + zcover_weight
756 zwork(ji,jpatch) = zwork(ji,jpatch) + zval(ji) * zcover_weight
769 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD_1D_3',1,zhook_handle)
770 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD_1D_4',0,zhook_handle)
779 DO ji=1,
SIZE(pcover,1)
780 IF ( zsum_cover_weight_patch(ji,jpatch) >0.)
THEN
781 jcount(jpatch)=jcount(jpatch)+1
782 imask(jcount(jpatch),jpatch)=ji
804 DO jj=1,jcount(jpatch)
805 ji = imask(jj,jpatch)
806 pfield(ji,jpatch) = zwork(ji,jpatch) / zsum_cover_weight_patch(ji,jpatch)
819 DO jj=1,jcount(jpatch)
820 ji = imask(jj,jpatch)
821 pfield(ji,jpatch) = zsum_cover_weight_patch(ji,jpatch) / zwork(ji,jpatch)
834 DO jj=1,jcount(jpatch)
835 ji = imask(jj,jpatch)
836 pfield(ji,jpatch) = zdz(ji,jpatch) * exp( - sqrt(zsum_cover_weight_patch(ji,jpatch)/zwork(ji,jpatch)) )
843 CALL
abor1_sfx(
'AV_PATCH_PGD_1D: (2) AVERAGING TYPE NOT ALLOWED')
847 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD_1D_4',1,zhook_handle)
856 pfield,pcover,pdata,hsftype,hatype,ocover,pdz,kdecade)
914 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, nvt_shrb
917 USE yomhook
,ONLY : lhook, dr_hook
918 USE parkind1
,ONLY : jprb
930 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pfield
931 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pcover
932 REAL,
DIMENSION(:),
INTENT(IN) :: pdata
933 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
935 CHARACTER(LEN=3),
INTENT(IN) :: hatype
936 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ocover
937 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: pdz
938 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
947 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PCOVER,2)) :: zwork, zdz
949 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PCOVER,2)) :: zcover_weight
951 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PCOVER,2)) :: zsum_cover_weight
952 REAL(KIND=JPRB) :: zhook_handle
958 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PGD_2D',0,zhook_handle)
959 IF (
SIZE(pfield)==0 .AND. lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PGD_2D',1,zhook_handle)
960 IF (
SIZE(pfield)==0)
RETURN
969 IF (present(pdz))
THEN
978 zsum_cover_weight(:,:)=0.
983 IF (.NOT.ocover(jj)) cycle
992 SELECT CASE (hsftype)
997 zweight=dtco%XDATA_NATURE(jj)
1000 zweight=dtco%XDATA_TOWN (jj) * dtco%XDATA_GARDEN(jj)
1003 zweight=dtco%XDATA_TOWN (jj)
1006 zweight=dtco%XDATA_WATER (jj)
1009 zweight=dtco%XDATA_SEA (jj)
1012 zweight=dtco%XDATA_TOWN (jj) * dtco%XDATA_BLD(jj)
1015 zweight=dtco%XDATA_TOWN (jj) * ( 1. - dtco%XDATA_BLD(jj) )
1019 zweight=dtco%XDATA_NATURE(jj) * ( dtco%XDATA_VEGTYPE(jj,nvt_tebd) &
1020 + dtco%XDATA_VEGTYPE(jj,nvt_trbe) &
1021 + dtco%XDATA_VEGTYPE(jj,nvt_trbd) &
1022 + dtco%XDATA_VEGTYPE(jj,nvt_tebe) &
1023 + dtco%XDATA_VEGTYPE(jj,nvt_tene) &
1024 + dtco%XDATA_VEGTYPE(jj,nvt_bobd) &
1025 + dtco%XDATA_VEGTYPE(jj,nvt_bond) &
1026 + dtco%XDATA_VEGTYPE(jj,nvt_shrb) &
1027 + dtco%XDATA_VEGTYPE(jj,nvt_bone) )
1031 zweight=dtco%XDATA_TOWN (jj) * dtco%XDATA_GARDEN(jj) &
1032 * ( dtco%XDATA_VEGTYPE(jj,nvt_tebd) &
1033 + dtco%XDATA_VEGTYPE(jj,nvt_trbe) &
1034 + dtco%XDATA_VEGTYPE(jj,nvt_trbd) &
1035 + dtco%XDATA_VEGTYPE(jj,nvt_tebe) &
1036 + dtco%XDATA_VEGTYPE(jj,nvt_tene) &
1037 + dtco%XDATA_VEGTYPE(jj,nvt_bobd) &
1038 + dtco%XDATA_VEGTYPE(jj,nvt_bond) &
1039 + dtco%XDATA_VEGTYPE(jj,nvt_shrb) &
1040 + dtco%XDATA_VEGTYPE(jj,nvt_bone) )
1043 CALL
abor1_sfx(
'AV_PGD: WEIGHTING FUNCTION NOT ALLOWED')
1054 zcover_weight(:,:) = pcover(:,:,jcover) * zweight
1056 zsum_cover_weight(:,:) = zsum_cover_weight(:,:) + zcover_weight(:,:)
1063 SELECT CASE (hatype)
1072 zwork(:,:) = zwork(:,:) + zdata * zcover_weight(:,:)
1081 zwork(:,:)= zwork(:,:) + 1./zdata * zcover_weight(:,:)
1091 zwork(:,:)= zwork(:,:) + 1./(log(zdz(:,:)/zdata))**2 * zcover_weight(:,:)
1096 CALL
abor1_sfx(
'AV_PGD: (1) AVERAGING TYPE NOT ALLOWED')
1110 SELECT CASE (hatype)
1119 WHERE ( zsum_cover_weight(:,:) >0. )
1120 pfield(:,:) = zwork(:,:) / zsum_cover_weight(:,:)
1130 WHERE ( zsum_cover_weight(:,:) >0. )
1131 pfield(:,:) = zsum_cover_weight(:,:) / zwork(:,:)
1142 WHERE ( zsum_cover_weight(:,:) >0. )
1143 pfield(:,:) = zdz(:,:) * exp( - sqrt(zsum_cover_weight(:,:)/zwork(:,:)) )
1149 CALL
abor1_sfx(
'AV_PGD_2D: (2) AVERAGING TYPE NOT ALLOWED')
1152 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PGD_2D',1,zhook_handle)
1163 pfield,pcover,pdata,hsftype,hatype,ocover,pdz,kdecade)
1220 USE modd_data_cover_par, ONLY : nvt_tebd, nvt_bone, nvt_trbe, nvegtype, xcdref, nvt_trbd, &
1221 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, nvt_shrb
1223 USE modi_vegtype_to_patch
1227 USE yomhook
,ONLY : lhook, dr_hook
1228 USE parkind1
,ONLY : jprb
1240 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: pfield
1241 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pcover
1242 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdata
1243 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
1245 CHARACTER(LEN=3),
INTENT(IN) :: hatype
1246 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ocover
1247 REAL,
DIMENSION(:,:),
INTENT(IN),
OPTIONAL :: pdz
1248 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
1263 REAL,
DIMENSION(NVEGTYPE) :: zweight
1264 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PCOVER,2),NVEGTYPE) :: zcover_weight
1266 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PCOVER,2),SIZE(PFIELD,3)):: zcover_weight_patch
1267 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PCOVER,2),SIZE(PFIELD,3)):: zsum_cover_weight_patch
1268 REAL,
DIMENSION(NVEGTYPE) :: zdata
1270 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PCOVER,2),SIZE(PFIELD,3)):: zwork
1271 REAL,
DIMENSION(SIZE(PCOVER,1),SIZE(PCOVER,2),SIZE(PFIELD,3)):: zdz
1272 REAL(KIND=JPRB) :: zhook_handle
1278 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD',0,zhook_handle)
1279 IF (
SIZE(pfield)==0 .AND. lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD',1,zhook_handle)
1280 IF (
SIZE(pfield)==0)
RETURN
1288 ipatch=
SIZE(pfield,3)
1292 IF (present(pdz))
THEN
1294 zdz(:,:,jpatch)=pdz(:,:)
1300 pfield(:,:,:)=xundef
1303 zsum_cover_weight_patch(:,:,:)=0.
1309 IF (.NOT.ocover(jj)) cycle
1318 SELECT CASE (hsftype)
1321 DO jvegtype=1,nvegtype
1322 zweight(jvegtype)=dtco%XDATA_NATURE(jj)*dtco%XDATA_VEGTYPE(jj,jvegtype)
1326 DO jvegtype=1,nvegtype
1327 zweight(jvegtype)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj)*dtco%XDATA_VEGTYPE(jj,jvegtype)
1331 DO jvegtype=1,nvegtype
1332 zweight(jvegtype)=dtco%XDATA_NATURE(jj)*dtco%XDATA_VEGTYPE(jj,jvegtype)*&
1333 xdata_veg(jj,kdecade,jvegtype)
1337 DO jvegtype=1,nvegtype
1338 zweight(jvegtype)=dtco%XDATA_NATURE(jj)*dtco%XDATA_VEGTYPE(jj,jvegtype)*&
1339 (1.-xdata_veg(jj,kdecade,jvegtype))
1343 DO jvegtype=1,nvegtype
1344 zweight(jvegtype)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj)*dtco%XDATA_VEGTYPE(jj,jvegtype)*&
1345 xdata_veg(jj,kdecade,jvegtype)
1349 DO jvegtype=1,nvegtype
1350 zweight(jvegtype)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj)*dtco%XDATA_VEGTYPE(jj,jvegtype)*&
1351 (1.-xdata_veg(jj,kdecade,jvegtype))
1356 DO jvegtype=1,nvegtype
1357 IF ( sum(xdata_lai(jj,:,jvegtype)).GT.0.) &
1358 zweight(jvegtype)=dtco%XDATA_NATURE(jj)*dtco%XDATA_VEGTYPE(jj,jvegtype)
1363 DO jvegtype=1,nvegtype
1364 IF ( sum(xdata_lai(jj,:,jvegtype)).GT.0.) &
1365 zweight(jvegtype)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj)*dtco%XDATA_VEGTYPE(jj,jvegtype)
1369 DO jvegtype=1,nvegtype
1370 zweight(jvegtype)=dtco%XDATA_NATURE(jj)*dtco%XDATA_VEGTYPE(jj,jvegtype)*&
1371 xdata_lai(jj,kdecade,jvegtype)
1375 DO jvegtype=1,nvegtype
1376 zweight(jvegtype)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj)*dtco%XDATA_VEGTYPE(jj,jvegtype)*&
1377 xdata_lai(jj,kdecade,jvegtype)
1382 IF (dtco%XDATA_VEGTYPE(jj,nvt_tebd)>0.)
THEN
1383 zweight(nvt_tebd)=dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,nvt_tebd)
1385 IF (dtco%XDATA_VEGTYPE(jj,nvt_bone)>0.)
THEN
1386 zweight(nvt_bone)=dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,nvt_bone)
1388 IF (dtco%XDATA_VEGTYPE(jj,nvt_trbe)>0.)
THEN
1389 zweight(nvt_trbe)=dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,nvt_trbe)
1391 IF (dtco%XDATA_VEGTYPE(jj,nvt_trbd)>0.)
THEN
1392 zweight(nvt_trbd)=dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,nvt_trbd)
1394 IF (dtco%XDATA_VEGTYPE(jj,nvt_tebe)>0.)
THEN
1395 zweight(nvt_tebe)=dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,nvt_tebe)
1397 IF (dtco%XDATA_VEGTYPE(jj,nvt_tene)>0.)
THEN
1398 zweight(nvt_tene)=dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,nvt_tene)
1400 IF (dtco%XDATA_VEGTYPE(jj,nvt_bobd)>0.)
THEN
1401 zweight(nvt_bobd)=dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,nvt_bobd)
1403 IF (dtco%XDATA_VEGTYPE(jj,nvt_bond)>0.)
THEN
1404 zweight(nvt_bond)=dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,nvt_bond)
1406 IF (dtco%XDATA_VEGTYPE(jj,nvt_shrb)>0.)
THEN
1407 zweight(nvt_shrb)=dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,nvt_shrb)
1412 IF (dtco%XDATA_VEGTYPE(jj,nvt_tebd)>0.)
THEN
1413 zweight(nvt_tebd)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,nvt_tebd)
1415 IF (dtco%XDATA_VEGTYPE(jj,nvt_bone)>0.)
THEN
1416 zweight(nvt_bone)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,nvt_bone)
1418 IF (dtco%XDATA_VEGTYPE(jj,nvt_trbe)>0.)
THEN
1419 zweight(nvt_trbe)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,nvt_trbe)
1421 IF (dtco%XDATA_VEGTYPE(jj,nvt_trbd)>0.)
THEN
1422 zweight(nvt_trbd)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,nvt_trbd)
1424 IF (dtco%XDATA_VEGTYPE(jj,nvt_tebe)>0.)
THEN
1425 zweight(nvt_tebe)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,nvt_tebe)
1427 IF (dtco%XDATA_VEGTYPE(jj,nvt_tene)>0.)
THEN
1428 zweight(nvt_tene)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,nvt_tene)
1430 IF (dtco%XDATA_VEGTYPE(jj,nvt_bobd)>0.)
THEN
1431 zweight(nvt_bobd)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,nvt_bobd)
1433 IF (dtco%XDATA_VEGTYPE(jj,nvt_bond)>0.)
THEN
1434 zweight(nvt_bond)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,nvt_bond)
1436 IF (dtco%XDATA_VEGTYPE(jj,nvt_shrb)>0.)
THEN
1437 zweight(nvt_shrb)=dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,nvt_shrb)
1441 CALL
abor1_sfx(
'AV_PATCH_PGD: WEIGHTING FUNCTION FOR VEGTYPE NOT ALLOWED')
1452 zcover_weight(:,:,:)=0.
1453 zcover_weight_patch(:,:,:)=0.
1455 DO jvegtype=1,nvegtype
1456 zcover_weight(:,:,jvegtype) = zcover_weight(:,:,jvegtype) +&
1457 pcover(:,:,jcover) * zweight(jvegtype)
1461 zcover_weight_patch(:,:,jpatch) = zcover_weight_patch(:,:,jpatch)+ &
1462 pcover(:,:,jcover) * zweight(jvegtype)
1466 zsum_cover_weight_patch(:,:,:) = zsum_cover_weight_patch(:,:,:) + zcover_weight_patch(:,:,:)
1469 zdata(:) = pdata(jj,:)
1475 SELECT CASE (hatype)
1484 DO jvegtype=1,nvegtype
1486 zwork(:,:,jpatch) = zwork(:,:,jpatch) + zdata(jvegtype) * zcover_weight(:,:,jvegtype)
1496 DO jvegtype=1,nvegtype
1498 zwork(:,:,jpatch)= zwork(:,:,jpatch) + 1./ zdata(jvegtype)* zcover_weight(:,:,jvegtype)
1509 DO jvegtype=1,nvegtype
1511 zwork(:,:,jpatch)= zwork(:,:,jpatch) + 1./(log(zdz(:,:,jpatch)/ zdata(jvegtype)))**2 &
1512 * zcover_weight(:,:,jvegtype)
1518 CALL
abor1_sfx(
'AV_PATCH_PGD: (1) AVERAGING TYPE NOT ALLOWED')
1531 SELECT CASE (hatype)
1540 WHERE ( zsum_cover_weight_patch(:,:,:) >0. )
1541 pfield(:,:,:) = zwork(:,:,:) / zsum_cover_weight_patch(:,:,:)
1551 WHERE ( zsum_cover_weight_patch(:,:,:) >0. )
1552 pfield(:,:,:) = zsum_cover_weight_patch(:,:,:) / zwork(:,:,:)
1562 WHERE ( zsum_cover_weight_patch(:,:,:) >0. )
1563 pfield(:,:,:) = zdz(:,:,:) * exp( - sqrt(zsum_cover_weight_patch(:,:,:)/zwork(:,:,:)) )
1569 CALL
abor1_sfx(
'AV_PATCH_PGD: (2) AVERAGING TYPE NOT ALLOWED')
1572 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:AV_PATCH_PGD',1,zhook_handle)
1617 USE modi_vegtype_to_patch
1619 USE yomhook
,ONLY : lhook, dr_hook
1620 USE parkind1
,ONLY : jprb
1627 TYPE (date_time),
DIMENSION(:,:),
INTENT(OUT) :: tfield
1628 REAL,
DIMENSION(:,:),
INTENT(IN) :: pcover
1629 TYPE (date_time),
DIMENSION(:,:),
INTENT(IN) :: tdata
1630 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
1632 CHARACTER(LEN=3),
INTENT(IN) :: hatype
1633 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ocover
1634 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
1645 INTEGER,
DIMENSION(SIZE(PCOVER,2),NVEGTYPE) :: idata_doy
1646 INTEGER,
DIMENSION(SIZE(PCOVER,1)) :: idoy
1647 REAL,
DIMENSION(365) :: zcount
1648 INTEGER :: jp, imonth, iday
1649 INTEGER :: ipatch, jpatch
1650 REAL(KIND=JPRB) :: zhook_handle
1656 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:MAJOR_PATCH_PGD_1D',0,zhook_handle)
1657 IF (
SIZE(tfield)==0 .AND. lhook) CALL dr_hook(
'MODI_AV_PGD:MAJOR_PATCH_PGD_1D',1,zhook_handle)
1658 IF (
SIZE(tfield)==0)
RETURN
1665 ipatch=
SIZE(tfield,2)
1667 tfield(:,:)%TDATE%YEAR = nundef
1668 tfield(:,:)%TDATE%MONTH = nundef
1669 tfield(:,:)%TDATE%DAY = nundef
1670 tfield(:,:)%TIME = xundef
1676 DO jp = 1,
SIZE(pcover,1)
1682 DO jvegtype=1,nvegtype
1686 DO jcover = 1,
SIZE(pcover,2)
1688 IF (idata_doy(jcover,jvegtype) /= nundef .AND. pcover(jp,jcover)/=0.)
THEN
1690 zcount(idata_doy(jcover,jvegtype)) = zcount(idata_doy(jcover,jvegtype)) + pcover(jp,jcover)
1701 IF (any(zcount(:)/=0.)) idoy(jp) = maxloc(zcount,1)
1703 CALL
doy2date(idoy(jp),imonth,iday)
1705 tfield(jp,jpatch)%TDATE%MONTH = imonth
1706 tfield(jp,jpatch)%TDATE%DAY = iday
1707 IF (imonth/=nundef) tfield(jp,jpatch)%TIME = 0.
1715 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:MAJOR_PATCH_PGD_1D',1,zhook_handle)
1719 TYPE (date_time),
DIMENSION(:,:),
INTENT(IN) :: tpdata
1720 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kdoy
1721 INTEGER,
DIMENSION(SIZE(OCOVER),NVEGTYPE) :: imonth, iday
1722 INTEGER,
PARAMETER,
DIMENSION(12) :: tab=(/1,32,60,91,121,152,182,213,244,274,305,335/)
1723 INTEGER :: jcover, jj
1724 REAL(KIND=JPRB) :: zhook_handle
1726 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:DATE2DOY',0,zhook_handle)
1728 imonth(:,:) = tpdata(:,:)%TDATE%MONTH
1729 iday(:,:) = tpdata(:,:)%TDATE%DAY
1734 DO jj = 1,
SIZE(ocover)
1735 IF (.NOT.ocover(jj)) cycle
1737 DO jvegtype = 1, nvegtype
1738 IF (imonth(jj,jvegtype)/=nundef .AND. iday(jj,jvegtype) /= nundef)
THEN
1739 kdoy(jcover,jvegtype) = tab(imonth(jj,jvegtype)) + iday(jj,jvegtype) - 1
1743 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:DATE2DOY',1,zhook_handle)
1748 INTEGER,
INTENT(IN) :: kdoy
1749 INTEGER,
INTENT(OUT) :: kmonth, kday
1751 INTEGER,
PARAMETER,
DIMENSION(12) :: ztab=(/31.,59.,90.,120.,151.,181.,212.,243.,273.,304.,334.,365./)
1753 REAL(KIND=JPRB) :: zhook_handle
1755 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:DOY2DATE',0,zhook_handle)
1760 zwork(1) =
REAL(KDOY) / ztab(1)
1761 IF ( int(zwork(1))==0 .AND. zwork(1)/=0.)
THEN
1767 zwork(j) =
REAL(KDOY) / ztab(j)
1768 IF ( int(zwork(j))==0 .AND. int(zwork(j-1))==1 )
THEN
1770 kday = kdoy - int(ztab(j-1))
1773 IF (lhook) CALL dr_hook(
'MODI_AV_PGD:DOY2DATE',1,zhook_handle)
subroutine av_pgd_2d(DTCO, PFIELD, PCOVER, PDATA, HSFTYPE, HATYPE, OCOVER, PDZ, KDECADE)
subroutine major_patch_pgd_1d(TFIELD, PCOVER, TDATA, HSFTYPE, HATYPE, OCOVER, KDECADE)
subroutine av_pgd_1d(DTCO, PFIELD, PCOVER, PDATA, HSFTYPE, HATYPE, OCOVER, PDZ, KDECADE)
subroutine date2doy(TPDATA, KDOY)
integer function vegtype_to_patch(IVEGTYPE, INPATCH)
subroutine abor1_sfx(YTEXT)
subroutine doy2date(KDOY, KMONTH, KDAY)
subroutine av_patch_pgd_1d(DTCO, PFIELD, PCOVER, PDATA, HSFTYPE, HATYPE, OCOVER, PDZ, KDECADE)
subroutine av_patch_pgd(DTCO, PFIELD, PCOVER, PDATA, HSFTYPE, HATYPE, OCOVER, PDZ, KDECADE)