7 HPROGRAM,HSURF,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,KLUOUT,KPATCH,PFIELD)
23 USE modi_prep_grid_extern
25 USE modi_get_teb_depths
27 USE modi_open_aux_io_surf
28 USE modi_close_aux_io_surf
29 USE modi_town_presence
30 USE modi_read_teb_patch
31 USE modi_make_choice_array
34 USE modd_prep_teb
, ONLY : xgrid_road, xgrid_wall, xgrid_roof, &
35 xgrid_floor, xws_roof, xws_road, &
36 xti_bld_def, xws_roof_def, xws_road_def, xhui_bld_def
37 USE modd_data_cover_par
, ONLY : jpcover
53 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
54 CHARACTER(LEN=7),
INTENT(IN) :: HSURF
55 CHARACTER(LEN=28),
INTENT(IN) :: HFILE
56 CHARACTER(LEN=6),
INTENT(IN) :: HFILETYPE
57 CHARACTER(LEN=28),
INTENT(IN) :: HFILEPGD
58 CHARACTER(LEN=6),
INTENT(IN) :: HFILEPGDTYPE
59 INTEGER,
INTENT(IN) :: KLUOUT
60 INTEGER,
INTENT(IN) :: KPATCH
61 REAL,
DIMENSION(:,:),
POINTER :: PFIELD
65 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZFIELD
66 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZDEPTH
69 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZD
71 REAL,
DIMENSION(:),
ALLOCATABLE :: ZMASK
73 CHARACTER(LEN=12) :: YRECFM
77 INTEGER :: IVERSION_PGD, IVERSION_PREP
78 INTEGER :: IBUGFIX_PGD, IBUGFIX_PREP
80 CHARACTER(LEN=4) :: YWALL_OPT
81 CHARACTER(LEN=6) :: YSURF
82 CHARACTER(LEN=3) :: YBEM
91 CHARACTER(LEN=3) :: YPATCH
92 REAL(KIND=JPRB) :: ZHOOK_HANDLE
102 IF (
lhook)
CALL dr_hook(
'PREP_TEB_EXTERN',0,zhook_handle)
106 CALL read_surf(hfiletype,
'VERSION',iversion_prep,iresp,hdir=
'-')
107 CALL read_surf(hfiletype,
'BUG',ibugfix_prep,iresp,hdir=
'-')
108 gdim = (iversion_prep>8 .OR. iversion_prep==8 .AND. ibugfix_prep>0)
109 IF (gdim)
CALL read_surf(hfiletype,
'SPLIT_PATCH',gdim,iresp)
114 CALL read_surf(hfilepgdtype,
'VERSION',iversion_pgd,iresp,hdir=
'-')
115 CALL read_surf(hfilepgdtype,
'BUG',ibugfix_pgd,iresp,hdir=
'-')
131 IF (iversion_pgd>=7.AND.gteb)
THEN 133 CALL read_surf(hfilepgdtype,yrecfm,zmask,iresp,hdir=
'A')
145 IF (hsurf==
'ZS ')
THEN 147 ALLOCATE(pfield(ini,1))
150 CALL read_surf(hfilepgdtype,yrecfm,pfield(:,1),iresp,hdir=
'E')
163 gold_name=(iversion_pgd<7 .OR. (iversion_pgd==7 .AND. ibugfix_pgd<3))
164 IF (.NOT.gold_name.AND.gteb)
THEN 166 CALL read_surf(hfilepgdtype,yrecfm,ybem,iresp,hdir=
'-')
170 CALL read_teb_patch(hfilepgd,hfilepgdtype,iversion_pgd,ibugfix_pgd,iteb_patch,hdir=
'-')
172 IF (iteb_patch>1)
THEN 173 WRITE(ypatch,fmt=
'(A,I1,A)')
'T',min(kpatch,iteb_patch),
'_' 184 CASE(
'T_ROAD',
'T_ROOF',
'T_WALLA',
'T_WALLB',
'T_FLOOR',
'T_MASS')
188 IF (ysurf==
'T_ROAD') yrecfm=
'ROAD_LAYER' 189 IF (ysurf==
'T_ROOF') yrecfm=
'ROOF_LAYER' 190 IF (ysurf==
'T_WALL') yrecfm=
'WALL_LAYER' 191 IF (ysurf==
'T_FLOO' .OR. ysurf==
'T_MASS')
THEN 192 IF (ybem==
'DEF')
THEN 198 CALL read_surf(hfilepgdtype,yrecfm,ilayer,iresp,hdir=
'-')
202 gold_name=(iversion_prep<7 .OR. (iversion_prep==7 .AND. ibugfix_prep<3))
208 IF (ysurf ==
'T_WALL' .AND. .NOT. gold_name)
THEN 209 CALL read_surf(hfiletype,
'WALL_OPT',ywall_opt,iresp,hdir=
'-')
213 ALLOCATE(zfield(ini,ilayer))
217 WRITE(yrecfm,
'(A6,I1.1)') hsurf(1:6),jlayer
220 IF (ysurf ==
'T_WALL' .AND. ywall_opt/=
'UNIF')
THEN 221 WRITE(yrecfm,
'(A1,A5,I1.1)') hsurf(1:1),hsurf(3:7),jlayer
222 ELSEIF ((ysurf==
'T_FLOO' .OR. ysurf==
'T_MASS') .AND. ybem==
'DEF')
THEN 223 IF (ysurf==
'T_FLOO' .AND. jlayer>1)
THEN 224 WRITE(yrecfm,
'(A5,I1.1)')
'TROAD',jlayer
226 WRITE(yrecfm,
'(A6)')
'TI_BLD' 229 WRITE(yrecfm,
'(A1,A4,I1.1)') hsurf(1:1),hsurf(3:6),jlayer
234 yrecfm=ypatch//yrecfm
235 yrecfm=adjustl(yrecfm)
236 CALL read_surf(hfiletype,yrecfm,zfield(:,jlayer),iresp,hdir=
'E')
241 DO jlayer=1,
SIZE(zfield,2)
242 WHERE (zmask(:)==0.) zfield(:,jlayer) =
xundef 245 ALLOCATE(zd(ini,ilayer))
246 IF (ysurf==
'T_ROAD')
CALL get_teb_depths(dtco,hfile,hfiletype,hfilepgd,hfilepgdtype,pd_road=zd,hdir=
'E')
247 IF (ysurf==
'T_ROOF')
CALL get_teb_depths(dtco,hfile,hfiletype,hfilepgd,hfilepgdtype,pd_roof=zd,hdir=
'E')
248 IF (ysurf==
'T_WALL')
CALL get_teb_depths(dtco,hfile,hfiletype,hfilepgd,hfilepgdtype,pd_wall=zd,hdir=
'E')
249 IF (ysurf==
'T_MASS')
CALL get_teb_depths(dtco,hfile,hfiletype,hfilepgd,hfilepgdtype,pd_floor=zd,hdir=
'E')
250 IF (ysurf==
'T_FLOO')
CALL get_teb_depths(dtco,hfile,hfiletype,hfilepgd,hfilepgdtype,pd_floor=zd,hdir=
'E')
255 ALLOCATE(zdepth(ini,ilayer))
258 zdepth(ji,1)= zd(ji,1)/2.
259 zdepth_tot = zd(ji,1)
261 zdepth(ji,jlayer) = zdepth_tot + zd(ji,jlayer)/2.
262 zdepth_tot = zdepth_tot + zd(ji,jlayer)
266 IF (ysurf==
'T_ROOF' .OR. ysurf==
'T_WALL' .OR. ysurf ==
'T_FLOO' .OR. ysurf ==
'T_MASS')
THEN 268 zdepth(ji,jlayer) = zdepth(ji,jlayer) / zdepth_tot
275 IF (ysurf==
'T_ROAD')
THEN 276 ALLOCATE(pfield(
SIZE(zfield,1),
SIZE(xgrid_road)))
278 ELSEIF (ysurf==
'T_ROOF')
THEN 279 ALLOCATE(pfield(
SIZE(zfield,1),
SIZE(xgrid_roof)))
281 ELSEIF (ysurf==
'T_WALL')
THEN 282 ALLOCATE(pfield(
SIZE(zfield,1),
SIZE(xgrid_wall)))
284 ELSEIF (ysurf==
'T_FLOO' .OR. ysurf==
'T_MASS')
THEN 285 ALLOCATE(pfield(
SIZE(zfield,1),
SIZE(xgrid_floor)))
300 ALLOCATE(pfield(ini,1))
301 IF (ybem==
'BEM')
THEN 303 yrecfm=ypatch//yrecfm
304 yrecfm=adjustl(yrecfm)
306 CALL read_surf(hfiletype,yrecfm,pfield(:,1),iresp,hdir=
'E')
308 WHERE (zmask(:)==0.) pfield(:,1) =
xundef 310 IF (ini>0) pfield(:,1) =
xundef 319 ALLOCATE(pfield(ini,1))
322 gold_name=(iversion_prep<7 .OR. (iversion_prep==7 .AND. ibugfix_prep<3))
323 IF (hsurf==
'T_CAN ')
THEN 325 IF (gold_name) yrecfm=
'T_CANYON' 326 ELSEIF (hsurf==
'Q_CAN ')
THEN 328 IF (gold_name) yrecfm=
'Q_CANYON' 329 ELSEIF (hsurf==
'T_WIN2 ' .OR. hsurf==
'T_WIN1')
THEN 330 IF (ybem==
'BEM')
THEN 336 yrecfm=ypatch//yrecfm
337 yrecfm=adjustl(yrecfm)
338 CALL read_surf(hfiletype,yrecfm,pfield(:,1),iresp,hdir=
'E')
340 WHERE (zmask(:)==0.) pfield(:,1) =
xundef 354 CASE(
'T_ROAD',
'T_ROOF',
'T_WALL',
'T_WIN1',
'T_FLOOR',
'T_CAN',
'TI_ROAD',
'T_WALLA',
'T_WALLB')
360 CALL read_surf(hfilepgdtype,
'PATCH_NUMBER',ipatch,iresp,hdir=
'-')
363 ALLOCATE(zfield(ini,ipatch))
366 IF (ysurf==
'T_FLOO' .OR. ysurf==
'T_CAN ' .OR. ysurf==
'TI_ROA')
THEN 372 DO jlayer=1,
SIZE(zfield,2)
373 WHERE (zmask(:)==0.) zfield(:,jlayer) =
xundef 376 IF (ysurf==
'T_ROAD') ilayer=
SIZE(xgrid_road)
377 IF (ysurf==
'T_ROOF') ilayer=
SIZE(xgrid_roof)
378 IF (ysurf==
'T_WALL') ilayer=
SIZE(xgrid_wall)
379 IF (ysurf==
'T_FLOO') ilayer=
SIZE(xgrid_floor)
380 IF (ysurf==
'T_WIN1' .OR. ysurf==
'T_CAN ' .OR. ysurf==
'TI_ROA') ilayer=1
381 ALLOCATE(pfield(ini,ilayer))
382 IF (ysurf==
'T_FLOO')
THEN 384 pfield(:,1) = xti_bld_def
386 pfield(:,1) = zfield(:,1)
389 pfield(:,jlayer) = zfield(:,1)
393 CASE(
'T_MASS',
'TI_BLD',
'T_WIN2')
395 IF (ysurf==
'T_MASS') ilayer =
SIZE(xgrid_floor)
396 IF (ysurf==
'TI_BLD'.OR.ysurf==
'T_WIN2') ilayer=1
397 ALLOCATE(pfield(ini, ilayer))
398 pfield(:,:) = xti_bld_def
402 ALLOCATE(pfield(ini,1))
406 CASE(
'WS_ROOF',
'WS_ROAD')
407 ALLOCATE(pfield(ini,1))
408 IF (hsurf==
'WS_ROOF') pfield = xws_roof_def
409 IF (hsurf==
'WS_ROAD') pfield = xws_road_def
413 ALLOCATE(pfield(ini,1))
428 IF (
lhook)
CALL dr_hook(
'PREP_TEB_EXTERN',1,zhook_handle)
character(len=10) cingrid_type
subroutine make_choice_array(HPROGRAM, KNPATCH, ODIM, HRECFM, PWORK, HDIR, KPATCH)
subroutine get_teb_depths(DTCO, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYP
character(len=6) cinterp_type
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine town_presence(HFILETYPE, OTEB, HDIR)
subroutine prep_grid_extern(GCP, HFILETYPE, KLUOUT, HGRIDTYPE, HINTER
subroutine prep_teb_extern(DTCO, GCP, TOP, BOP, HPROGRAM, HSURF, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, KPATCH, PFIELD)
subroutine read_teb_patch(HFILEPGD, HFILEPGDTYPE, KVERSION, KBUGFIX,
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK, HDIR)