7 pfield,pvegtype,pdata,hsftype,hatype,pdz,kdecade)
64 nvt_tene, nvt_bobd, nvt_bond, nvt_shrb, nvegtype, &
68 USE modi_vegtype_to_patch
72 USE yomhook
,ONLY : lhook, dr_hook
73 USE parkind1
,ONLY : jprb
85 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pfield
86 REAL,
DIMENSION(:,:),
INTENT(IN) :: pvegtype
87 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdata
88 CHARACTER(LEN=3),
INTENT(IN) :: hsftype
90 CHARACTER(LEN=3),
INTENT(IN) :: hatype
91 REAL,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: pdz
92 INTEGER,
INTENT(IN),
OPTIONAL :: kdecade
108 REAL,
DIMENSION(SIZE(PFIELD,1),NVEGTYPE) :: zweight
110 REAL,
DIMENSION(SIZE(PFIELD,1),SIZE(PFIELD,2)) :: zsum_weight_patch
112 REAL,
DIMENSION(SIZE(PFIELD,1),SIZE(PFIELD,2)) :: zwork
113 REAL,
DIMENSION(SIZE(PFIELD,1),SIZE(PFIELD,2)) :: zdz
115 INTEGER,
DIMENSION(SIZE(PFIELD,1),SIZE(PFIELD,2)) :: nmask
116 INTEGER,
DIMENSION(SIZE(PFIELD,2)) :: jcount
117 INTEGER :: patch_list(nvegtype)
118 REAL(KIND=JPRB) :: zhook_handle
125 IF (lhook) CALL dr_hook(
'AV_PGD_PARAM',0,zhook_handle)
126 IF (
SIZE(pfield)==0 .AND. lhook) CALL dr_hook(
'AV_PGD_PARAM',1,zhook_handle)
127 IF (
SIZE(pfield)==0)
RETURN
134 ipatch=
SIZE(pfield,2)
137 IF (present(pdz))
THEN
149 zsum_weight_patch(:,:)=0.
151 DO jvegtype=1,nvegtype
161 SELECT CASE (hsftype)
164 DO jvegtype=1,nvegtype
165 zweight(:,jvegtype)=pvegtype(:,jvegtype)
169 DO jvegtype=1,nvegtype
170 zweight(:,jvegtype)=pvegtype(:,jvegtype)*dti%XPAR_VEG(:,kdecade,jvegtype)
174 DO jvegtype=1,nvegtype
175 zweight(:,jvegtype)=pvegtype(:,jvegtype)*(1.-dti%XPAR_VEG(:,kdecade,jvegtype))
179 DO jvegtype=1,nvegtype
180 WHERE ( sum(dti%XPAR_LAI(:,:,jvegtype),2) .GT. 0.0) &
181 zweight(:,jvegtype)=pvegtype(:,jvegtype)
185 DO jvegtype=4,nvegtype
186 zweight(:,jvegtype)=pvegtype(:,jvegtype)*dti%XPAR_LAI(:,kdecade,jvegtype)
191 WHERE (pvegtype(:,nvt_tebd)>0.)
192 zweight(:,nvt_tebd)=pvegtype(:,nvt_tebd)
194 WHERE (pvegtype(:,nvt_bone)>0.)
195 zweight(:,nvt_bone)=pvegtype(:,nvt_bone)
197 WHERE (pvegtype(:,nvt_trbe)>0.)
198 zweight(:,nvt_trbe)=pvegtype(:,nvt_trbe)
201 WHERE (pvegtype(:,nvt_trbd)>0.)
202 zweight(:,nvt_trbd)=pvegtype(:,nvt_trbd)
204 WHERE (pvegtype(:,nvt_tebe)>0.)
205 zweight(:,nvt_tebe)=pvegtype(:,nvt_tebe)
207 WHERE (pvegtype(:,nvt_tene)>0.)
208 zweight(:,nvt_tene)=pvegtype(:,nvt_tene)
210 WHERE (pvegtype(:,nvt_bobd)>0.)
211 zweight(:,nvt_bobd)=pvegtype(:,nvt_bobd)
213 WHERE (pvegtype(:,nvt_bond)>0.)
214 zweight(:,nvt_bond)=pvegtype(:,nvt_bond)
216 WHERE (pvegtype(:,nvt_shrb)>0.)
217 zweight(:,nvt_shrb)=pvegtype(:,nvt_shrb)
221 CALL
abor1_sfx(
'AV_PGD_PARAM: WEIGHTING FUNCTION FOR VEGTYPE NOT ALLOWED')
244 DO jvegtype=1,nvegtype
245 jpatch= patch_list(jvegtype)
246 DO jj=1,
SIZE(pdata,1)
247 zsum_weight_patch(jj,jpatch) = zsum_weight_patch(jj,jpatch) + zweight(jj,jvegtype)
248 zwork(jj,jpatch) = zwork(jj,jpatch) + pdata(jj,jvegtype) * zweight(jj,jvegtype)
259 DO jvegtype=1,nvegtype
260 jpatch=patch_list(jvegtype)
261 DO jj=1,
SIZE(pdata,1)
262 zsum_weight_patch(jj,jpatch) = zsum_weight_patch(jj,jpatch)+zweight(jj,jvegtype)
263 IF (pdata(jj,jvegtype).NE.0.)
THEN
264 zwork(jj,jpatch)= zwork(jj,jpatch) + 1./ pdata(jj,jvegtype) * zweight(jj,jvegtype)
277 DO jvegtype=1,nvegtype
278 jpatch=patch_list(jvegtype)
279 DO jj=1,
SIZE(pdata,1)
280 zsum_weight_patch(jj,jpatch) = zsum_weight_patch(jj,jpatch)+ zweight(jj,jvegtype)
281 IF (pdata(jj,jvegtype).NE.0.)
THEN
282 zwork(jj,jpatch)= zwork(jj,jpatch) + 1./(log(zdz(jj,jpatch)/ pdata(jj,jvegtype)))**2 &
283 * zweight(jj,jvegtype)
291 CALL
abor1_sfx(
'AV_PGD_PARAM: (1) AVERAGING TYPE NOT ALLOWED')
303 DO jj=1,
SIZE(zwork,1)
304 IF ( zsum_weight_patch(jj,jpatch) >0.)
THEN
305 jcount(jpatch)=jcount(jpatch)+1
306 nmask(jcount(jpatch),jpatch)=jj
325 DO jj=1,jcount(jpatch)
326 ji = nmask(jj,jpatch)
327 pfield(ji,jpatch) = zwork(ji,jpatch) / zsum_weight_patch(ji,jpatch)
340 DO jj=1,jcount(jpatch)
341 ji = nmask(jj,jpatch)
342 pfield(ji,jpatch) = zsum_weight_patch(ji,jpatch) / zwork(ji,jpatch)
355 DO jj=1,jcount(jpatch)
357 pfield(ji,jpatch) = zdz(ji,jpatch) * exp( - sqrt(zsum_weight_patch(ji,jpatch)/zwork(ji,jpatch)) )
364 CALL
abor1_sfx(
'AV_PGD_PARAM: (2) AVERAGING TYPE NOT ALLOWED')
367 IF (lhook) CALL dr_hook(
'AV_PGD_PARAM',1,zhook_handle)
subroutine av_pgd_param(DTI, PFIELD, PVEGTYPE, PDATA, HSFTYPE, HATYPE, PDZ, KDECADE)
integer function vegtype_to_patch(IVEGTYPE, INPATCH)
subroutine abor1_sfx(YTEXT)