16 SUBROUTINE date2doy(TPDATA, OCOVER, KDOY)
18 USE modd_data_cover_par
, ONLY : nvegtype
20 type(
date_time),
DIMENSION(:,:),
INTENT(IN) :: tpdata
21 LOGICAL,
DIMENSION(:),
INTENT(IN) :: OCOVER
22 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: KDOY
23 INTEGER,
DIMENSION(SIZE(OCOVER),NVEGTYPE) :: IMONTH, IDAY
24 INTEGER,
PARAMETER,
DIMENSION(12) :: TAB=(/1,32,60,91,121,152,182,213,244,274,305,335/)
25 INTEGER :: JCOV, JJ, JVEG
26 REAL(KIND=JPRB) :: ZHOOK_HANDLE
28 IF (
lhook)
CALL dr_hook(
'MODE_AV_PGD:DATE2DOY',0,zhook_handle)
30 imonth(:,:) = tpdata(:,:)%TDATE%MONTH
31 iday(:,:) = tpdata(:,:)%TDATE%DAY
36 DO jj = 1,
SIZE(ocover)
37 IF (.NOT.ocover(jj)) cycle
40 IF (imonth(jj,jveg)/=
nundef .AND. iday(jj,jveg) /=
nundef)
THEN 41 kdoy(jcov,jveg) = tab(imonth(jj,jveg)) + iday(jj,jveg) - 1
45 IF (
lhook)
CALL dr_hook(
'MODE_AV_PGD:DATE2DOY',1,zhook_handle)
49 SUBROUTINE doy2date(KDOY,KMONTH,KDAY)
51 INTEGER,
INTENT(IN) :: KDOY
52 INTEGER,
INTENT(OUT) :: KMONTH, KDAY
54 INTEGER,
PARAMETER,
DIMENSION(12) :: ZTAB=(/31.,59.,90.,120.,151.,181.,212.,243.,273.,304.,334.,365./)
56 REAL(KIND=JPRB) :: ZHOOK_HANDLE
58 IF (
lhook)
CALL dr_hook(
'MODE_AV_PGD:DOY2DATE',0,zhook_handle)
63 zwork(1) =
REAL(KDOY) / ZTAB(1)
64 IF ( int(zwork(1))==0 .AND. zwork(1)/=0.)
THEN 70 zwork(j) =
REAL(KDOY) / ZTAB(j)
71 IF ( int(zwork(j))==0 .AND. int(zwork(j-1))==1 )
THEN 73 kday = kdoy - int(ztab(j-1))
76 IF (
lhook)
CALL dr_hook(
'MODE_AV_PGD:DOY2DATE',1,zhook_handle)
80 SUBROUTINE get_weight(DTCO,KCOVER,KMASK,HSFTYPE,PWEIGHT)
85 USE modd_data_cover_par
, ONLY : nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
86 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, nvt_shrb
93 INTEGER,
INTENT(IN) :: KCOVER
94 INTEGER,
DIMENSION(:),
INTENT(IN) :: KMASK
95 CHARACTER(LEN=3),
INTENT(IN) :: HSFTYPE
96 REAL,
DIMENSION(:),
INTENT(OUT) :: PWEIGHT
99 REAL(KIND=JPRB) :: ZHOOK_HANDLE
101 IF (
lhook)
CALL dr_hook(
'MODE_AV_PGD:GET_WEIGHT',0,zhook_handle)
112 SELECT CASE (hsftype)
117 pweight(jcov)=dtco%XDATA_NATURE(jj)
120 pweight(jcov)=dtco%XDATA_TOWN (jj) * dtco%XDATA_GARDEN(jj)
123 pweight(jcov)=dtco%XDATA_TOWN (jj)
126 pweight(jcov)=dtco%XDATA_WATER (jj)
129 pweight(jcov)=dtco%XDATA_SEA (jj)
132 pweight(jcov)=dtco%XDATA_TOWN (jj) * dtco%XDATA_BLD(jj)
135 pweight(jcov)=dtco%XDATA_TOWN (jj) * dtco%XDATA_BLD(jj) &
139 pweight(jcov)=dtco%XDATA_TOWN (jj) * ( 1. - dtco%XDATA_BLD(jj) )
142 pweight(jcov)=dtco%XDATA_NATURE(jj) * ( dtco%XDATA_VEGTYPE(jj,nvt_tebd) &
143 + dtco%XDATA_VEGTYPE(jj,nvt_trbe) &
144 + dtco%XDATA_VEGTYPE(jj,nvt_trbd) &
145 + dtco%XDATA_VEGTYPE(jj,nvt_tebe) &
146 + dtco%XDATA_VEGTYPE(jj,nvt_tene) &
147 + dtco%XDATA_VEGTYPE(jj,nvt_bobd) &
148 + dtco%XDATA_VEGTYPE(jj,nvt_bond) &
149 + dtco%XDATA_VEGTYPE(jj,nvt_shrb) &
150 + dtco%XDATA_VEGTYPE(jj,nvt_bone) )
153 pweight(jcov)=dtco%XDATA_TOWN(jj) * dtco%XDATA_GARDEN(jj) &
154 * ( dtco%XDATA_VEGTYPE(jj,nvt_tebd) &
155 + dtco%XDATA_VEGTYPE(jj,nvt_trbe) &
156 + dtco%XDATA_VEGTYPE(jj,nvt_trbd) &
157 + dtco%XDATA_VEGTYPE(jj,nvt_tebe) &
158 + dtco%XDATA_VEGTYPE(jj,nvt_tene) &
159 + dtco%XDATA_VEGTYPE(jj,nvt_bobd) &
160 + dtco%XDATA_VEGTYPE(jj,nvt_bond) &
161 + dtco%XDATA_VEGTYPE(jj,nvt_shrb) &
162 + dtco%XDATA_VEGTYPE(jj,nvt_bone) )
165 CALL abor1_sfx(
'AV_1PGD_1D: WEIGHTING FUNCTION NOT ALLOWED '//hsftype)
170 IF (
lhook)
CALL dr_hook(
'MODE_AV_PGD:GET_WEIGHT',1,zhook_handle)
179 USE modd_data_cover_par
, ONLY : nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, &
180 nvt_tebe, nvt_tene, nvt_bobd, nvt_bond, nvt_shrb, &
191 INTEGER,
INTENT(IN) :: KCOVER
192 INTEGER,
DIMENSION(:),
INTENT(IN) :: KMASK
193 INTEGER,
INTEnt(IN) :: KDECADE
194 CHARACTER(LEN=3),
INTENT(IN) :: HSFTYPE
195 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PWEIGHT
197 INTEGER :: JCOV,JJ, JVEG
198 REAL(KIND=JPRB) :: ZHOOK_HANDLE
200 IF (
lhook)
CALL dr_hook(
'MODE_AV_PGD:GET_WEIGHT_PATCH',0,zhook_handle)
202 IF (.NOT.
ASSOCIATED(dtco%XDATA_WEIGHT))
THEN 204 ALLOCATE(dtco%XDATA_WEIGHT(kcover,nvegtype,12))
205 dtco%XDATA_WEIGHT(:,:,:) = 0.
213 IF (dtco%XDATA_VEGTYPE(jj,jveg)==0.) cycle
215 dtco%XDATA_WEIGHT(jcov,jveg,1)= dtco%XDATA_NATURE(jj) * dtco%XDATA_VEGTYPE(jj,jveg)
217 dtco%XDATA_WEIGHT(jcov,jveg,2)= dtco%XDATA_TOWN(jj)*dtco%XDATA_GARDEN(jj) * dtco%XDATA_VEGTYPE(jj,jveg)
219 dtco%XDATA_WEIGHT(jcov,jveg,3)= dtco%XDATA_WEIGHT(jcov,jveg,1) *
xdata_veg(jj,kdecade,jveg)
221 dtco%XDATA_WEIGHT(jcov,jveg,4)= dtco%XDATA_WEIGHT(jcov,jveg,1) * (1.-
xdata_veg(jj,kdecade,jveg))
223 dtco%XDATA_WEIGHT(jcov,jveg,5)= dtco%XDATA_WEIGHT(jcov,jveg,2) *
xdata_veg(jj,kdecade,jveg)
225 dtco%XDATA_WEIGHT(jcov,jveg,6)= dtco%XDATA_WEIGHT(jcov,jveg,2) * (1.-
xdata_veg(jj,kdecade,jveg))
228 dtco%XDATA_WEIGHT(jcov,jveg,7)= dtco%XDATA_WEIGHT(jcov,jveg,1)
230 dtco%XDATA_WEIGHT(jcov,jveg,8)= dtco%XDATA_WEIGHT(jcov,jveg,2)
233 dtco%XDATA_WEIGHT(jcov,jveg,9)= dtco%XDATA_WEIGHT(jcov,jveg,1) *
xdata_lai(jj,kdecade,jveg)
235 dtco%XDATA_WEIGHT(jcov,jveg,10)= dtco%XDATA_WEIGHT(jcov,jveg,2) *
xdata_lai(jj,kdecade,jveg)
241 IF (jveg==nvt_tebd)
THEN 242 dtco%XDATA_WEIGHT(jcov,nvt_tebd,11)= dtco%XDATA_WEIGHT(jcov,nvt_tebd,1)
243 dtco%XDATA_WEIGHT(jcov,nvt_tebd,12)= dtco%XDATA_WEIGHT(jcov,nvt_tebd,2)
245 IF (jveg==nvt_bone)
THEN 246 dtco%XDATA_WEIGHT(jcov,nvt_bone,11)= dtco%XDATA_WEIGHT(jcov,nvt_bone,1)
247 dtco%XDATA_WEIGHT(jcov,nvt_bone,12)= dtco%XDATA_WEIGHT(jcov,nvt_bone,2)
249 IF (jveg==nvt_trbe)
THEN 250 dtco%XDATA_WEIGHT(jcov,nvt_trbe,11)= dtco%XDATA_WEIGHT(jcov,nvt_trbe,1)
251 dtco%XDATA_WEIGHT(jcov,nvt_trbe,12)= dtco%XDATA_WEIGHT(jcov,nvt_trbe,2)
253 IF (jveg==nvt_trbd)
THEN 254 dtco%XDATA_WEIGHT(jcov,nvt_trbd,11)= dtco%XDATA_WEIGHT(jcov,nvt_trbd,1)
255 dtco%XDATA_WEIGHT(jcov,nvt_trbd,12)= dtco%XDATA_WEIGHT(jcov,nvt_trbd,2)
257 IF (jveg==nvt_tebe)
THEN 258 dtco%XDATA_WEIGHT(jcov,nvt_tebe,11)= dtco%XDATA_WEIGHT(jcov,nvt_tebe,1)
259 dtco%XDATA_WEIGHT(jcov,nvt_tebe,12)= dtco%XDATA_WEIGHT(jcov,nvt_tebe,2)
261 IF (jveg==nvt_tene)
THEN 262 dtco%XDATA_WEIGHT(jcov,nvt_tene,11)= dtco%XDATA_WEIGHT(jcov,nvt_tene,1)
263 dtco%XDATA_WEIGHT(jcov,nvt_tene,12)= dtco%XDATA_WEIGHT(jcov,nvt_tene,2)
265 IF (jveg==nvt_bobd)
THEN 266 dtco%XDATA_WEIGHT(jcov,nvt_bobd,11)= dtco%XDATA_WEIGHT(jcov,nvt_bobd,1)
267 dtco%XDATA_WEIGHT(jcov,nvt_bobd,12)= dtco%XDATA_WEIGHT(jcov,nvt_bobd,2)
269 IF (jveg==nvt_bond)
THEN 270 dtco%XDATA_WEIGHT(jcov,nvt_bond,11)= dtco%XDATA_WEIGHT(jcov,nvt_bond,1)
271 dtco%XDATA_WEIGHT(jcov,nvt_bond,12)= dtco%XDATA_WEIGHT(jcov,nvt_bond,2)
273 IF (jveg==nvt_shrb)
THEN 274 dtco%XDATA_WEIGHT(jcov,nvt_shrb,11)= dtco%XDATA_WEIGHT(jcov,nvt_shrb,1)
275 dtco%XDATA_WEIGHT(jcov,nvt_shrb,12)= dtco%XDATA_WEIGHT(jcov,nvt_shrb,2)
284 SELECT CASE (hsftype)
286 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,1)
288 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,2)
290 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,3)
292 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,4)
294 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,5)
296 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,6)
298 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,7)
300 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,8)
302 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,9)
304 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,10)
306 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,11)
308 pweight(:,:) = dtco%XDATA_WEIGHT(:,:,12)
310 CALL abor1_sfx(
'AV_1PATCH_PGD_1D: WEIGHTING FUNCTION FOR VEGTYPE NOT ALLOWED')
313 IF (
lhook)
CALL dr_hook(
'MODE_AV_PGD:GET_WEIGHT_PATCH',1,zhook_handle)
subroutine get_weight_patch(DTCO, KCOVER, KMASK, KDECADE, HSFTYPE, PWEIGHT)
subroutine abor1_sfx(YTEXT)
integer, parameter nundef
subroutine get_weight(DTCO, KCOVER, KMASK, HSFTYPE, PWEIGHT)
real, dimension(:,:,:), allocatable xdata_veg
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
subroutine date2doy(TPDATA, OCOVER, KDOY)
real, dimension(:,:,:), allocatable xdata_lai
real, dimension(:), allocatable xdata_bld_height
subroutine doy2date(KDOY, KMONTH, KDAY)