7 hprogram,hsurf,hfile,hfiletype,hfilepgd,hfilepgdtype,kluout,kpatch,pfield)
17 USE modi_prep_grid_extern
19 USE modi_get_teb_depths
21 USE modi_open_aux_io_surf
22 USE modi_close_aux_io_surf
23 USE modi_town_presence
24 USE modi_read_teb_patch
26 USE modd_prep, ONLY : cingrid_type, cinterp_type
27 USE modd_prep_teb, ONLY : xgrid_road, xgrid_wall, xgrid_roof, &
28 xgrid_floor, xws_roof, xws_road, &
29 xti_bld_def, xws_roof_def, xws_road_def, xhui_bld_def
33 USE yomhook
,ONLY : lhook, dr_hook
34 USE parkind1
,ONLY : jprb
43 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
44 CHARACTER(LEN=7),
INTENT(IN) :: hsurf
45 CHARACTER(LEN=28),
INTENT(IN) :: hfile
46 CHARACTER(LEN=6),
INTENT(IN) :: hfiletype
47 CHARACTER(LEN=28),
INTENT(IN) :: hfilepgd
48 CHARACTER(LEN=6),
INTENT(IN) :: hfilepgdtype
49 INTEGER,
INTENT(IN) :: kluout
50 INTEGER,
INTENT(IN) :: kpatch
51 REAL,
DIMENSION(:,:),
POINTER :: pfield
55 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zfield
56 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zdepth
57 REAL,
DIMENSION(:),
ALLOCATABLE :: zdepth_tot
59 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zd
61 REAL,
DIMENSION(:),
ALLOCATABLE :: zmask
63 CHARACTER(LEN=12) :: yrecfm
70 CHARACTER(LEN=4) :: ywall_opt
71 CHARACTER(LEN=6) :: ysurf
72 CHARACTER(LEN=3) :: ybem
80 CHARACTER(LEN=3) :: ypatch
81 REAL(KIND=JPRB) :: zhook_handle
91 IF (lhook) CALL dr_hook(
'PREP_TEB_EXTERN',0,zhook_handle)
96 hfilepgd,hfilepgdtype,
'FULL ')
98 hfilepgdtype,
'VERSION',iversion,iresp)
100 hfilepgdtype,
'BUG',ibugfix,iresp)
102 gold_name=(iversion<7 .OR. (iversion==7 .AND. ibugfix<3))
110 hfilepgd,hfilepgdtype,
'FULL ')
113 hfilepgdtype,kluout,cingrid_type,cinterp_type,ini)
116 CALL
read_surf(hfilepgdtype,yrecfm,iversion,iresp)
119 IF (iversion>=7)
THEN
121 CALL
read_surf(hfilepgdtype,yrecfm,zmask,iresp,hdir=
'A')
131 IF (.NOT.gold_name.AND.gteb)
THEN
134 hfilepgd,hfilepgdtype,
'TOWN ')
136 hfilepgdtype,yrecfm,ybem,iresp)
146 IF (hsurf==
'ZS ')
THEN
148 ALLOCATE(pfield(ini,1))
151 hfilepgd,hfilepgdtype,
'FULL ')
153 hfilepgdtype,yrecfm,pfield(:,1),iresp,hdir=
'A')
166 hfilepgd,hfilepgdtype,iteb_patch)
168 IF (iteb_patch>1)
THEN
169 WRITE(ypatch,fmt=
'(A,I1,A)')
'T',min(kpatch,iteb_patch),
'_'
173 hfilepgd,hfilepgdtype,
'TOWN ')
182 CASE(
'T_ROAD',
'T_ROOF',
'T_WALLA',
'T_WALLB',
'T_FLOOR',
'T_MASS')
185 IF (ysurf==
'T_ROAD') yrecfm=
'ROAD_LAYER'
186 IF (ysurf==
'T_ROOF') yrecfm=
'ROOF_LAYER'
187 IF (ysurf==
'T_WALL') yrecfm=
'WALL_LAYER'
188 IF (ysurf==
'T_WALLA') yrecfm=
'WALL_LAYER'
189 IF (ysurf==
'T_WALLB') yrecfm=
'WALL_LAYER'
190 IF (ysurf==
'T_FLOO' .OR. ysurf==
'T_MASS')
THEN
191 IF (ybem==
'DEF')
THEN
198 hfilepgdtype,yrecfm,ilayer,iresp)
201 ALLOCATE(zd(ini,ilayer))
204 hfilepgd,hfilepgdtype,pd_road=zd)
207 hfilepgd,hfilepgdtype,pd_roof=zd)
210 hfilepgd,hfilepgdtype,pd_wall=zd)
213 hfilepgd,hfilepgdtype,pd_wall=zd)
216 hfilepgd,hfilepgdtype,pd_wall=zd)
219 hfilepgd,hfilepgdtype,pd_floor=zd)
222 hfilepgd,hfilepgdtype,pd_floor=zd)
225 hfile,hfiletype,
'TOWN ')
229 IF (ysurf ==
'T_WALL' .AND. .NOT. gold_name)
THEN
231 hfiletype,
'WALL_OPT',ywall_opt,iresp)
233 IF (ysurf ==
'T_WALLA' .AND. .NOT. gold_name)
THEN
235 hfiletype,
'WALL_OPT',ywall_opt,iresp)
237 IF (ysurf ==
'T_WALLB' .AND. .NOT. gold_name)
THEN
239 hfiletype,
'WALL_OPT',ywall_opt,iresp)
243 ALLOCATE(zfield(ini,ilayer))
246 WRITE(yrecfm,
'(A6,I1.1)') hsurf(1:6),jlayer
248 WRITE(yrecfm,
'(A1,A4,I1.1)') hsurf(1:1),hsurf(3:6),jlayer
249 IF (ysurf ==
'T_WALL' .AND. ywall_opt/=
'UNIF') &
250 WRITE(yrecfm,
'(A1,A5,I1.1)') hsurf(1:1),hsurf(3:7),jlayer
251 IF (ysurf ==
'T_WALLA' .AND. ywall_opt/=
'UNIF') &
252 WRITE(yrecfm,
'(A1,A5,I1.1)') hsurf(1:1),hsurf(3:7),jlayer
253 IF (ysurf ==
'T_WALLB' .AND. ywall_opt/=
'UNIF') &
254 WRITE(yrecfm,
'(A1,A5,I1.1)') hsurf(1:1),hsurf(3:7),jlayer
255 IF ((hsurf==
'T_FLOOR' .OR. hsurf==
'T_MASS') .AND. ybem==
'DEF')
THEN
256 IF (hsurf==
'T_FLOOR' .AND. jlayer>1)
THEN
257 WRITE(yrecfm,
'(A5,I1.1)')
'TROAD',jlayer
259 WRITE(yrecfm,
'(A6)')
'TI_BLD'
263 yrecfm=ypatch//yrecfm
264 yrecfm=adjustl(yrecfm)
266 hfiletype,yrecfm,zfield(:,jlayer),iresp,hdir=
'A')
269 DO jlayer=1,
SIZE(zfield,2)
270 WHERE (zmask(:)==0.) zfield(:,jlayer) = xundef
274 ALLOCATE(zdepth(ini,ilayer))
275 ALLOCATE(zdepth_tot(ini))
276 zdepth(:,1)=zd(:,1)/2.
277 zdepth_tot(:) =zd(:,1)
279 zdepth(:,jlayer) = zdepth_tot(:) + zd(:,jlayer)/2.
280 zdepth_tot(:) = zdepth_tot(:) + zd(:,jlayer)
284 IF (ysurf==
'T_ROOF' .OR. ysurf==
'T_WALL' .OR. hsurf ==
'T_FLOOR' &
285 &.OR. hsurf ==
'T_MASS'.OR. ysurf==
'T_WALLA' .OR. hsurf ==
'T_WALLB')
THEN
287 zdepth(:,jlayer) = zdepth(:,jlayer) / zdepth_tot(:)
292 IF (ysurf==
'T_ROAD')
THEN
293 ALLOCATE(pfield(
SIZE(zfield,1),
SIZE(xgrid_road)))
295 ELSEIF (ysurf==
'T_ROOF')
THEN
296 ALLOCATE(pfield(
SIZE(zfield,1),
SIZE(xgrid_roof)))
298 ELSEIF (ysurf==
'T_WALL')
THEN
299 ALLOCATE(pfield(
SIZE(zfield,1),
SIZE(xgrid_wall)))
301 ELSEIF (ysurf==
'T_WALLA')
THEN
302 ALLOCATE(pfield(
SIZE(zfield,1),
SIZE(xgrid_wall)))
304 ELSEIF (ysurf==
'T_WALLB')
THEN
305 ALLOCATE(pfield(
SIZE(zfield,1),
SIZE(xgrid_wall)))
307 ELSEIF (ysurf==
'T_FLOO' .OR. ysurf==
'T_MASS')
THEN
308 ALLOCATE(pfield(
SIZE(zfield,1),
SIZE(xgrid_floor)))
316 DEALLOCATE(zdepth_tot)
323 ALLOCATE(pfield(ini,1))
324 IF (ybem==
'BEM')
THEN
326 yrecfm=ypatch//yrecfm
327 yrecfm=adjustl(yrecfm)
330 hfile,hfiletype,
'TOWN ')
332 hfiletype,yrecfm,pfield(:,1),iresp,hdir=
'A')
334 WHERE (zmask(:)==0.) pfield(:,1) = xundef
345 ALLOCATE(pfield(ini,1))
347 IF (hsurf==
'T_CAN ')
THEN
349 IF (gold_name) yrecfm=
'T_CANYON'
350 ELSEIF (hsurf==
'Q_CAN ')
THEN
352 IF (gold_name) yrecfm=
'Q_CANYON'
353 ELSEIF (hsurf==
'T_WIN2 ' .OR. hsurf==
'T_WIN1')
THEN
354 IF (ybem==
'BEM')
THEN
360 yrecfm=ypatch//yrecfm
361 yrecfm=adjustl(yrecfm)
364 hfile,hfiletype,
'TOWN ')
366 hfiletype,yrecfm,pfield(:,1),iresp,hdir=
'A')
368 WHERE (zmask(:)==0.) pfield(:,1) = xundef
382 CASE(
'T_ROAD',
'T_ROOF',
'T_WALL',
'T_WIN1',
'T_FLOOR',
'T_CAN',
'TI_ROAD',
'T_WALLA',
'T_WALLB')
386 hfilepgd,hfilepgdtype,
'NATURE')
388 hfilepgdtype,
'PATCH_NUMBER',ipatch,iresp)
390 ALLOCATE(zfield(ini,ipatch))
392 hfile,hfiletype,
'NATURE')
393 IF (ysurf==
'T_FLOO' .OR. ysurf==
'T_CAN ' .OR. ysurf==
'TI_ROA')
THEN
395 hfiletype,
'TG2',zfield(:,:),iresp,hdir=
'A')
398 hfiletype,
'TG1',zfield(:,:),iresp,hdir=
'A')
401 DO jlayer=1,
SIZE(zfield,2)
402 WHERE (zmask(:)==0.) zfield(:,jlayer) = xundef
405 IF (ysurf==
'T_ROAD') ilayer=
SIZE(xgrid_road)
406 IF (ysurf==
'T_ROOF') ilayer=
SIZE(xgrid_roof)
407 IF (ysurf==
'T_WALL') ilayer=
SIZE(xgrid_wall)
408 IF (ysurf==
'T_WALLA') ilayer=
SIZE(xgrid_wall)
409 IF (ysurf==
'T_WALLB') ilayer=
SIZE(xgrid_wall)
410 IF (ysurf==
'T_FLOO') ilayer=
SIZE(xgrid_floor)
411 IF (ysurf==
'T_WIN1' .OR. ysurf==
'T_CAN ' .OR. ysurf==
'TI_ROA') ilayer=1
412 ALLOCATE(pfield(ini,ilayer))
413 IF (ysurf==
'T_FLOO')
THEN
415 pfield(:,1) = xti_bld_def
417 pfield(:,1) = zfield(:,1)
420 pfield(:,jlayer) = zfield(:,1)
424 CASE(
'T_MASS',
'TI_BLD',
'T_WIN2')
426 IF (ysurf==
'T_MASS') ilayer =
SIZE(xgrid_floor)
427 IF (ysurf==
'TI_BLD'.OR.ysurf==
'T_WIN2') ilayer=1
428 ALLOCATE(pfield(ini, ilayer))
429 pfield(:,:) = xti_bld_def
433 ALLOCATE(pfield(ini,1))
437 CASE(
'WS_ROOF',
'WS_ROAD')
438 ALLOCATE(pfield(ini,1))
439 IF (hsurf==
'WS_ROOF') pfield = xws_roof_def
440 IF (hsurf==
'WS_ROAD') pfield = xws_road_def
444 ALLOCATE(pfield(ini,1))
459 IF (lhook) CALL dr_hook(
'PREP_TEB_EXTERN',1,zhook_handle)
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK)
subroutine get_teb_depths(DTCO, HFILEPGD, HFILEPGDTYPE, PD_ROOF, PD_ROAD, PD_WALL, PD_FLOOR)
subroutine read_teb_patch(HFILEPGD, HFILEPGDTYPE, KTEB_PATCH)
subroutine prep_teb_extern(DTCO, HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, KPATCH, PFIELD)
subroutine town_presence(HFILETYPE, OTEB)
subroutine prep_grid_extern(HFILETYPE, KLUOUT, HGRIDTYPE, HINTERP_TYPE, KNI)