SURFEX v8.1
General documentation of Surfex
ini_data_param_teb.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 ini_data_param_teb (BDD, &
7  KTYPE, &
8  PZ0_TOWN, PALB_ROOF, PALB_ROAD, PALB_WALL, &
9  PEMIS_ROOF, PEMIS_ROAD, PEMIS_WALL, PHC_ROOF, &
10  PHC_ROAD, PHC_WALL, PTC_ROOF, PTC_ROAD, PTC_WALL, &
11  PD_ROOF, PD_ROAD, PD_WALL, PBLD_HEIGHT, &
12  PWALL_O_HOR, PBLD, PCAN_HW_RATIO, PH_TRAFFIC, &
13  PLE_TRAFFIC, PH_INDUSTRY, PLE_INDUSTRY, &
14  PGARDEN, OGARDEN, PHC_FLOOR, &
15  PTC_FLOOR, PD_FLOOR, PTCOOL_TARGET, PTHEAT_TARGET, &
16  PF_WASTE_CAN, PEFF_HEAT, PQIN, PQIN_FRAD, PSHGC, &
17  PU_WIN, PGR, PSHGC_SH, PFLOOR_HEIGHT, PINF, &
18  PF_WATER_COND, PQIN_FLAT, PHR_TARGET, PV_VENT, &
19  PCAP_SYS_HEAT, PCAP_SYS_RAT, PT_ADP, PM_SYS_RAT, &
20  PCOP_RAT, PT_SIZE_MAX, PT_SIZE_MIN, PSHADE, &
21  PNATVENT, PROUGH_ROOF, PROUGH_WALL, PGREENROOF, &
22  PRESIDENTIAL, &
23  PEMIS_PANEL, PALB_PANEL, PEFF_PANEL, PFRAC_PANEL )
24 
25 ! #########################
26 !
27 !!
28 !! PURPOSE
29 !! -------
30 !!
31 !! METHOD
32 !! ------
33 !!
34 !!
35 !! EXTERNAL
36 !! --------
37 !!
38 !! IMPLICIT ARGUMENTS
39 !! ------------------
40 !!
41 !! REFERENCE
42 !! ---------
43 !!
44 !! AUTHOR
45 !! ------
46 !!
47 !! S. Faroux & V. Masson Meteo-France
48 !!
49 !! MODIFICATION
50 !! ------------
51 !!
52 !! Original 05/2012 from INI_DATA_PARAM_TEB, separates urban parameters
53 !! modified 08/2012 add PROUGH_ROOF, PROUGH_WALL
54 !! V. Masson 08/2013 add solar panels
55 !! V. Masson 10/2013 add residential use fraction
56 !----------------------------------------------------------------------------
57 !
58 !* 0. DECLARATION
59 ! -----------
60 !
61 !
62 !
64 !
65 USE modi_abor1_sfx
66 !
67 !
68 USE yomhook ,ONLY : lhook, dr_hook
69 USE parkind1 ,ONLY : jprb
70 !
71 IMPLICIT NONE
72 !
73 !* 0.1 Declaration of arguments
74 ! ------------------------
75 !
76 !
77 TYPE(bld_desc_t), INTENT(INOUT) :: BDD
78 !
79 INTEGER, DIMENSION(:), INTENT(IN) :: KTYPE
80 !
81 ! town parameters
82 ! ---------------
83 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PZ0_TOWN
84 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PALB_ROOF
85 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PALB_ROAD
86 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PALB_WALL
87 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PEMIS_ROOF
88 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PEMIS_ROAD
89 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PEMIS_WALL
90 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PHC_ROOF
91 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PHC_ROAD
92 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PHC_WALL
93 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PTC_ROOF
94 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PTC_ROAD
95 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PTC_WALL
96 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PD_ROOF
97 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PD_ROAD
98 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PD_WALL
99 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PBLD_HEIGHT
100 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PWALL_O_HOR
101 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PBLD
102 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PCAN_HW_RATIO
103 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PH_TRAFFIC
104 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PLE_TRAFFIC
105 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PH_INDUSTRY
106 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PLE_INDUSTRY
107 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PGARDEN
108 LOGICAL, INTENT(IN), OPTIONAL :: OGARDEN
109 !
110 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PHC_FLOOR
111 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PTC_FLOOR
112 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PD_FLOOR
113 !
114 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PTCOOL_TARGET
115 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PTHEAT_TARGET
116 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PF_WASTE_CAN
117 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PEFF_HEAT
118 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PQIN
119 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PQIN_FRAD
120 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PSHGC
121 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PU_WIN
122 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PGR
123 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PSHGC_SH
124 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PFLOOR_HEIGHT
125 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PINF
126 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PF_WATER_COND
127 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PQIN_FLAT
128 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PHR_TARGET
129 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PV_VENT
130 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PCAP_SYS_HEAT
131 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PCAP_SYS_RAT
132 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PT_ADP
133 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PM_SYS_RAT
134 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PCOP_RAT
135 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PT_SIZE_MAX
136 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PT_SIZE_MIN
137 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PSHADE
138 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PNATVENT
139 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PROUGH_ROOF
140 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PROUGH_WALL
141 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PRESIDENTIAL
142 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PGREENROOF
143 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PEMIS_PANEL
144 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PALB_PANEL
145 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PEFF_PANEL
146 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PFRAC_PANEL
147 !
148 !* 0.2 Declaration of local variables
149 ! ------------------------------
150 !
151 INTEGER, DIMENSION(:), ALLOCATABLE :: ILIST ! link between urban types and indices
152 REAL, DIMENSION(SIZE(KTYPE)) :: ZGARDEN
153 INTEGER :: JLOOP ! spatial loop counter
154 INTEGER :: JLIST ! loop counter on urban types
155 INTEGER :: IINDEX ! index of type for each point
156 !
157 REAL(KIND=JPRB) :: ZHOOK_HANDLE
158 !
159 !-------------------------------------------------------------------------------
160 !-------------------------------------------------------------------------------
161 !
162 IF (lhook) CALL dr_hook('INI_DATA_PARAM_TEB',0,zhook_handle)
163 !
164 !-------------------------------------------------------------------------------
165 !
166 !* 1. Builds the list of indices corresponding to the "type" field
167 ! ------------------------------------------------------------------
168 !
169 !
170 ALLOCATE(ilist(maxval(bdd%NDESC_CODE_LIST)))
171 ilist(:) = 0
172 DO jlist=1,bdd%NDESC_CODE
173  ilist(bdd%NDESC_CODE_LIST(jlist)) = jlist
174 END DO
175 !
176 iindex = 0
177 !
178 !-------------------------------------------------------------------------------
179 DO jloop=1,SIZE(ktype)
180 !-------------------------------------------------------------------------------
181 !
182 !* 1. town parameters depending on urban characteristics
183 ! --------------------------------------------------------
184 !
185  IF (ktype(jloop)<=SIZE(ilist) .AND. ktype(jloop)>0) iindex = ilist(ktype(jloop))
186 
187  IF (PRESENT(pz0_town)) THEN
188  pz0_town(jloop)=1.
189  ENDIF
190  IF (PRESENT(pbld_height)) THEN
191  pbld_height(jloop)=10.
192  ENDIF
193 
194  zgarden(jloop)=0.
195  IF (PRESENT(ogarden)) THEN
196  IF (.NOT. ogarden) zgarden(jloop) = 0.
197  ENDIF
198  IF (PRESENT(pgarden)) THEN
199  pgarden(jloop)=zgarden(jloop)
200  ENDIF
201 
202  IF (PRESENT(pbld)) THEN
203  pbld(jloop)=0.5
204  pbld(jloop) = pbld(jloop) / (1. - zgarden(jloop))
205  ENDIF
206 
207  IF (PRESENT(pwall_o_hor)) THEN
208  pwall_o_hor(jloop)=0.5
209  pwall_o_hor(jloop) = pwall_o_hor(jloop) / (1. - zgarden(jloop))
210  ENDIF
211 
212  IF (PRESENT(pcan_hw_ratio) .AND. PRESENT(pbld) .AND. PRESENT(pwall_o_hor)) THEN
213  pcan_hw_ratio(jloop)= 0.5 * pwall_o_hor(jloop) / (1.-pbld(jloop))
214  ELSEIF (PRESENT(pcan_hw_ratio) .AND. &
215  (.NOT.PRESENT(pbld) .OR. .NOT.PRESENT(pwall_o_hor)) ) THEN
216  CALL abor1_sfx("INI_DATA_PARAM_TEB: WHEN CALLING WITH CAN_HW_RATIO, BLD AND "// &
217  "WALL_O_HOR MUST ALSO BE IN ARGUMENTS")
218  ENDIF
219 
220  IF (PRESENT(ph_traffic)) THEN
221  ph_traffic(jloop)= 10.
222  ENDIF
223 
224  IF (PRESENT(ple_traffic)) THEN
225  ple_traffic(jloop)= 0.
226  ENDIF
227 
228  IF (PRESENT(ph_industry)) THEN
229  ph_industry(jloop)= 5.
230  ENDIF
231 
232  IF (PRESENT(ple_industry)) THEN
233  ple_industry(jloop)= 0.
234  ENDIF
235 
236  IF (PRESENT(palb_road)) THEN
237  palb_road(jloop)=bdd%XDESC_ALB_ROAD(iindex)
238  ENDIF
239  IF (PRESENT(pemis_road)) THEN
240  pemis_road(jloop)=bdd%XDESC_EMIS_ROAD(iindex)
241  ENDIF
242  IF (PRESENT(phc_road)) THEN
243  phc_road(jloop,:)= bdd%XDESC_HC_ROAD(iindex,:)
244  ENDIF
245  IF (PRESENT(ptc_road)) THEN
246  ptc_road(jloop,:)= bdd%XDESC_TC_ROAD(iindex,:)
247  ENDIF
248  IF (PRESENT(pd_road)) THEN
249  pd_road(jloop,:)= bdd%XDESC_D_ROAD(iindex,:)
250  ENDIF
251 !
252 !-------------------------------------------------------------------------------
253 !
254 !* 2. town parameters depending on building descriptions
255 ! --------------------------------------------------------
256 !
257  IF (ktype(jloop)<=SIZE(ilist) .AND. ktype(jloop)>0) iindex = ilist(ktype(jloop))
258 !
259  IF (PRESENT(palb_roof)) THEN
260  palb_roof(jloop)=bdd%XDESC_ALB_ROOF(iindex)
261  ENDIF
262  IF (PRESENT(palb_wall)) THEN
263  palb_wall(jloop)=bdd%XDESC_ALB_WALL(iindex)
264  ENDIF
265 
266  IF (PRESENT(pemis_roof)) THEN
267  pemis_roof(jloop)=bdd%XDESC_EMIS_ROOF(iindex)
268  ENDIF
269  IF (PRESENT(pemis_wall)) THEN
270  pemis_wall(jloop)=bdd%XDESC_EMIS_WALL(iindex)
271  ENDIF
272 
273  IF (PRESENT(phc_roof)) THEN
274  phc_roof(jloop,:)= bdd%XDESC_HC_ROOF(iindex,:)
275  ENDIF
276  IF (PRESENT(phc_wall)) THEN
277  phc_wall(jloop,:)= bdd%XDESC_HC_WALL(iindex,:)
278  ENDIF
279 
280  IF (PRESENT(ptc_roof)) THEN
281  ptc_roof(jloop,:)= bdd%XDESC_TC_ROOF(iindex,:)
282  ENDIF
283  IF (PRESENT(ptc_wall)) THEN
284  ptc_wall(jloop,:)= bdd%XDESC_TC_WALL(iindex,:)
285  ENDIF
286 
287  IF (PRESENT(pd_roof)) THEN
288  pd_roof(jloop,:)= bdd%XDESC_D_ROOF(iindex,:)
289  ENDIF
290  IF (PRESENT(pd_wall)) THEN
291  pd_wall(jloop,:)= bdd%XDESC_D_WALL(iindex,:)
292  ENDIF
293 
294 
295  IF (PRESENT(phc_floor)) THEN
296  phc_floor(jloop,:)= bdd%XDESC_HC_FLOOR(iindex,:)
297  ENDIF
298 
299  IF (PRESENT(ptc_floor)) THEN
300  ptc_floor(jloop,:)= bdd%XDESC_TC_FLOOR(iindex,:)
301  ENDIF
302 
303  IF (PRESENT(pd_floor)) THEN
304  pd_floor(jloop,:)= bdd%XDESC_D_FLOOR(iindex,:)
305  ENDIF
306 !
307  IF (PRESENT(peff_heat)) THEN
308  peff_heat(jloop) = bdd%XDESC_EFF_HEAT(iindex)
309  ENDIF
310 !
311  IF (PRESENT(pshgc)) THEN
312  pshgc(jloop) = bdd%XDESC_SHGC(iindex)
313  ENDIF
314 !
315  IF (PRESENT(pu_win)) THEN
316  pu_win(jloop) = bdd%XDESC_U_WIN(iindex)
317  ENDIF
318 !
319  IF (PRESENT(pgr)) THEN
320  pgr(jloop) = bdd%XDESC_GR(iindex)
321  ENDIF
322 
323  IF (PRESENT(pcop_rat)) THEN
324  pcop_rat(jloop) = bdd%XDESC_COP_RAT(iindex)
325  ENDIF
326 !
327  IF (PRESENT(pf_water_cond)) THEN
328  pf_water_cond(jloop) = bdd%XDESC_F_WATER_COND(iindex)
329  ENDIF
330 !
331  IF (PRESENT(pf_waste_can)) THEN
332  pf_waste_can(jloop) = bdd%XDESC_F_WASTE_CAN(iindex)
333  ENDIF
334 !
335  IF (PRESENT(pinf)) THEN
336  pinf(jloop) = bdd%XDESC_INF(iindex)
337  ENDIF
338 !
339  IF (PRESENT(pv_vent)) THEN
340  pv_vent(jloop) = bdd%XDESC_V_VENT(iindex)
341  ENDIF
342  !
343  IF (PRESENT(pgreenroof)) THEN
344  pgreenroof(jloop) = bdd%XDESC_GREENROOF(iindex)
345  ENDIF
346  !
347  IF (PRESENT(pemis_panel)) THEN
348  pemis_panel(jloop) = bdd%XDESC_EMIS_PANEL(iindex)
349  ENDIF
350  !
351  IF (PRESENT(palb_panel)) THEN
352  palb_panel(jloop) = bdd%XDESC_ALB_PANEL(iindex)
353  ENDIF
354  !
355  IF (PRESENT(peff_panel)) THEN
356  peff_panel(jloop) = bdd%XDESC_EFF_PANEL(iindex)
357  ENDIF
358  !
359  IF (PRESENT(pfrac_panel)) THEN
360  pfrac_panel(jloop) = bdd%XDESC_FRAC_PANEL(iindex)
361  ENDIF
362 !
363 !
364 !-------------------------------------------------------------------------------
365 !
366 !* 3. town parameters depending on building use
367 ! -----------------------------------------------
368 !
369  IF (ktype(jloop)<=SIZE(bdd%NDESC_USE_LIST) .AND. ktype(jloop)>0) &
370  iindex = bdd%NDESC_USE_LIST(ktype(jloop))
371 !
372  IF (PRESENT(ptcool_target)) THEN
373  ptcool_target(jloop) = bdd%XDESC_TCOOL_TARGET(iindex)
374  ENDIF
375 !
376  IF (PRESENT(ptheat_target)) THEN
377  ptheat_target(jloop) = bdd%XDESC_THEAT_TARGET(iindex)
378  ENDIF
379 !
380  IF (PRESENT(pqin)) THEN
381  pqin(jloop) = bdd%XDESC_QIN(iindex)
382  ENDIF
383 !
384  IF (PRESENT(pqin_flat)) THEN
385  pqin_flat(jloop) = bdd%XDESC_QIN_FLAT(iindex)
386  ENDIF
387 !
388  IF (PRESENT(pshgc_sh)) THEN
389  pshgc_sh(jloop) = bdd%XDESC_SHGC_SH(iindex)
390  ENDIF
391  !
392  IF (PRESENT(pshade)) THEN
393  pshade(jloop) = bdd%XDESC_SHADE(iindex)
394  ENDIF
395 !
396  IF (PRESENT(pnatvent)) THEN
397  pnatvent(jloop) = bdd%XDESC_NATVENT(iindex)
398  ENDIF
399 !
400  IF (PRESENT(presidential)) THEN
401  presidential(jloop) = bdd%XDESC_RESIDENTIAL(iindex)
402  ENDIF
403 
404 !
405 !-------------------------------------------------------------------------------
406 !
407 !* 4. town parameters not depending on anything yet
408 ! ---------------------------------------------------
409 !
410  IF (PRESENT(pcap_sys_heat)) THEN
411  pcap_sys_heat(jloop) = 100.
412  ENDIF
413 !
414  IF (PRESENT(pcap_sys_rat)) THEN
415  pcap_sys_rat(jloop) = 90.
416  ENDIF
417 !
418  IF (PRESENT(pt_adp)) THEN
419  pt_adp(jloop) = 285.66
420  ENDIF
421 !
422  IF (PRESENT(pm_sys_rat)) THEN
423  pm_sys_rat(jloop) = 0.0067
424  ENDIF
425 !
426  IF (PRESENT(pt_size_max)) THEN
427  pt_size_max(jloop) = 301.95
428  ENDIF
429 !
430  IF (PRESENT(pt_size_min)) THEN
431  pt_size_min(jloop) = 268.96
432  ENDIF
433 !
434  IF (PRESENT(pfloor_height)) THEN
435  pfloor_height(jloop) = 2.9
436  ENDIF
437 !
438  IF (PRESENT(pqin_frad)) THEN
439  pqin_frad(jloop) = 0.2
440  ENDIF
441 !
442  IF (PRESENT(phr_target)) THEN
443  phr_target(jloop) = 0.5
444  ENDIF
445 !
446  IF (PRESENT(prough_roof)) THEN
447  prough_roof(jloop) = 1.52
448  ENDIF
449 !
450  IF (PRESENT(prough_wall)) THEN
451  prough_wall(jloop) = 1.52
452  ENDIF
453 
454 !
455 END DO
456 !
457 DEALLOCATE(ilist)
458 !
459 IF (lhook) CALL dr_hook('INI_DATA_PARAM_TEB',1,zhook_handle)
460 !-------------------------------------------------------------------------------
461 !
462 END SUBROUTINE ini_data_param_teb
subroutine ini_data_param_teb(BDD, KTYPE,
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15