6 SUBROUTINE teb_morpho(HPROGRAM, PBLD,PWALL_O_HOR, PGARDEN, PBLD_HEIGHT, PROAD, &
7 proad_o_grnd, pgarden_o_grnd, pwall_o_grnd, &
8 pcan_hw_ratio, psvf_road, psvf_garden, psvf_wall, &
9 pz0_town, pwall_o_bld, ph_traffic, ple_traffic )
58 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
59 REAL,
DIMENSION(:),
INTENT(INOUT) :: pbld
60 REAL,
DIMENSION(:),
INTENT(INOUT) :: pwall_o_hor
61 REAL,
DIMENSION(:),
INTENT(INOUT) :: pgarden
62 REAL,
DIMENSION(:),
INTENT(INOUT) :: pbld_height
63 REAL,
DIMENSION(:),
INTENT(OUT) :: proad
64 REAL,
DIMENSION(:),
INTENT(OUT) :: proad_o_grnd
65 REAL,
DIMENSION(:),
INTENT(OUT) :: pgarden_o_grnd
66 REAL,
DIMENSION(:),
INTENT(OUT) :: pwall_o_grnd
67 REAL,
DIMENSION(:),
INTENT(OUT) :: pcan_hw_ratio
68 REAL,
DIMENSION(:),
INTENT(OUT) :: psvf_road
69 REAL,
DIMENSION(:),
INTENT(OUT) :: psvf_garden
70 REAL,
DIMENSION(:),
INTENT(OUT) :: psvf_wall
71 REAL,
DIMENSION(:),
INTENT(OUT) :: pz0_town
72 REAL,
DIMENSION(:),
INTENT(OUT) :: pwall_o_bld
73 REAL,
DIMENSION(:),
INTENT(INOUT) :: ph_traffic
74 REAL,
DIMENSION(:),
INTENT(INOUT) :: ple_traffic
81 REAL,
DIMENSION(SIZE(PBLD)) :: zwall_o_bld
82 REAL,
DIMENSION(SIZE(PBLD)) :: zwall_o_hor
84 REAL,
DIMENSION(2) :: zrange_bld = (/ 0.0001 , 0.9999 /)
85 REAL,
DIMENSION(2) :: zrange_road = (/ 0.0001 , 0.9999 /)
86 REAL,
DIMENSION(2) :: zrange_bld_height = (/ 3. , 829.84 /)
87 REAL,
DIMENSION(2) :: zrange_wall_o_hor = (/ 0.00012 , 322. /)
104 IF (pbld_height(jj) < zrange_bld_height(1) )
THEN
105 pbld_height(jj) = zrange_bld_height(1)
107 IF (pbld_height(jj) > zrange_bld_height(2)) &
108 CALL
abor1_sfx(
'TEB_MORPHO: PBLD_HEIGHT higher than 829.84, highest building in the world, should be lower')
110 IF (pz0_town(jj) > pbld_height(jj))
THEN
111 CALL
abor1_sfx(
'TEB_MORPHO: PZ0_TOWN higher than PBLD_HEIGHT, should be lower')
117 IF (pbld(jj) < zrange_bld(1) )
THEN
118 pbld(jj) = zrange_bld(1)
119 pgarden(jj) = min(pgarden(jj), 1.-2.*pbld(jj))
126 IF (pbld(jj) > zrange_bld(2))
THEN
127 pbld(jj) = zrange_bld(2)
128 IF (pgarden(jj) > 0.)
THEN
137 IF (pwall_o_hor(jj) < 4. * sqrt(pbld(jj))*pbld_height(jj)/1000.)
THEN
138 pwall_o_hor(jj) = 4. * sqrt(pbld(jj))*pbld_height(jj)/1000.
143 pwall_o_bld(jj) = pwall_o_hor(jj)/pbld(jj)
145 IF (pwall_o_bld(jj) > (0.4 * pbld_height(jj)))
THEN
147 zwall_o_hor(jj) = pwall_o_hor(jj)
148 zwall_o_bld(jj) = pwall_o_bld(jj)
150 pwall_o_hor(jj) = 0.4 * pbld(jj) * pbld_height(jj)
151 pwall_o_bld(jj) = pwall_o_hor(jj) / pbld(jj)
157 proad(jj) = 1.-(pgarden(jj)+pbld(jj))
158 IF (proad(jj) <= zrange_road(1) )
THEN
159 proad(jj) = zrange_road(1)
160 pgarden(jj) = max(pgarden(jj) - zrange_road(1), 0.)
161 IF (ph_traffic(jj) > 0. .OR. ple_traffic(jj) > 0.)
THEN
169 IF ( pbld(jj) < zrange_bld(1) .OR. pbld(jj) > zrange_bld(2) )
THEN
170 WRITE(iluout,*)
'WARNING : PBLD is still out of range after final corrections &
171 &for grid mesh',jj,
' : ',pbld(jj)
174 IF ( pbld_height(jj) < zrange_bld_height(1) .OR. pbld_height(jj) > zrange_bld_height(2) )
THEN
175 WRITE(iluout,*)
'WARNING : PBLD_HEIGHT is still out of range after final corrections &
176 &for grid mesh',jj,
' : ',pbld_height(jj)
179 IF ( pwall_o_hor(jj) < zrange_wall_o_hor(1) .OR. pwall_o_hor(jj) > zrange_wall_o_hor(2) )
THEN
180 WRITE(iluout,*)
'WARNING : PWALL_O_HOR is still out of range after final corrections &
181 &for grid mesh',jj,
' : ',pwall_o_hor(jj)
184 IF ( pwall_o_bld(jj) - (0.4 * pbld_height(jj)) > 10e-16 )
THEN
185 WRITE(iluout,*)
'WARNING : PWALL_O_BLD is still too high after final corrections &
186 &for grid mesh',jj,
' : ',pwall_o_bld(jj)
194 pcan_hw_ratio(:) = 0.5 * pwall_o_hor(:) / (1.-pbld(:))
198 proad_o_grnd(:) = proad(:) / (proad(:) + pgarden(:))
199 pgarden_o_grnd(:) = pgarden(:) / (proad(:) + pgarden(:))
200 pwall_o_grnd(:) = pwall_o_hor(:) / (proad(:) + pgarden(:))
204 psvf_road(:) = (sqrt(pcan_hw_ratio(:)**2+1.) - pcan_hw_ratio(:))
205 psvf_garden(:) = psvf_road(:)
206 psvf_wall(:) = 0.5*(pcan_hw_ratio(:)+1.-sqrt(pcan_hw_ratio(:)**2+1.))/pcan_hw_ratio(:)
subroutine teb_morpho(HPROGRAM, PBLD, PWALL_O_HOR, PGARDEN, PBLD_HEIGHT, PROAD, PROAD_O_GRND, PGARDEN_O_GRND, PWALL_O_GRND, PCAN_HW_RATIO, PSVF_ROAD, PSVF_GARDEN, PSVF_WALL, PZ0_TOWN, PWALL_O_BLD, PH_TRAFFIC, PLE_TRAFFIC)
subroutine abor1_sfx(YTEXT)
subroutine get_luout(HPROGRAM, KLUOUT)