SURFEX v8.1
General documentation of Surfex
hvac_autosize.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #############################################################
6 SUBROUTINE hvac_autosize (B, BOP, G, T, TOP, KI,KLUOUT)
7 ! #############################################################
8 !!
9 !! PURPOSE
10 !! -------
11 !!
12 !! Calibrates HVAC systems for TEB-BEM
13 !!
14 !! AUTHOR
15 !! ------
16 !!
17 !! G. Pigeon * Meteo-France *
18 !!
19 !! MODIFICATIONS
20 !! -------------
21 !! Original 05/2011
22 !! modified 08/2013 add solar panels (V. Masson)
23 !-------------------------------------------------------------------------------
24 !
25 !* 0. DECLARATIONS
26 ! ------------
27 !
28 !
29 !
31 USE modd_bem_n, ONLY : bem_t
33 USE modd_sfx_grid_n, ONLY : grid_t
34 USE modd_teb_irrig_n, ONLY : teb_irrig_t
35 USE modd_teb_n, ONLY : teb_t
40 !
41 USE modd_csts, ONLY : xcpd, xpi, xp00, xrd, xstefan
42 !
43 USE modi_teb
44 USE modi_sunpos
45 USE modi_sw_daycycle
46 USE modi_urban_lw_coef
47 USE modi_urban_solar_abs
48 USE modi_get_sizes_parallel
49 USE modi_diag_misc_teb_init_n
50 !
51 USE yomhook ,ONLY : lhook, dr_hook
52 USE parkind1 ,ONLY : jprb
53 !
54 #ifdef AIX64
55 USE omp_lib
56 #endif
57 !
58 IMPLICIT NONE
59 !
60 #ifndef AIX64
61  include 'omp_lib.h'
62 #endif
63 !
64 !* 0.1 Declaration of arguments
65 ! ------------------------
66 !
67 TYPE(bem_t), INTENT(INOUT) :: B
68 TYPE(bem_options_t), INTENT(INOUT) :: BOP
69 TYPE(grid_t), INTENT(INOUT) :: G
70 TYPE(teb_t), INTENT(INOUT) :: T
71 TYPE(teb_options_t), INTENT(INOUT) :: TOP
72 !
73 INTEGER, INTENT(IN) :: KI ! number of points
74 INTEGER, INTENT(IN) :: KLUOUT ! output listing logical unit
75 !
76 !* 0.2 Declaration of local variables
77 ! ------------------------------
78 !
79 !-------------------------------------------------------------------------
80 !
81 TYPE(diag_misc_teb_t) :: YDMTC
82 TYPE(diag_misc_teb_t) :: YDMT
83 TYPE(diag_misc_teb_options_t) :: YDMTO
84 TYPE(teb_irrig_t) :: YTIR
85 !
86 ! Options TOP
87 !
88 LOGICAL :: GCANOPY
89  CHARACTER(LEN=3) :: YBEM
90  CHARACTER(LEN=6) :: YZ0H
91  CHARACTER(LEN=5) :: YCH_BEM
92 !
93 ! Teb Fields T
94 !
95 REAL, DIMENSION(KI) :: ZGD
96 !
97 ! Bem Options BOP
98 !
99  CHARACTER(LEN=6) :: YCOOL_COIL
100  CHARACTER(LEN=6) :: YHEAT_COIL
101 !
102 ! Bem!
103  CHARACTER(LEN=4),DIMENSION(KI) :: YNATVENT
104 REAL, DIMENSION(KI) :: ZF_WATER_COND
105 REAL, DIMENSION(KI) :: ZAUX_MAX
106 REAL, DIMENSION(KI) :: ZT_WIN2
107 LOGICAL, DIMENSION(KI) :: GNATVENT_NIGHT
108 !
109 ! Road irrigation (not used here)
110 !
111 TYPE(teb_irrig_t) :: YIR
112 !
113 !-------------------------------------------------------------------------
114 !
115 REAL, PARAMETER :: ZTSTEP = 300.
116 INTEGER, PARAMETER :: JPYEAR = 2004 ! Current year (UTC)
117 !
118 !local variable
119 !
120 INTEGER :: IMONTH = 7 ! Current month (UTC)
121 INTEGER :: IDAY = 12 ! Current day (UTC)
122 REAL :: ZTIME = 0. ! Time at start of the run (s)
123 !
124  CHARACTER(LEN=3) :: YIMPLICIT_WIND = 'NEW'
125 !
126 ! Loop control indexes
127 !
128 INTEGER :: JJ
129 INTEGER :: JFORC_STEP
130 INTEGER :: INB_STEP_ATM
131 !
132 ! Intermediate variables
133 !
134 REAL, DIMENSION(KI) :: ZU_RF
135 REAL, DIMENSION(KI) :: ZU_WL
136 !
137 REAL,DIMENSION(KI) :: ZT1 ! intermediate variable
138 REAL,DIMENSION(KI) :: ZTN ! intermediate variable
139 !
140 REAL, DIMENSION(KI) :: ZT_SKY
141 !
142 REAL, DIMENSION(KI) :: ZTOT_SW
143 REAL, DIMENSION(KI) :: ZTOUT_EQ
144 !
145 ! Arguments to TEB
146 !
147 REAL, DIMENSION(KI) :: ZT_CAN
148 REAL, DIMENSION(KI) :: ZQ_CAN
149 REAL, DIMENSION(KI) :: ZU_CAN
150 REAL, DIMENSION(KI) :: ZZ_LOWCAN
151 !
152 REAL, DIMENSION(KI) :: ZPS
153 REAL, DIMENSION(KI) :: ZPA
154 REAL, DIMENSION(KI) :: ZEXNS
155 REAL, DIMENSION(KI) :: ZEXNA
156 REAL, DIMENSION(KI) :: ZTA
157 REAL, DIMENSION(KI) :: ZQA
158 REAL, DIMENSION(KI) :: ZRHOA
159 REAL, DIMENSION(KI) :: ZLW_RAD
160 REAL, DIMENSION(KI) :: ZRR
161 REAL, DIMENSION(KI) :: ZSR
162 REAL, DIMENSION(KI) :: ZZREF
163 !
164 REAL, DIMENSION(KI) :: ZPEW_A_COEF
165 REAL, DIMENSION(KI) :: ZPEW_B_COEF
166 !
167 REAL, DIMENSION(KI) :: ZTS_GD
168 !
169 REAL, DIMENSION(KI) :: ZDF_RF
170 REAL, DIMENSION(KI) :: ZDN_RF
171 REAL, DIMENSION(KI) :: ZDN_RD
172 REAL, DIMENSION(KI) :: ZDF_RD
173 !
174 REAL, DIMENSION(KI) :: ZQSAT_RF
175 REAL, DIMENSION(KI) :: ZQSAT_RD
176 REAL, DIMENSION(KI) :: ZDELT_RF
177 REAL, DIMENSION(KI) :: ZDELT_RD
178 !
179  CHARACTER(LEN=4) :: YSNOW_RF
180  CHARACTER(LEN=4) :: YSNOW_RD
181 !
182 REAL, DIMENSION(KI) :: ZLW_WA_TO_WB ! longwave exchange coefficients
183 REAL, DIMENSION(KI) :: ZLW_WA_TO_R
184 REAL, DIMENSION(KI) :: ZLW_WB_TO_R
185 REAL, DIMENSION(KI) :: ZLW_WA_TO_NR
186 REAL, DIMENSION(KI) :: ZLW_WB_TO_NR
187 REAL, DIMENSION(KI) :: ZLW_R_TO_WA
188 REAL, DIMENSION(KI) :: ZLW_R_TO_WB
189 REAL, DIMENSION(KI) :: ZLW_G_TO_WA
190 REAL, DIMENSION(KI) :: ZLW_G_TO_WB
191 REAL, DIMENSION(KI) :: ZLW_S_TO_WA
192 REAL, DIMENSION(KI) :: ZLW_S_TO_WB
193 REAL, DIMENSION(KI) :: ZLW_S_TO_R
194 REAL, DIMENSION(KI) :: ZLW_S_TO_NR
195 REAL, DIMENSION(KI) :: ZLW_NR_TO_WA
196 REAL, DIMENSION(KI) :: ZLW_NR_TO_WB
197 REAL, DIMENSION(KI) :: ZLW_NR_TO_WIN
198 REAL, DIMENSION(KI) :: ZLW_WA_TO_WIN
199 REAL, DIMENSION(KI) :: ZLW_WB_TO_WIN
200 REAL, DIMENSION(KI) :: ZLW_G_TO_WIN
201 REAL, DIMENSION(KI) :: ZLW_R_TO_WIN
202 REAL, DIMENSION(KI) :: ZLW_S_TO_WIN
203 REAL, DIMENSION(KI) :: ZLW_WIN_TO_WA
204 REAL, DIMENSION(KI) :: ZLW_WIN_TO_WB
205 REAL, DIMENSION(KI) :: ZLW_WIN_TO_R
206 REAL, DIMENSION(KI) :: ZLW_WIN_TO_NR
207 !
208 REAL, DIMENSION(KI) :: ZLEW_RF ! latent heat flux over roof (snow)
209 !
210 REAL, DIMENSION(KI) :: ZLEW_RD ! latent heat flux over road (snow)
211 !
212 REAL, DIMENSION(KI) :: ZLE_WL_A ! latent heat flux over wall
213 REAL, DIMENSION(KI) :: ZLE_WL_B ! latent heat flux over wall
214 
215 !
216 REAL, DIMENSION(KI) :: ZRNSNOW_RF ! net radiation over snow
217 REAL, DIMENSION(KI) :: ZHSNOW_RF ! sensible heat flux over snow
218 REAL, DIMENSION(KI) :: ZLESNOW_RF ! latent heat flux over snow
219 REAL, DIMENSION(KI) :: ZGSNOW_RF ! flux under the snow
220 REAL, DIMENSION(KI) :: ZMELT_RF ! snow melt
221 !
222 REAL, DIMENSION(KI) :: ZRNSNOW_RD ! net radiation over snow
223 REAL, DIMENSION(KI) :: ZHSNOW_RD ! sensible heat flux over snow
224 REAL, DIMENSION(KI) :: ZLESNOW_RD ! latent heat flux over snow
225 REAL, DIMENSION(KI) :: ZGSNOW_RD ! flux under the snow
226 REAL, DIMENSION(KI) :: ZMELT_RD ! snow melt
227 !
228 REAL, DIMENSION(KI) :: ZUW_RD ! Momentum flux for roads
229 REAL, DIMENSION(KI) :: ZUW_RF ! Momentum flux for roofs
230 REAL, DIMENSION(KI) :: ZDUWDU_RD !
231 REAL, DIMENSION(KI) :: ZDUWDU_RF !
232 REAL, DIMENSION(KI) :: ZUSTAR_TWN ! friction velocity over town
233 !
234 REAL, DIMENSION(KI) :: ZCD ! town averaged drag coefficient
235 REAL, DIMENSION(KI) :: ZCDN ! town averaged neutral drag coefficient
236 REAL, DIMENSION(KI) :: ZCH_TWN ! town averaged heat transfer coefficient
237 REAL, DIMENSION(KI) :: ZRI_TWN ! town averaged Richardson number
238 REAL, DIMENSION(KI) :: ZRESA_TWN ! town aerodynamical resistance
239 REAL, DIMENSION(KI) :: ZAC_RF ! roof conductance
240 REAL, DIMENSION(KI) :: ZAC_RD ! road conductance
241 REAL, DIMENSION(KI) :: ZAC_WL ! wall conductance
242 REAL, DIMENSION(KI) :: ZAC_TOP ! top conductance
243 REAL, DIMENSION(KI) :: ZAC_GD ! garden conductance
244 REAL, DIMENSION(KI) :: ZAC_RF_WAT ! roof water conductance
245 REAL, DIMENSION(KI) :: ZAC_RD_WAT ! roof water conductance
246 REAL, DIMENSION(KI) :: ZEMIT_LW_FAC
247 REAL, DIMENSION(KI) :: ZEMIT_LW_RD
248 REAL, DIMENSION(KI) :: ZT_RAD_IND
249 REAL, DIMENSION(KI) :: ZHU_BLD
250 REAL, DIMENSION(KI) :: ZTSUN
251 !
252 ! Arguments to urban_solar_abs
253 !
254 REAL, DIMENSION(KI) :: ZZENITH
255 REAL, DIMENSION(KI) :: ZAZIM
256 !
257 REAL, DIMENSION(KI) :: ZDIR_SW
258 REAL, DIMENSION(KI) :: ZSCA_SW
259 !
260 REAL, DIMENSION(KI) :: ZFRAC_PANEL
261 REAL, DIMENSION(KI) :: ZALB_PANEL
262 REAL, DIMENSION(KI) :: ZSVF_GD
263 !
264 REAL, DIMENSION(KI) :: ZREC_SW_RD
265 REAL, DIMENSION(KI) :: ZREC_SW_SNOW_RD
266 REAL, DIMENSION(KI) :: ZREC_SW_WL_A
267 REAL, DIMENSION(KI) :: ZREC_SW_WL_B
268 REAL, DIMENSION(KI) :: ZREC_SW_GD
269 REAL, DIMENSION(KI) :: ZREC_SW_RF
270 !
271 REAL, DIMENSION(KI) :: ZDIR_ALB_TWN
272 REAL, DIMENSION(KI) :: ZSCA_ALB_TWN
273 REAL, DIMENSION(KI) :: ZSW_RAD_GD
274 REAL, DIMENSION(KI) :: ZREC_SW_WIN
275 REAL, DIMENSION(KI) :: ZREF_SW_GRND
276 REAL, DIMENSION(KI) :: ZREF_SW_FAC
277 !
278 REAL, DIMENSION(KI) :: ZALB_GR
279 REAL, DIMENSION(KI) :: ZALB_GD
280 !
281 ! Arguments to urban_lw_coef
282 !
283 REAL, DIMENSION(KI) :: ZEMIS_GD
284 !
285 REAL, DIMENSION(KI) :: ZLW_WA_TO_G
286 REAL, DIMENSION(KI) :: ZLW_WB_TO_G
287 REAL, DIMENSION(KI) :: ZLW_S_TO_G
288 REAL, DIMENSION(KI) :: ZLW_WIN_TO_G
289 !
290 !! GREGOIRE 13/03
291 !
292 !
293 !new for shading
294 REAL, DIMENSION(KI) :: ZE_SHADING
295 LOGICAL, DIMENSION(KI) :: GSHAD_DAY
296 LOGICAL, DIMENSION(KI) :: GSHADE
297 !
298 !
299 ! Case greenroof
300 REAL, DIMENSION(KI) :: ZUW_GR
301 REAL, DIMENSION(KI) :: ZRN_GR
302 REAL, DIMENSION(KI) :: ZH_GR
303 REAL, DIMENSION(KI) :: ZLE_GR
304 REAL, DIMENSION(KI) :: ZGFLUX_GR
305 REAL, DIMENSION(KI) :: ZRUNOFF_GR
306 REAL, DIMENSION(KI) :: ZDRAIN_GR
307 !
308 REAL(KIND=JPRB) :: ZHOOK_HANDLE
309 !
310 !* 0. Initialization
311 ! --------------
312 !
313 IF (lhook) CALL dr_hook('HVAC_AUTOSIZE',0,zhook_handle)
314 !
315 ! Design parameters
316 !
317 zps = 101325.
318 zpa = zps
319 zexns = (zps/xp00)**(xrd/xcpd)
320 zexna = (zpa/xp00)**(xrd/xcpd)
321 zqa = 0.011
322 zlw_rad= 300.
323 zrr = 0.0
324 zsr = 0.0
325 zzref = 50.
326 !
327 zpew_a_coef = 0.5
328 zpew_b_coef = 0.5
329 !
330 ! initial value for air temperature and outdoor wall/roof/window/road temperature
331 zt_can(:) = 10.7/2 * sin(2*xpi/(24*3600) * (ztime+16*3600)) + (b%XT_SIZE_MAX(:)-10.7/2)
332 !
333 zq_can = 0.011
334 zu_can = 2.5
335 zz_lowcan = zzref
336 !
337 !
338 zts_gd = 300.
339 !
340 zdn_rf = 0.0
341 zdf_rf = 1.0
342 zdn_rd = 0.0
343 zdf_rd = 1.0
344 !
345 zqsat_rf = 0.015
346 zqsat_rd = 0.015
347 zdelt_rf = 0.0
348 zdelt_rd = 0.0
349 !
350 !
351 !
352 !* A. Autosize of the heating system
353 ! ---------------------------------
354 !
355 zu_rf(:) = 0.0
356 DO jj=1,top%NROOF_LAYER
357  zu_rf(:) = zu_rf(:) + t%XD_ROOF(:,jj)/t%XTC_ROOF(:,jj)
358 END DO
359 zu_rf(:) = zu_rf(:) + 1./10. + 1./25.
360 zu_rf(:) = 1. / zu_rf(:)
361 !
362 zu_wl(:) = 0.0
363 DO jj=1,top%NWALL_LAYER
364  zu_wl(:) = zu_wl(:) + t%XD_WALL(:,jj)/t%XTC_WALL(:,jj)
365 END DO
366 zu_wl(:) = zu_wl(:) + 1./10. + 1./25.
367 zu_wl(:) = 1. / zu_wl(:)
368 !
369 zrhoa = 1.30
370 zt_sky = 253.15
371 ztout_eq(:) = (b%XT_SIZE_MIN(:) + zt_sky(:))/2.
372 !
373 ! Heating Coil Capacity [W m-2(bld)]
374 b%XCAP_SYS_HEAT(:) = zu_wl(:) * t%XWALL_O_BLD(:) * (b%XTHEAT_TARGET(:) - ztout_eq(:)) &
375  + b%XU_WIN(:) * b%XGLAZ_O_BLD(:) * (b%XTHEAT_TARGET(:) - ztout_eq(:)) &
376  + zu_rf(:) * (b%XTHEAT_TARGET(:) - ztout_eq(:)) &
377  - b%XQIN(:) * t%XBLD_HEIGHT(:) / b%XFLOOR_HEIGHT(:)* &
378  (1 - b%XQIN_FLAT(:)) &
379  + b%XINF(:) * t%XBLD_HEIGHT(:) / 3600* zrhoa(:) * xcpd * &
380  (b%XTHEAT_TARGET(:) - b%XT_SIZE_MIN(:)) &
381  + b%XV_VENT(:) * t%XBLD_HEIGHT(:) / 3600* zrhoa(:) * xcpd * &
382  (b%XTHEAT_TARGET(:) - b%XT_SIZE_MIN(:))
383 !
384 ! Rated air flow rate [kg s-1 m-2(bld)]
385 b%XM_SYS_RAT(:) = b%XCAP_SYS_HEAT(:)/xcpd/(323.15 - b%XTHEAT_TARGET(:))
386 !
387 ! Initialization
388 b%XCAP_SYS_RAT = 0.
389 !
390 !* B. Autosize of the cooling system
391 ! -----------------------------------
392 !
393 zrhoa = 1.15
394 !
395 !-------------------------------------------------------
396 !
397 ! Initial values
398 !
399 ! Options TOP
400 !
401 ybem = top%CBEM
402 top%CBEM = "BEM"
403 !
404 yz0h = top%CZ0H
405 top%CZ0H = 'KAND07'
406 !
407 gcanopy = top%LCANOPY
408 top%LCANOPY = .false.
409 !
410 ych_bem = top%CCH_BEM
411 top%CCH_BEM = 'DOE-2'
412 !
413 !
414 ! Teb Fields T
415 !
416 ALLOCATE(t%XWS_ROOF(ki))
417 ALLOCATE(t%XWS_ROAD(ki))
418 t%XWS_ROOF = 0.0
419 t%XWS_ROAD = 0.0
420 !
421 ALLOCATE(t%TSNOW_ROOF%WSNOW(ki,1))
422 ALLOCATE(t%TSNOW_ROOF%T (ki,1))
423 ALLOCATE(t%TSNOW_ROOF%ALB (ki))
424 ALLOCATE(t%TSNOW_ROOF%RHO (ki,1))
425 ALLOCATE(t%TSNOW_ROOF%TS (ki))
426 ALLOCATE(t%TSNOW_ROOF%EMIS (ki))
427 !
428 ysnow_rf = t%TSNOW_ROOF%SCHEME
429 t%TSNOW_ROOF%SCHEME = 'NONE'
430 t%TSNOW_ROOF%WSNOW = 0.0
431 t%TSNOW_ROOF%T = 273.0
432 t%TSNOW_ROOF%RHO = 0.0
433 t%TSNOW_ROOF%ALB = 0.8
434 t%TSNOW_ROOF%TS = 273.0
435 t%TSNOW_ROOF%EMIS = 0.0
436 !
437 ALLOCATE(t%TSNOW_ROAD%WSNOW(ki,1))
438 ALLOCATE(t%TSNOW_ROAD%T (ki,1))
439 ALLOCATE(t%TSNOW_ROAD%ALB (ki))
440 ALLOCATE(t%TSNOW_ROAD%RHO (ki,1))
441 ALLOCATE(t%TSNOW_ROAD%TS (ki))
442 ALLOCATE(t%TSNOW_ROAD%EMIS (ki))
443 !
444 ysnow_rd = t%TSNOW_ROAD%SCHEME
445 t%TSNOW_ROAD%SCHEME = 'NONE'
446 t%TSNOW_ROAD%WSNOW = 0.0
447 t%TSNOW_ROAD%T = 273.0
448 t%TSNOW_ROAD%RHO = 0.0
449 t%TSNOW_ROAD%ALB = 0.8
450 t%TSNOW_ROAD%TS = 273.0
451 t%TSNOW_ROAD%EMIS = 1.0
452 !
453 zgd = t%XGARDEN
454 t%XGARDEN = 0.
455 !
456 !------------------------------------------------
457 !BEM
458 !
459 ycool_coil = bop%CCOOL_COIL
460 bop%CCOOL_COIL = 'IDEAL '
461 yheat_coil = bop%CHEAT_COIL
462 bop%CHEAT_COIL ='IDEAL '
463 !
464 !!TI_BLD
465 ALLOCATE(b%XTI_BLD(ki))
466 !! !ZTI_BLD = 297.16 ! indoor air temperature
467 DO jj=1,ki
468  b%XTI_BLD(jj) = max(b%XTHEAT_TARGET(jj),zt_can(jj)) ! indoor air temperature
469 ENDDO
470 !
471 !T_FLOOR, T_MASS
472 ALLOCATE(b%XT_FLOOR(ki,bop%NFLOOR_LAYER))
473 ALLOCATE(b%XT_MASS (ki,bop%NFLOOR_LAYER))
474 !
475 DO jj=1,bop%NFLOOR_LAYER
476  b%XT_FLOOR(:,jj) = b%XTI_BLD(:) ! building floor temperature
477  b%XT_MASS(:,jj) = b%XTI_BLD(:) ! building mass temperature
478 ENDDO
479 !
480 !OUTDOOR WINDOW TEMPERATURE
481 ALLOCATE(b%XT_WIN1(ki))
482 b%XT_WIN1(:) = zt_can(:)
483 !!
484 ALLOCATE(b%XT_WIN2(ki))
485 b%XT_WIN2(:) = b%XTI_BLD(:)
486 !
487 ynatvent(:) = b%CNATVENT(:)
488 b%CNATVENT(:) = 'NONE'
489 zf_water_cond(:) = b%XF_WATER_COND(:)
490 b%XF_WATER_COND(:) = 0.
491 zaux_max = b%XAUX_MAX
492 b%XAUX_MAX = 0.
493 !
494 ALLOCATE(b%XQI_BLD(ki))
495 b%XQI_BLD = 0.011
496 !
497 gnatvent_night(:) = b%LNATVENT_NIGHT(:)
498 b%LNATVENT_NIGHT(:) = .false.
499 !
500 !
501 ! TEB
502 !
503 ALLOCATE(t%XT_ROOF (ki,top%NROOF_LAYER))
504 ALLOCATE(t%XT_ROAD (ki,top%NROAD_LAYER))
505 ALLOCATE(t%XT_WALL_A(ki,top%NWALL_LAYER))
506 ALLOCATE(t%XT_WALL_B(ki,top%NWALL_LAYER))
507 !
508 !RF
509 t%XT_ROOF (:,top%NROOF_LAYER) = b%XTI_BLD(:) ! roof layers temperatures
510 t%XT_ROOF(:,1) = zt_can(:)
511 zt1(:) = t%XT_ROOF(:,1)
512 ztn(:) = t%XT_ROOF(:,top%NROOF_LAYER)
513 IF (top%NROOF_LAYER .GT. 2) CALL interp_proftwl(zt1, ztn, t%XD_ROOF, t%XT_ROOF)
514 !
515 !RD
516 DO jj=1,top%NROAD_LAYER
517  t%XT_ROAD(:,jj) = zt_can(:)
518 ENDDO
519 !
520 !WL_A
521 t%XT_WALL_A(:,top%NWALL_LAYER) = b%XTI_BLD(:) ! wall layers temperatures
522 t%XT_WALL_A(:,1) = zt_can(:)
523 zt1(:)=t%XT_WALL_A(:,1)
524 ztn(:)=t%XT_WALL_A(:,top%NWALL_LAYER)
525 IF (top%NWALL_LAYER .GT. 2) CALL interp_proftwl(zt1, ztn, t%XD_WALL, t%XT_WALL_A)
526 !
527 !WL_B
528 t%XT_WALL_B = t%XT_WALL_A
529 !
530 !
531 !* road watering (not used)
532 yir%LPAR_RD_IRRIG = .false.
533 !
534 ALLOCATE(yir%XRD_START_MONTH(ki))
535 ALLOCATE(yir%XRD_END_MONTH (ki))
536 ALLOCATE(yir%XRD_START_HOUR (ki))
537 ALLOCATE(yir%XRD_END_HOUR (ki))
538 ALLOCATE(yir%XRD_24H_IRRIG (ki))
539 !
540 yir%XRD_START_MONTH = 1.
541 yir%XRD_END_MONTH = 1.
542 yir%XRD_START_HOUR = 0.
543 yir%XRD_END_HOUR = 24.
544 yir%XRD_24H_IRRIG = 0.
545 !
546 !----------------------------------------------
547 !
548 ! greenroofs are not taken into account in the building's HVAC equipment sizing process
549 !
550 zrn_gr(:) = 0.
551 zh_gr(:) = 0.
552 zle_gr(:) = 0.
553 zgflux_gr(:) = 0.
554 zrunoff_gr(:) = 0.
555 zdrain_gr(:) = 0.
556 !
557  CALL diag_misc_teb_init(ydmt)
558 !
559 zuw_gr(:) = 0.
560 !
561 zac_gd(:) = 0.
562 !
563 zfrac_panel = 0.
564 zalb_panel = 0.1
565 zsvf_gd(:) = 0.
566 zalb_gd(:) = 0.
567 zalb_gr(:) = 0.
568 gshade(:) = .false.
569 gshad_day(:) = .false.
570 ze_shading(:) = 0.
571 !
572  CALL diag_misc_teb_options_init(ydmto)
573  CALL diag_misc_teb_init(ydmtc)
574 !
575  ydmto%LSURF_MISC_BUDGET = .true.
576  CALL diag_misc_teb_init_n(ydmtc, ydmt, ydmto, top, ki, 0)
577 !
578 !* one supposes zero conduction heat flux between the greenroof and the nnroof.
579 ydmt%XG_GREENROOF_ROOF(:) = 0.
580 !
581 ydmt%XQIN(:) = b%XQIN(:)
582 !
583 ydmt%XT_SYS(:) = b%XTI_BLD(:)
584 ydmt%XQ_SYS(:) = b%XQI_BLD(:)
585 !
586 ydmt%XTHEAT_TARGET(:) = b%XTHEAT_TARGET(:)
587 ydmt%XTCOOL_TARGET(:) = b%XTCOOL_TARGET(:)
588 !
589 inb_step_atm = 3600*24*4/ztstep
590 DO jforc_step= 1,inb_step_atm
591 !
592 ! Daily outdoor air temperature cycle
593  zt_can(:) = 10.7/2 * sin(2*xpi/(24*3600) * (ztime+16*3600)) &
594  + (b%XT_SIZE_MAX(:)-10.7/2)
595  zta(:) = zt_can(:)
596 !
597 !
598 !* B.1 Solar radiation
599 ! ---------------
600 !
601  CALL sunpos(jpyear, imonth, iday, ztime, g%XLON, g%XLAT, ztsun, zzenith, zazim)
602 !
603  CALL sw_daycycle(ki, zzenith, ztot_sw)
604 !
605  zdir_sw(:) = 0.88 * ztot_sw(:) * 0.85 ! manual adjustment
606  zsca_sw(:) = 0.12 * ztot_sw(:) * 0.85 ! manual adjustment
607  WHERE (zdir_sw < 0.0)
608  zdir_sw = 0.0
609  END WHERE
610  WHERE (zsca_sw < 0.0)
611  zsca_sw = 0.0
612  END WHERE
613 !
614 !
615 ! solar panels are not taken into account in the building's HVAC equipment sizing process
616  CALL urban_solar_abs(top, t, b, ydmt, zdir_sw, zsca_sw, zzenith, zazim,&
617  zfrac_panel, zalb_panel, zalb_gd, zsvf_gd,&
618  zalb_gr, zdn_rf, zdf_rf, zdn_rd, &
619  zdf_rd, zrec_sw_rd, zrec_sw_snow_rd, &
620  zrec_sw_wl_a, zrec_sw_wl_b, zrec_sw_gd, &
621  zrec_sw_rf, zdir_alb_twn, zsca_alb_twn, &
622  zsw_rad_gd, zrec_sw_win, zref_sw_grnd, &
623  zref_sw_fac, ze_shading, gshad_day, gshade )
624 !
625 !
626 !* B.2 LW properties
627 ! -------------
628 !
629  zemis_gd = 1.0
630  CALL urban_lw_coef(b, t, zlw_rad, zemis_gd, &
631  t%TSNOW_ROAD%TS, zts_gd, &
632  zlw_wa_to_wb, zlw_wa_to_r, zlw_wb_to_r, &
633  zlw_wa_to_nr,zlw_wb_to_nr, &
634  zlw_wa_to_g, zlw_wb_to_g, &
635  zlw_wa_to_win, zlw_wb_to_win, &
636  zlw_r_to_wa, zlw_r_to_wb, zlw_r_to_win, &
637  zlw_g_to_wa, zlw_g_to_wb, zlw_g_to_win, &
638  zlw_s_to_wa, zlw_s_to_wb, zlw_s_to_r, &
639  zlw_s_to_nr, zlw_s_to_g, zlw_s_to_win, &
640  zlw_win_to_wa, zlw_win_to_wb, zlw_win_to_r, &
641  zlw_win_to_nr, zlw_win_to_g, &
642  zlw_nr_to_wa, zlw_nr_to_wb, zlw_nr_to_win )
643 !
644 !* B.3 TEB simulation
645 ! -------------
646 !
647  CALL teb (top, t, bop, b, yir, ydmt, yimplicit_wind, ztsun, &
648  zt_can, zq_can, zu_can, zt_can, zq_can, zu_can, zz_lowcan, &
649  zpew_a_coef, zpew_b_coef, zpew_a_coef, zpew_b_coef, zps, zpa, &
650  zexns, zexna, zta, zqa, zrhoa, zlw_rad, zrr, zsr, zzref, zzref, &
651  zu_can, t%XH_TRAFFIC, t%XLE_TRAFFIC, ztstep, zdf_rf, zdn_rf, &
652  zdf_rd, zdn_rd, zqsat_rf, zqsat_rd, zdelt_rf, zdelt_rd, zts_gd, &
653  zlew_rf, zuw_gr, zlew_rd, zle_wl_a, zle_wl_b,zrnsnow_rf, &
654  zhsnow_rf, zlesnow_rf, zgsnow_rf, zmelt_rf, zrn_gr, zh_gr, &
655  zle_gr, zgflux_gr, zdrain_gr, zrunoff_gr, zrnsnow_rd, &
656  zhsnow_rd, zlesnow_rd, zgsnow_rd, zmelt_rd, zuw_rd, zuw_rf, &
657  zduwdu_rd, zduwdu_rf, zustar_twn, zcd, zcdn, zch_twn, zri_twn, &
658  zresa_twn, zac_rf, zac_rd, zac_wl, zac_top, zac_gd, zac_rf_wat, &
659  zac_rd_wat, zlw_wa_to_wb, zlw_wa_to_r, zlw_wb_to_r, &
660  zlw_wa_to_nr, zlw_wb_to_nr, zlw_r_to_wa, zlw_r_to_wb, &
661  zlw_g_to_wa, zlw_g_to_wb, zlw_s_to_wa, zlw_s_to_wb, zlw_s_to_r, &
662  zlw_s_to_nr, zlw_nr_to_wa, zlw_nr_to_wb, zlw_nr_to_win, &
663  zlw_wa_to_win, zlw_wb_to_win, zlw_g_to_win, zlw_r_to_win, &
664  zlw_s_to_win, zlw_win_to_wa, zlw_win_to_wb, zlw_win_to_r, &
665  zlw_win_to_nr, iday, zemit_lw_fac, zemit_lw_rd, zt_rad_ind, &
666  zhu_bld, ztime, ze_shading )
667 !
668 ! Time update
669  ztime = ztime + ztstep
670  IF (ztime >= 86400) THEN
671  ztime = 0.0
672  iday = iday + 1
673  END IF
674 !
675 ENDDO
676 !
677 b%XQIN(:) = ydmt%XQIN(:)
678 b%XTHEAT_TARGET(:) = ydmt%XTHEAT_TARGET(:)
679 b%XTCOOL_TARGET(:) = ydmt%XTCOOL_TARGET(:)
680 !
681  CALL teb_irrig_init(yir)
682  CALL diag_misc_teb_init(ydmt)
683  CALL diag_misc_teb_init(ydmtc)
684 !----------------------------------------------------
685 !
686 ! Options
687 !
688 top%CZ0H = yz0h
689 top%CBEM = ybem
690 top%LCANOPY = gcanopy
691 top%CCH_BEM = ych_bem
692 !
693 ! Teb Fields T
694 !
695 DEALLOCATE(t%XWS_ROOF,t%XWS_ROAD)
696 !
697 t%TSNOW_ROOF%SCHEME = ysnow_rf
698 DEALLOCATE(t%TSNOW_ROOF%WSNOW)
699 DEALLOCATE(t%TSNOW_ROOF%T)
700 DEALLOCATE(t%TSNOW_ROOF%ALB)
701 DEALLOCATE(t%TSNOW_ROOF%RHO)
702 DEALLOCATE(t%TSNOW_ROOF%TS)
703 DEALLOCATE(t%TSNOW_ROOF%EMIS)
704 !
705 t%TSNOW_ROAD%SCHEME = ysnow_rd
706 DEALLOCATE(t%TSNOW_ROAD%WSNOW)
707 DEALLOCATE(t%TSNOW_ROAD%T)
708 DEALLOCATE(t%TSNOW_ROAD%ALB)
709 DEALLOCATE(t%TSNOW_ROAD%RHO)
710 DEALLOCATE(t%TSNOW_ROAD%TS)
711 DEALLOCATE(t%TSNOW_ROAD%EMIS)
712 !
713 t%XGARDEN = zgd
714 !
715 !------------------------------------------------
716 !BEM
717 !
718 bop%CCOOL_COIL = ycool_coil
719 bop%CHEAT_COIL = yheat_coil
720 !
721 !!TI_BLD
722 DEALLOCATE(b%XTI_BLD)
723 !
724 !T_FLOOR, T_MASS
725 DEALLOCATE(b%XT_FLOOR,b%XT_MASS)
726 !
727 !OUTDOOR WINDOW TEMPERATURE
728 DEALLOCATE(b%XT_WIN1)
729 DEALLOCATE(b%XT_WIN2)
730 !
731 b%CNATVENT(:) = ynatvent(:)
732 b%XF_WATER_COND(:) = zf_water_cond(:)
733 b%XAUX_MAX = zaux_max
734 !
735 DEALLOCATE(b%XQI_BLD)
736 !
737 b%LNATVENT_NIGHT(:) = gnatvent_night(:)
738 !
739 ! TEB
740 !
741 DEALLOCATE(t%XT_ROOF,t%XT_ROAD,t%XT_WALL_A,t%XT_WALL_B)
742 !
743 !--------------------------------------------------------
744 !
745 ! -----------------------------------------------------------
746 ! Print autosize results
747 ! -----------------------------------------------------------
748 !
749 WRITE(kluout,*) ' '
750 WRITE(kluout,*) ' --------------------------------'
751 WRITE(kluout,*) ' HVAC AUTOSIZE CALCULATIONS '
752 WRITE(kluout,*) ' '
753 WRITE(kluout,*) ' Rated mass flow rate:'
754 WRITE(kluout,*) ' ',maxval(b%XM_SYS_RAT), 'kg s-1 m-2(bld)'
755 WRITE(kluout,*) ' ',minval(b%XM_SYS_RAT), 'kg s-1 m-2(bld)'
756 WRITE(kluout,*) ' Rated cooling system capacity:'
757 WRITE(kluout,*) ' ',maxval(b%XCAP_SYS_RAT), 'W m-2(bld)'
758 WRITE(kluout,*) ' ',minval(b%XCAP_SYS_RAT), 'W m-2(bld)'
759 WRITE(kluout,*) ' Rated heating sysem capacity:'
760 WRITE(kluout,*) ' ',maxval(b%XCAP_SYS_HEAT), 'W m-2(bld)'
761 WRITE(kluout,*) ' ',minval(b%XCAP_SYS_HEAT), 'W m-2(bld)'
762 WRITE(kluout,*) ' --------------------------------'
763 WRITE(kluout,*) ' '
764 IF (lhook) CALL dr_hook('HVAC_AUTOSIZE',1,zhook_handle)
765 !
766 CONTAINS
767 !
768 SUBROUTINE interp_proftwl(PT1, PTN, PD, PT)
769 !interpolation of vertical profile for 'wall' : roof/wall
770 !arguments
771 REAL, DIMENSION(:), INTENT(IN) :: PT1 !temperature layer 1
772 REAL, DIMENSION(:), INTENT(IN) :: PTN !temperature layer N
773 REAL, DIMENSION(:,:), INTENT(IN) :: PD !depth of all layers
774 REAL, DIMENSION(:,:), INTENT(OUT) :: PT !temperature of all layers
775 !local variables
776 INTEGER :: ILAYER ! number of layers
777 REAL, DIMENSION(SIZE(PT1)) :: ZDN ! total depth from mid layer 1 to mid layer n
778 REAL, DIMENSION(SIZE(PT1)) :: ZD ! sequential depth in the calculation
779 INTEGER :: JJ, JI
780 
781 ilayer=SIZE(pd,2)
782 DO ji=1,ki
783  zdn(ji) = 0.5 * pd(ji,1)
784  DO jj=2,ilayer-1
785  zdn(ji) = zdn(ji) + pd(ji,jj)
786  ENDDO
787  zdn(ji) = zdn(ji) + 0.5 * pd(ji,ilayer)
788 ENDDO
789 DO ji=1,ki
790  zd(ji) = 0.5*pd(ji,1)
791  DO jj=2,ilayer-1
792  zd(ji) = zd(ji) + 0.5*pd(ji,jj)
793  pt(ji,jj) = pt1(ji) + (ptn(ji)-pt1(ji)) / zdn(ji) * zd(ji)
794  zd(ji) = zd(ji) + 0.5 * pd(ji,jj)
795  ENDDO
796  pt(ji,1) = pt1(ji)
797  pt(ji,ilayer) = ptn(ji)
798 ENDDO
799 END SUBROUTINE interp_proftwl
800 
801 END SUBROUTINE hvac_autosize
subroutine teb_irrig_init(YTEB_IRRIG)
subroutine sw_daycycle(KI, PZENITH, PTOT_SW)
Definition: sw_daycycle.F90:7
real, save xcpd
Definition: modd_csts.F90:63
subroutine diag_misc_teb_options_init(YDIAG_MISC_TEB_OPTIONS)
real, save xstefan
Definition: modd_csts.F90:59
subroutine urban_solar_abs(TOP, T, B, DMT, PDIR_SW, PSCA_SW, PZENITH, PAZIM, PFRAC_PANEL, PALB_PANEL, PALB_GD, PSVF_GD, PALB_GRF, PDN_RF, PDF_RF, PDN_RD, PDF_RD, PREC_SW_RD, PREC_SW_SN_RD, PREC_SW_WL_A, PREC_SW_WL_B, PREC_SW_GD, PREC_SW_RF, PDIR_ALB_TWN, PSCA_ALB_TWN, PSW_RAD_GD, PREC_SW_WIN, PREF_SW_GRND, PREF_SW_FAC, PE_SHADING, OSHAD_DAY, OSHADE, OALB_ONLY)
real, save xpi
Definition: modd_csts.F90:43
subroutine diag_misc_teb_init_n(DMTC, DMT, DMTO, TOP, KLU, KSW)
real, save xrd
Definition: modd_csts.F90:62
subroutine teb(TOP, T, BOP, B, TIR, DMT, HIMPLICIT_WIND, PTSUN, PT_CANYON, PQ_CANYON, PU_CANYON, PT_LOWCAN, PQ_LOWCAN, PU_LOWCAN, PZ_LOWCAN, PPEW_A_COEF, PPEW_B_COEF, PPEW_A_COEF_LOWCAN, PPEW_B_COEF_LOWCAN, PPS, PPA, PEXNS, PEXNA, PTA, PQA, PRHOA, PLW_RAD, PRR, PSR, PZREF, PUREF, PVMOD, PH_TRAFFIC, PLE_TRAFFIC, PTSTEP, PDF_RF, PDN_RF, PDF_RD, PDN_RD, PQSAT_RF, PQSAT_RD, PDELT_RF, PDELT_RD, PTS_GARDEN, PLEW_RF, PUW_GR, PLEW_RD, PLE_WL_A, PLE_WL_B, PRNSN_RF, PHSN_RF, PLESN_RF, PGSN_RF, PMELT_RF, PRN_GR, PH_GR, PLE_GR, PGFLUX_GR, PDRAIN_GR, PRUNOFF_GR, PRNSN_RD, PHSN_RD, PLESN_RD, PGSN_RD, PMELT_RD, PUW_RD, PUW_RF, PDUWDU_RD, PDUWDU_RF, PUSTAR_TWN, PCD, PCDN, PCH_TWN, PRI_TWN, PRESA_TWN, PAC_RF, PAC_RD, PAC_WL, PAC_TOP, PAC_GARDEN, PAC_RF_WAT, PAC_RD_WAT, PLW_WA_TO_WB, PLW_WA_TO_R, PLW_WB_TO_R, PLW_WA_TO_NR, PLW_WB_TO_NR, PLW_R_TO_WA, PLW_R_TO_WB, PLW_G_TO_WA, PLW_G_TO_WB, PLW_S_TO_WA, PLW_S_TO_WB, PLW_S_TO_R, PLW_S_TO_NR, PLW_NR_TO_WA, PLW_NR_TO_WB, PLW_NR_TO_WIN, PLW_WA_TO_WIN, PLW_WB_TO_WIN, PLW_G_TO_WIN, PLW_R_TO_WIN, PLW_S_TO_WIN, PLW_WIN_TO_WA, PLW_WIN_TO_WB, PLW_WIN_TO_R, PLW_WIN_TO_NR, KDAY, PEMIT_LW_FAC, PEMIT_LW_RD, PT_RAD_IND, PHU_BLD, PTIME, PE_SHADING)
Definition: teb.F90:25
subroutine urban_lw_coef(B, T, PLW_RAD, PEMIS_G, PTS_SR, PTS_G, PLW_WA_TO_WB, PLW_WA_TO_R, PLW_WB_TO_R, PLW_WA_TO_NR, PLW_WB_TO_NR, PLW_WA_TO_G, PLW_WB_TO_G, PLW_WA_TO_WIN, PLW_WB_TO_WIN, PLW_R_TO_WA, PLW_R_TO_WB, PLW_R_TO_WIN, PLW_G_TO_WA, PLW_G_TO_WB, PLW_G_TO_WIN, PLW_S_TO_WA, PLW_S_TO_WB, PLW_S_TO_R, PLW_S_TO_NR, PLW_S_TO_G, PLW_S_TO_WIN, PLW_WIN_TO_WA, PLW_WIN_TO_WB, PLW_WIN_TO_R, PLW_WIN_TO_NR, PLW_WIN_TO_G, PLW_NR_TO_WA, PLW_NR_TO_WB, PLW_NR_TO_WIN)
subroutine sunpos(KYEAR, KMONTH, KDAY, PTIME, PLON, PLAT, PTSUN, PZENITH, PAZIMSOL)
Definition: sunpos.F90:8
integer, parameter jprb
Definition: parkind1.F90:32
subroutine diag_misc_teb_init(YDIAG_MISC_TEB)
subroutine interp_proftwl(PT1, PTN, PD, PT)
subroutine hvac_autosize(B, BOP, G, T, TOP, KI, KLUOUT)
logical lhook
Definition: yomhook.F90:15
real, save xp00
Definition: modd_csts.F90:57