SURFEX v8.1
General documentation of Surfex
read_pgd_teb_parn.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 read_pgd_teb_par_n (DTCO, U, GCP, BDD, DTB, DTT, KDIM, TOP, &
7  HPROGRAM,KNI,HDIRIN)
8 ! ################################################
9 !
10 !!**** *READ_PGD_TEB_PAR_n* - reads ISBA physiographic fields
11 !!
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !!** METHOD
17 !! ------
18 !!
19 !! EXTERNAL
20 !! --------
21 !!
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! V. Masson *Meteo France*
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 05/2005
37 !! V. Masson 08/2013 adds solar panels
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
44 USE modd_surf_atm_n, ONLY : surf_atm_t
46 !
48 USE modd_data_bem_n, ONLY : data_bem_t
49 USE modd_data_teb_n, ONLY : data_teb_t
51 !
53 USE modi_read_bld_description_n
54 USE modi_get_luout
55 USE modi_bldcode
56 USE modi_abor1_sfx
57 !
58 USE yomhook ,ONLY : lhook, dr_hook
59 USE parkind1 ,ONLY : jprb
60 !
61 IMPLICIT NONE
62 !
63 !* 0.1 Declarations of arguments
64 ! -------------------------
65 !
66 !
67 !
68 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
69 TYPE(surf_atm_t), INTENT(INOUT) :: U
70 TYPE(grid_conf_proj_t),INTENT(INOUT) :: GCP
71 !
72 TYPE(bld_desc_t), INTENT(INOUT) :: BDD
73 TYPE(data_bem_t), INTENT(INOUT) :: DTB
74 TYPE(data_teb_t), INTENT(INOUT) :: DTT
75 INTEGER, INTENT(IN) :: KDIM
76 TYPE(teb_options_t), INTENT(INOUT) :: TOP
77 !
78  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling
79 INTEGER, INTENT(IN) :: KNI ! size of the new domain
80  CHARACTER(LEN=1), INTENT(IN) :: HDIRIN
81 !
82 !* 0.2 Declarations of local variables
83 ! -------------------------------
84 !
85 INTEGER :: ILUOUT ! output listing logical unit
86 INTEGER :: IRESP ! IRESP : return-code if a problem appears
87  CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read
88 INTEGER :: JLAYER ! loop index
89 !
90 INTEGER :: IVERSION ! surface version
91 INTEGER :: IBUGFIX ! surface bugfix version
92 REAL, DIMENSION(KDIM) :: ZWORK ! work array
93 REAL(KIND=JPRB) :: ZHOOK_HANDLE
94 !
95 !-------------------------------------------------------------------------------
96 IF (lhook) CALL dr_hook('READ_PGD_TEB_PAR_N',0,zhook_handle)
97 !
98  CALL get_luout(hprogram,iluout)
99 !
100 yrecfm='VERSION'
101  CALL read_surf(hprogram,yrecfm,iversion,iresp)
102 yrecfm='BUG'
103  CALL read_surf(hprogram,yrecfm,ibugfix,iresp)
104 !
105 IF (iversion<7 .AND. .NOT.top%LECOCLIMAP) THEN
106  !
107  dtt%LDATA_BLDTYPE = .false.
108  dtt%LDATA_BLD_AGE = .false.
109  dtt%LDATA_USETYPE = .false.
110  dtt%LDATA_Z0_TOWN = .true.
111  dtt%LDATA_BLD = .true.
112  dtt%LDATA_GARDEN = .true.
113  dtt%LDATA_GREENROOF = .true.
114  dtt%LDATA_ROAD_DIR = .false.
115  dtt%LDATA_ALB_ROOF = .true.
116  dtt%LDATA_EMIS_ROOF = .true.
117  dtt%LDATA_HC_ROOF = .true.
118  dtt%LDATA_TC_ROOF = .true.
119  dtt%LDATA_D_ROOF = .true.
120  dtt%LDATA_ALB_ROAD = .true.
121  dtt%LDATA_EMIS_ROAD = .true.
122  dtt%LDATA_HC_ROAD = .true.
123  dtt%LDATA_TC_ROAD = .true.
124  dtt%LDATA_D_ROAD = .true.
125  dtt%LDATA_ALB_WALL = .true.
126  dtt%LDATA_EMIS_WALL = .true.
127  dtt%LDATA_HC_WALL = .true.
128  dtt%LDATA_TC_WALL = .true.
129  dtt%LDATA_D_WALL = .true.
130  dtt%LDATA_BLD_HEIGHT = .true.
131  dtt%LDATA_WALL_O_HOR = .true.
132  dtt%LDATA_H_TRAFFIC = .true.
133  dtt%LDATA_LE_TRAFFIC = .true.
134  dtt%LDATA_H_INDUSTRY = .true.
135  dtt%LDATA_LE_INDUSTRY = .true.
136  dtt%LDATA_ROUGH_ROOF = .false.
137  dtt%LDATA_ROUGH_WALL = .false.
138  dtt%LDATA_RESIDENTIAL = .false.
139  !
140 ELSEIF (iversion>=7) THEN
141  !
142  IF (iversion>7 .OR. ibugfix>=3) THEN
143  yrecfm='L_BLDTYPE'
144  CALL read_surf(hprogram,yrecfm,dtt%LDATA_BLDTYPE,iresp)
145  yrecfm='L_BLD_AGE'
146  CALL read_surf( hprogram,yrecfm,dtt%LDATA_BLD_AGE,iresp)
147  yrecfm='L_USETYPE'
148  CALL read_surf(hprogram,yrecfm,dtt%LDATA_USETYPE,iresp)
149  IF (dtt%LDATA_BLDTYPE .OR. dtt%LDATA_BLD_AGE .OR. dtt%LDATA_USETYPE) &
150  CALL read_bld_description_n(bdd, hprogram)
151  ENDIF
152  yrecfm='L_Z0_TOWN'
153  CALL read_surf(hprogram,yrecfm,dtt%LDATA_Z0_TOWN,iresp)
154  yrecfm='L_BLD'
155  CALL read_surf(hprogram,yrecfm,dtt%LDATA_BLD,iresp)
156  IF (iversion>=6) THEN
157  yrecfm='L_GARDEN'
158  CALL read_surf(hprogram,yrecfm,dtt%LDATA_GARDEN,iresp)
159  ENDIF
160  IF (iversion==7 .AND. ibugfix<=2) THEN
161  dtt%LDATA_ROAD_DIR = .false.
162  dtt%LDATA_GREENROOF= .false.
163  ELSE
164  yrecfm='L_ROAD_DIR'
165  CALL read_surf(hprogram,yrecfm,dtt%LDATA_ROAD_DIR,iresp)
166  yrecfm='L_GREENROOF'
167  CALL read_surf(hprogram,yrecfm,dtt%LDATA_GREENROOF,iresp)
168  END IF
169  IF (iversion==7 .AND. ibugfix<=3) THEN
170  dtt%LDATA_EMIS_PANEL = .false.
171  dtt%LDATA_ALB_PANEL = .false.
172  dtt%LDATA_EFF_PANEL = .false.
173  dtt%LDATA_FRAC_PANEL = .false.
174  ELSE
175  yrecfm='L_EMIS_PANEL'
176  CALL read_surf(hprogram,yrecfm,dtt%LDATA_EMIS_PANEL,iresp)
177  yrecfm='L_ALB_PANEL'
178  CALL read_surf(hprogram,yrecfm,dtt%LDATA_ALB_PANEL,iresp)
179  yrecfm='L_EFF_PANEL'
180  CALL read_surf(hprogram,yrecfm,dtt%LDATA_EFF_PANEL,iresp)
181  yrecfm='L_FRAC_PANEL'
182  CALL read_surf(hprogram,yrecfm,dtt%LDATA_FRAC_PANEL,iresp)
183  END IF
184  yrecfm='L_ALB_ROOF'
185  CALL read_surf(hprogram,yrecfm,dtt%LDATA_ALB_ROOF,iresp)
186  yrecfm='L_EMIS_ROOF'
187  CALL read_surf(hprogram,yrecfm,dtt%LDATA_EMIS_ROOF,iresp)
188  yrecfm='L_HC_ROOF'
189  CALL read_surf(hprogram,yrecfm,dtt%LDATA_HC_ROOF,iresp)
190  yrecfm='L_TC_ROOF'
191  CALL read_surf(hprogram,yrecfm,dtt%LDATA_TC_ROOF,iresp)
192  yrecfm='L_D_ROOF'
193  CALL read_surf(hprogram,yrecfm,dtt%LDATA_D_ROOF,iresp)
194  yrecfm='L_ALB_ROAD'
195  CALL read_surf(hprogram,yrecfm,dtt%LDATA_ALB_ROAD,iresp)
196  yrecfm='L_EMIS_ROAD'
197  CALL read_surf(hprogram,yrecfm,dtt%LDATA_EMIS_ROAD,iresp)
198  yrecfm='L_HC_ROAD'
199  CALL read_surf(hprogram,yrecfm,dtt%LDATA_HC_ROAD,iresp)
200  yrecfm='L_TC_ROAD'
201  CALL read_surf(hprogram,yrecfm,dtt%LDATA_TC_ROAD,iresp)
202  yrecfm='L_D_ROAD'
203  CALL read_surf(hprogram,yrecfm,dtt%LDATA_D_ROAD,iresp)
204  yrecfm='L_ALB_WALL'
205  CALL read_surf(hprogram,yrecfm,dtt%LDATA_ALB_WALL,iresp)
206  yrecfm='L_EMIS_WALL'
207  CALL read_surf(hprogram,yrecfm,dtt%LDATA_EMIS_WALL,iresp)
208  yrecfm='L_HC_WALL'
209  CALL read_surf(hprogram,yrecfm,dtt%LDATA_HC_WALL,iresp)
210  yrecfm='L_TC_WALL'
211  CALL read_surf(hprogram,yrecfm,dtt%LDATA_TC_WALL,iresp)
212  yrecfm='L_D_WALL'
213  CALL read_surf(hprogram,yrecfm,dtt%LDATA_D_WALL,iresp)
214  yrecfm='L_BLD_HEIGHT'
215  CALL read_surf(hprogram,yrecfm,dtt%LDATA_BLD_HEIGHT,iresp)
216  yrecfm='L_WALL_O_HOR'
217  CALL read_surf(hprogram,yrecfm,dtt%LDATA_WALL_O_HOR,iresp)
218  yrecfm='L_H_TRAF'
219  CALL read_surf(hprogram,yrecfm,dtt%LDATA_H_TRAFFIC,iresp)
220  yrecfm='L_LE_TRAF'
221  CALL read_surf(hprogram,yrecfm,dtt%LDATA_LE_TRAFFIC,iresp)
222  yrecfm='L_H_IND'
223  CALL read_surf(hprogram,yrecfm,dtt%LDATA_H_INDUSTRY,iresp)
224  yrecfm='L_LE_IND'
225  CALL read_surf(hprogram,yrecfm,dtt%LDATA_LE_INDUSTRY,iresp)
226  IF (iversion>7 .OR. ibugfix>=3) THEN
227  yrecfm='L_ROUGH_ROOF'
228  CALL read_surf(hprogram,yrecfm,dtt%LDATA_ROUGH_ROOF,iresp)
229  yrecfm='L_ROUGH_WALL'
230  CALL read_surf(hprogram,yrecfm,dtt%LDATA_ROUGH_WALL,iresp)
231  ENDIF
232  IF (iversion>7) THEN
233  yrecfm='L_F_RESIDENT'
234  CALL read_surf(hprogram,yrecfm,dtt%LDATA_RESIDENTIAL,iresp)
235  ENDIF
236  !
237  IF (top%CBEM=='BEM') THEN
238  yrecfm='L_HC_FLOOR'
239  CALL read_surf(hprogram,yrecfm,dtb%LDATA_HC_FLOOR,iresp)
240  yrecfm='L_TC_FLOOR'
241  CALL read_surf(hprogram,yrecfm,dtb%LDATA_TC_FLOOR,iresp)
242  yrecfm='L_D_FLOOR'
243  CALL read_surf(hprogram,yrecfm,dtb%LDATA_D_FLOOR,iresp)
244  yrecfm='L_TCOOL_TARG'
245  CALL read_surf(hprogram,yrecfm,dtb%LDATA_TCOOL_TARGET,iresp)
246  yrecfm='L_THEAT_TARG'
247  CALL read_surf(hprogram,yrecfm,dtb%LDATA_THEAT_TARGET,iresp)
248  yrecfm='L_F_WAST_CAN'
249  CALL read_surf(hprogram,yrecfm,dtb%LDATA_F_WASTE_CAN,iresp)
250  yrecfm='L_EFF_HEAT'
251  CALL read_surf(hprogram,yrecfm,dtb%LDATA_EFF_HEAT,iresp)
252  yrecfm='L_QIN'
253  CALL read_surf(hprogram,yrecfm,dtb%LDATA_QIN,iresp)
254  yrecfm='L_QIN_FRAD'
255  CALL read_surf(hprogram,yrecfm,dtb%LDATA_QIN_FRAD,iresp)
256  yrecfm='L_SHGC'
257  CALL read_surf(hprogram,yrecfm,dtb%LDATA_SHGC,iresp)
258  yrecfm='L_U_WIN'
259  CALL read_surf(hprogram,yrecfm,dtb%LDATA_U_WIN,iresp)
260  yrecfm='L_GR'
261  CALL read_surf(hprogram,yrecfm,dtb%LDATA_GR,iresp)
262  yrecfm='L_SHGC_SH'
263  CALL read_surf(hprogram,yrecfm,dtb%LDATA_SHGC_SH,iresp)
264  yrecfm='L_FLOOR_HEIG'
265  CALL read_surf(hprogram,yrecfm,dtb%LDATA_FLOOR_HEIGHT,iresp)
266  yrecfm='L_INF'
267  CALL read_surf(hprogram,yrecfm,dtb%LDATA_INF,iresp)
268  yrecfm='L_FWAT_COND'
269  CALL read_surf(hprogram,yrecfm,dtb%LDATA_F_WATER_COND,iresp)
270  yrecfm='L_SHADE'
271  CALL read_surf(hprogram,yrecfm,dtb%LDATA_SHADE,iresp)
272  yrecfm='L_NATVENT'
273  CALL read_surf(hprogram,yrecfm,dtb%LDATA_NATVENT,iresp)
274  yrecfm='L_V_VENT'
275  CALL read_surf(hprogram,yrecfm,dtb%LDATA_V_VENT,iresp)
276  yrecfm='L_QIN_FLAT'
277  CALL read_surf(hprogram,yrecfm,dtb%LDATA_QIN_FLAT,iresp)
278  yrecfm='L_HR_TARGET'
279  CALL read_surf(hprogram,yrecfm,dtb%LDATA_HR_TARGET,iresp)
280  yrecfm='L_CAP_SYS_HE'
281  CALL read_surf(hprogram,yrecfm,dtb%LDATA_CAP_SYS_HEAT,iresp)
282  yrecfm='L_CAP_SYS_RA'
283  CALL read_surf(hprogram,yrecfm,dtb%LDATA_CAP_SYS_RAT,iresp)
284  yrecfm='L_T_ADP'
285  CALL read_surf(hprogram,yrecfm,dtb%LDATA_T_ADP,iresp)
286  yrecfm='L_M_SYS_RAT'
287  CALL read_surf(hprogram,yrecfm,dtb%LDATA_M_SYS_RAT,iresp)
288  yrecfm='L_COP_RAT'
289  CALL read_surf(hprogram,yrecfm,dtb%LDATA_COP_RAT,iresp)
290  yrecfm='L_T_SIZE_MAX'
291  CALL read_surf(hprogram,yrecfm,dtb%LDATA_T_SIZE_MAX,iresp)
292  yrecfm='L_T_SIZE_MIN'
293  CALL read_surf(hprogram,yrecfm,dtb%LDATA_T_SIZE_MIN,iresp)
294  ENDIF
295  !
296 ENDIF
297 !
298 !* read number of layers if thermal properties are specified
299 !
300 IF (dtt%LDATA_HC_ROOF) THEN
301  yrecfm='PAR_RF_LAYER'
302  IF (iversion<7 .OR. (iversion==7 .AND. ibugfix<=2)) yrecfm='ROOF_LAYER'
303  CALL read_surf(hprogram,yrecfm,dtt%NPAR_ROOF_LAYER,iresp)
304 END IF
305 !
306 IF (dtt%LDATA_HC_ROAD) THEN
307  yrecfm='PAR_RD_LAYER'
308  IF (iversion<7 .OR. (iversion==7 .AND. ibugfix<=2)) yrecfm='ROAD_LAYER'
309  CALL read_surf(hprogram,yrecfm,dtt%NPAR_ROAD_LAYER,iresp)
310 END IF
311 !
312 IF (dtt%LDATA_HC_WALL) THEN
313  yrecfm='PAR_WL_LAYER'
314  IF (iversion<7 .OR. (iversion==7 .AND. ibugfix<=2)) yrecfm='WALL_LAYER'
315  CALL read_surf(hprogram,yrecfm,dtt%NPAR_WALL_LAYER,iresp)
316 END IF
317 !
318 IF (dtb%LDATA_HC_FLOOR) THEN
319  yrecfm='PAR_FL_LAYER'
320  IF (iversion<7 .OR. (iversion==7 .AND. ibugfix<=2)) yrecfm='FLOOR_LAYER'
321  CALL read_surf(hprogram,yrecfm,dtb%NPAR_FLOOR_LAYER,iresp)
322 END IF
323 !
324 !* read specified fields
325 !
326 IF (dtt%LDATA_BLDTYPE .AND. .NOT. dtt%LDATA_BLDTYPE) THEN
327  CALL abor1_sfx('FATAL ERROR: Building type is prescribed but not the building age')
328 END IF
329 !
330 IF (dtt%LDATA_BLDTYPE) THEN
331  ALLOCATE(dtt%NPAR_BLDTYPE (kdim))
332  yrecfm='D_BLDTYPE'
333  CALL read_field(yrecfm,zwork,hdirin)
334  dtt%NPAR_BLDTYPE(:) = nint(zwork)
335 ENDIF
336 !
337 IF (dtt%LDATA_BLD_AGE) THEN
338  ALLOCATE(dtt%NPAR_BLD_AGE (kdim))
339  yrecfm='D_BLD_AGE'
340  CALL read_field(yrecfm,zwork,hdirin)
341  dtt%NPAR_BLD_AGE(:) = nint(zwork)
342 ENDIF
343 !
344 IF (dtt%LDATA_BLDTYPE .AND. dtt%LDATA_BLDTYPE) THEN
345  ALLOCATE(dtt%NPAR_BLDCODE(kdim))
346  dtt%NPAR_BLDCODE=bldcode(bdd, dtt%NPAR_BLDTYPE,dtt%NPAR_BLD_AGE)
347 END IF
348 !
349 IF (dtt%LDATA_USETYPE) THEN
350  ALLOCATE(dtt%NPAR_USETYPE (kdim))
351  yrecfm='D_USETYPE'
352  CALL read_field(yrecfm,zwork,hdirin)
353  dtt%NPAR_USETYPE(:) = nint(zwork)
354 ENDIF
355 !
356 IF (dtt%LDATA_Z0_TOWN) THEN
357  ALLOCATE(dtt%XPAR_Z0_TOWN (kdim))
358  yrecfm='D_Z0_TOWN'
359  CALL read_field(yrecfm,dtt%XPAR_Z0_TOWN,hdirin)
360 ENDIF
361 !
362 IF (dtt%LDATA_BLD) THEN
363  ALLOCATE(dtt%XPAR_BLD (kdim))
364  yrecfm='D_BLD'
365  CALL read_field(yrecfm,dtt%XPAR_BLD,hdirin)
366 ENDIF
367 !
368 IF (iversion>=6) THEN
369  IF (dtt%LDATA_GARDEN) THEN
370  ALLOCATE(dtt%XPAR_GARDEN (kdim))
371  yrecfm='D_GARDEN'
372  CALL read_field(yrecfm,dtt%XPAR_GARDEN,hdirin)
373  ENDIF
374 !
375 ENDIF
376 !
377 IF (dtt%LDATA_GREENROOF) THEN
378  ALLOCATE(dtt%XPAR_GREENROOF (kdim))
379  yrecfm='D_GREENROOF'
380  CALL read_field(yrecfm,dtt%XPAR_GREENROOF,hdirin)
381 ENDIF
382 !
383 IF (dtt%LDATA_ROAD_DIR) THEN
384  ALLOCATE(dtt%XPAR_ROAD_DIR (kdim))
385  yrecfm='D_ROAD_DIR'
386  CALL read_field(yrecfm,dtt%XPAR_ROAD_DIR,hdirin)
387 ENDIF
388 !
389 IF (dtt%LDATA_ALB_ROOF) THEN
390  ALLOCATE(dtt%XPAR_ALB_ROOF (kdim))
391  yrecfm='D_ALB_ROOF'
392  CALL read_field(yrecfm,dtt%XPAR_ALB_ROOF,hdirin)
393 ENDIF
394 !
395 IF (dtt%LDATA_EMIS_ROOF) THEN
396  ALLOCATE(dtt%XPAR_EMIS_ROOF (kdim))
397  yrecfm='D_EMI_ROOF'
398  CALL read_field(yrecfm,dtt%XPAR_EMIS_ROOF,hdirin)
399 ENDIF
400 !
401 IF (dtt%LDATA_HC_ROOF) THEN
402  ALLOCATE(dtt%XPAR_HC_ROOF (kdim,dtt%NPAR_ROOF_LAYER))
403  DO jlayer=1,dtt%NPAR_ROOF_LAYER
404  WRITE(yrecfm,fmt='(A9,I1.1)') 'D_HC_ROOF',jlayer
405  CALL read_field(yrecfm,dtt%XPAR_HC_ROOF(:,jlayer),hdirin)
406  END DO
407 ENDIF
408 !
409 IF (dtt%LDATA_TC_ROOF) THEN
410  ALLOCATE(dtt%XPAR_TC_ROOF (kdim,dtt%NPAR_ROOF_LAYER))
411  DO jlayer=1,dtt%NPAR_ROOF_LAYER
412  WRITE(yrecfm,fmt='(A9,I1.1)') 'D_TC_ROOF',jlayer
413  CALL read_field(yrecfm,dtt%XPAR_TC_ROOF(:,jlayer),hdirin)
414  END DO
415 ENDIF
416 !
417 IF (dtt%LDATA_D_ROOF) THEN
418  ALLOCATE(dtt%XPAR_D_ROOF (kdim,dtt%NPAR_ROOF_LAYER))
419  DO jlayer=1,dtt%NPAR_ROOF_LAYER
420  WRITE(yrecfm,fmt='(A8,I1.1)') 'D_D_ROOF',jlayer
421  CALL read_field(yrecfm,dtt%XPAR_D_ROOF(:,jlayer),hdirin)
422  END DO
423 ENDIF
424 !
425 IF (dtt%LDATA_ALB_ROAD) THEN
426  ALLOCATE(dtt%XPAR_ALB_ROAD (kdim))
427  yrecfm='D_ALB_ROAD'
428  CALL read_field(yrecfm,dtt%XPAR_ALB_ROAD,hdirin)
429 ENDIF
430 !
431 IF (dtt%LDATA_EMIS_ROAD) THEN
432  ALLOCATE(dtt%XPAR_EMIS_ROAD (kdim))
433  yrecfm='D_EMI_ROAD'
434  CALL read_field(yrecfm,dtt%XPAR_EMIS_ROAD,hdirin)
435 ENDIF
436 !
437 IF (dtt%LDATA_HC_ROAD) THEN
438  ALLOCATE(dtt%XPAR_HC_ROAD (kdim,dtt%NPAR_ROAD_LAYER))
439  DO jlayer=1,dtt%NPAR_ROAD_LAYER
440  WRITE(yrecfm,fmt='(A9,I1.1)') 'D_HC_ROAD',jlayer
441  CALL read_field(yrecfm,dtt%XPAR_HC_ROAD(:,jlayer),hdirin)
442  END DO
443 ENDIF
444 !
445 IF (dtt%LDATA_TC_ROAD) THEN
446  ALLOCATE(dtt%XPAR_TC_ROAD (kdim,dtt%NPAR_ROAD_LAYER))
447  DO jlayer=1,dtt%NPAR_ROAD_LAYER
448  WRITE(yrecfm,fmt='(A9,I1.1)') 'D_TC_ROAD',jlayer
449  CALL read_field(yrecfm,dtt%XPAR_TC_ROAD(:,jlayer),hdirin)
450  END DO
451 ENDIF
452 !
453 IF (dtt%LDATA_D_ROAD) THEN
454  ALLOCATE(dtt%XPAR_D_ROAD (kdim,dtt%NPAR_ROAD_LAYER))
455  DO jlayer=1,dtt%NPAR_ROAD_LAYER
456  WRITE(yrecfm,fmt='(A8,I1.1)') 'D_D_ROAD',jlayer
457  CALL read_field(yrecfm,dtt%XPAR_D_ROAD(:,jlayer),hdirin)
458  END DO
459 ENDIF
460 !
461 IF (dtt%LDATA_ALB_WALL) THEN
462  ALLOCATE(dtt%XPAR_ALB_WALL (kdim))
463  yrecfm='D_ALB_WALL'
464  CALL read_field(yrecfm,dtt%XPAR_ALB_WALL,hdirin)
465 ENDIF
466 !
467 IF (dtt%LDATA_EMIS_WALL) THEN
468  ALLOCATE(dtt%XPAR_EMIS_WALL (kdim))
469  yrecfm='D_EMI_WALL'
470  CALL read_field(yrecfm,dtt%XPAR_EMIS_WALL,hdirin)
471 ENDIF
472 !
473 IF (dtt%LDATA_HC_WALL) THEN
474  ALLOCATE(dtt%XPAR_HC_WALL (kdim,dtt%NPAR_WALL_LAYER))
475  DO jlayer=1,dtt%NPAR_WALL_LAYER
476  WRITE(yrecfm,fmt='(A9,I1.1)') 'D_HC_WALL',jlayer
477  CALL read_field(yrecfm,dtt%XPAR_HC_WALL(:,jlayer),hdirin)
478  END DO
479 ENDIF
480 !
481 IF (dtt%LDATA_TC_WALL) THEN
482  ALLOCATE(dtt%XPAR_TC_WALL (kdim,dtt%NPAR_WALL_LAYER))
483  DO jlayer=1,dtt%NPAR_WALL_LAYER
484  WRITE(yrecfm,fmt='(A9,I1.1)') 'D_TC_WALL',jlayer
485  CALL read_field(yrecfm,dtt%XPAR_TC_WALL(:,jlayer),hdirin)
486  END DO
487 ENDIF
488 !
489 IF (dtt%LDATA_D_WALL) THEN
490  ALLOCATE(dtt%XPAR_D_WALL (kdim,dtt%NPAR_WALL_LAYER))
491  DO jlayer=1,dtt%NPAR_WALL_LAYER
492  WRITE(yrecfm,fmt='(A8,I1.1)') 'D_D_WALL',jlayer
493  CALL read_field(yrecfm,dtt%XPAR_D_WALL(:,jlayer),hdirin)
494  END DO
495 ENDIF
496 !
497 IF (dtt%LDATA_BLD_HEIGHT) THEN
498  ALLOCATE(dtt%XPAR_BLD_HEIGHT (kdim))
499  yrecfm='D_BLD_HEIG'
500  CALL read_field(yrecfm,dtt%XPAR_BLD_HEIGHT,hdirin)
501 ENDIF
502 !
503 IF (dtt%LDATA_WALL_O_HOR) THEN
504  ALLOCATE(dtt%XPAR_WALL_O_HOR (kdim))
505  yrecfm='D_WALL_O_H'
506  CALL read_field(yrecfm,dtt%XPAR_WALL_O_HOR,hdirin)
507 ENDIF
508 !
509 IF (dtt%LDATA_H_TRAFFIC) THEN
510  ALLOCATE(dtt%XPAR_H_TRAFFIC (kdim))
511  yrecfm='D_H_TRAF'
512  CALL read_field(yrecfm,dtt%XPAR_H_TRAFFIC,hdirin)
513 ENDIF
514 !
515 IF (dtt%LDATA_LE_TRAFFIC) THEN
516  ALLOCATE(dtt%XPAR_LE_TRAFFIC (kdim))
517  yrecfm='D_LE_TRAF'
518  CALL read_field(yrecfm,dtt%XPAR_LE_TRAFFIC,hdirin)
519 ENDIF
520 !
521 IF (dtt%LDATA_H_INDUSTRY) THEN
522  ALLOCATE(dtt%XPAR_H_INDUSTRY (kdim))
523  yrecfm='D_H_IND'
524  CALL read_field(yrecfm,dtt%XPAR_H_INDUSTRY,hdirin)
525 ENDIF
526 !
527 IF (dtt%LDATA_LE_INDUSTRY) THEN
528  ALLOCATE(dtt%XPAR_LE_INDUSTRY (kdim))
529  yrecfm='D_LE_IND'
530  CALL read_field(yrecfm,dtt%XPAR_LE_INDUSTRY,hdirin)
531 ENDIF
532 !
533 IF (dtt%LDATA_ROUGH_ROOF) THEN
534  ALLOCATE(dtt%XPAR_ROUGH_ROOF (kdim))
535  yrecfm='D_ROUGH_ROOF'
536  CALL read_field(yrecfm,dtt%XPAR_ROUGH_ROOF,hdirin)
537 ENDIF
538 !
539 IF (dtt%LDATA_ROUGH_WALL) THEN
540  ALLOCATE(dtt%XPAR_ROUGH_WALL (kdim))
541  yrecfm='D_ROUGH_WALL'
542  CALL read_field(yrecfm,dtt%XPAR_ROUGH_WALL,hdirin)
543 ENDIF
544 !
545 IF (dtt%LDATA_RESIDENTIAL) THEN
546  ALLOCATE(dtt%XPAR_RESIDENTIAL (kdim))
547  yrecfm='D_F_RESIDENT'
548  CALL read_field(yrecfm,dtt%XPAR_RESIDENTIAL,hdirin)
549 ENDIF
550 !
551 ! solar panels
552 !
553 IF (dtt%LDATA_EMIS_PANEL) THEN
554  ALLOCATE(dtt%XPAR_EMIS_PANEL (kdim))
555  yrecfm='D_EMIS_PANEL'
556  CALL read_field(yrecfm,dtt%XPAR_EMIS_PANEL,hdirin)
557 ENDIF
558 !
559 IF (dtt%LDATA_ALB_PANEL) THEN
560  ALLOCATE(dtt%XPAR_ALB_PANEL (kdim))
561  yrecfm='D_ALB_PANEL'
562  CALL read_field(yrecfm,dtt%XPAR_ALB_PANEL,hdirin)
563 ENDIF
564 !
565 IF (dtt%LDATA_EFF_PANEL) THEN
566  ALLOCATE(dtt%XPAR_EFF_PANEL (kdim))
567  yrecfm='D_EFF_PANEL'
568  CALL read_field(yrecfm,dtt%XPAR_EFF_PANEL,hdirin)
569 ENDIF
570 !
571 IF (dtt%LDATA_FRAC_PANEL) THEN
572  ALLOCATE(dtt%XPAR_FRAC_PANEL (kdim))
573  yrecfm='D_FRAC_PANEL'
574  CALL read_field(yrecfm,dtt%XPAR_FRAC_PANEL,hdirin)
575 ENDIF
576 !
577 !* Building Energy Model
578 !
579 IF (top%CBEM=='BEM') THEN
580  !
581 
582  IF (dtb%LDATA_HC_FLOOR) THEN
583  ALLOCATE(dtb%XPAR_HC_FLOOR (kdim,dtb%NPAR_FLOOR_LAYER))
584  DO jlayer=1,dtb%NPAR_FLOOR_LAYER
585  WRITE(yrecfm,fmt='(A10,I1.1)') 'D_HC_FLOOR',jlayer
586  CALL read_field(yrecfm,dtb%XPAR_HC_FLOOR(:,jlayer),hdirin)
587  END DO
588  ENDIF
589  !
590  IF (dtb%LDATA_TC_FLOOR) THEN
591  ALLOCATE(dtb%XPAR_TC_FLOOR (kdim,dtb%NPAR_FLOOR_LAYER))
592  DO jlayer=1,dtb%NPAR_FLOOR_LAYER
593  WRITE(yrecfm,fmt='(A10,I1.1)') 'D_TC_FLOOR',jlayer
594  CALL read_field(yrecfm,dtb%XPAR_TC_FLOOR(:,jlayer),hdirin)
595  END DO
596  ENDIF
597  !
598  IF (dtb%LDATA_D_FLOOR) THEN
599  ALLOCATE(dtb%XPAR_D_FLOOR (kdim,dtb%NPAR_FLOOR_LAYER))
600  DO jlayer=1,dtb%NPAR_FLOOR_LAYER
601  WRITE(yrecfm,fmt='(A9,I1.1)') 'D_D_FLOOR',jlayer
602  CALL read_field(yrecfm,dtb%XPAR_D_FLOOR(:,jlayer),hdirin)
603  END DO
604  ENDIF
605  !
606  IF (dtb%LDATA_TCOOL_TARGET) THEN
607  ALLOCATE(dtb%XPAR_TCOOL_TARGET (kdim))
608  yrecfm='D_TCOOL_TARG'
609  CALL read_field(yrecfm,dtb%XPAR_TCOOL_TARGET,hdirin)
610  ENDIF
611  !
612  IF (dtb%LDATA_THEAT_TARGET) THEN
613  ALLOCATE(dtb%XPAR_THEAT_TARGET (kdim))
614  yrecfm='D_THEAT_TARG'
615  CALL read_field(yrecfm,dtb%XPAR_THEAT_TARGET,hdirin)
616  ENDIF
617  !
618  IF (dtb%LDATA_F_WASTE_CAN) THEN
619  ALLOCATE(dtb%XPAR_F_WASTE_CAN (kdim))
620  yrecfm='D_F_WAST_CAN'
621  CALL read_field(yrecfm,dtb%XPAR_F_WASTE_CAN,hdirin)
622  ENDIF
623  !
624  IF (dtb%LDATA_EFF_HEAT) THEN
625  ALLOCATE(dtb%XPAR_EFF_HEAT (kdim))
626  yrecfm='D_EFF_HEAT'
627  CALL read_field(yrecfm,dtb%XPAR_EFF_HEAT,hdirin)
628  ENDIF
629  !
630  IF (dtb%LDATA_QIN) THEN
631  ALLOCATE(dtb%XPAR_QIN (kdim))
632  yrecfm='D_QIN'
633  CALL read_field(yrecfm,dtb%XPAR_QIN,hdirin)
634  ENDIF
635  !
636  IF (dtb%LDATA_QIN_FRAD) THEN
637  ALLOCATE(dtb%XPAR_QIN_FRAD (kdim))
638  yrecfm='D_QIN_FRAD'
639  CALL read_field(yrecfm,dtb%XPAR_QIN_FRAD,hdirin)
640  ENDIF
641  !
642  IF (dtb%LDATA_SHGC) THEN
643  ALLOCATE(dtb%XPAR_SHGC (kdim))
644  yrecfm='D_SHGC'
645  CALL read_field(yrecfm,dtb%XPAR_SHGC,hdirin)
646  ENDIF
647  !
648  IF (dtb%LDATA_U_WIN) THEN
649  ALLOCATE(dtb%XPAR_U_WIN (kdim))
650  yrecfm='D_U_WIN'
651  CALL read_field(yrecfm,dtb%XPAR_U_WIN,hdirin)
652  ENDIF
653  !
654  IF (dtb%LDATA_GR) THEN
655  ALLOCATE(dtb%XPAR_GR (kdim))
656  yrecfm='D_GR'
657  CALL read_field(yrecfm,dtb%XPAR_GR,hdirin)
658  ENDIF
659  !
660  IF (dtb%LDATA_SHGC_SH) THEN
661  ALLOCATE(dtb%XPAR_SHGC_SH (kdim))
662  yrecfm='D_SHGC_SH'
663  CALL read_field(yrecfm,dtb%XPAR_SHGC_SH,hdirin)
664  ENDIF
665  !
666  IF (dtb%LDATA_FLOOR_HEIGHT) THEN
667  ALLOCATE(dtb%XPAR_FLOOR_HEIGHT (kdim))
668  yrecfm='D_FLOOR_HEIG'
669  CALL read_field(yrecfm,dtb%XPAR_FLOOR_HEIGHT,hdirin)
670  ENDIF
671  !
672  IF (dtb%LDATA_INF) THEN
673  ALLOCATE(dtb%XPAR_INF (kdim))
674  yrecfm='D_INF'
675  CALL read_field(yrecfm,dtb%XPAR_INF,hdirin)
676  ENDIF
677  !
678  IF (dtb%LDATA_F_WATER_COND) THEN
679  ALLOCATE(dtb%XPAR_F_WATER_COND (kdim))
680  yrecfm='D_FWAT_COND'
681  CALL read_field(yrecfm,dtb%XPAR_F_WATER_COND,hdirin)
682  ENDIF
683  !
684  IF (dtb%LDATA_SHADE) THEN
685  ALLOCATE(dtb%XPAR_SHADE (kdim))
686  yrecfm='D_SHADE'
687  CALL read_field(yrecfm,dtb%XPAR_SHADE,hdirin)
688  dtb%XPAR_SHADE=float(nint(dtb%XPAR_SHADE))
689  ENDIF
690  !
691  IF (dtb%LDATA_NATVENT) THEN
692  ALLOCATE(dtb%XPAR_NATVENT (kdim))
693  yrecfm='D_NATVENT'
694  CALL read_field(yrecfm,dtb%XPAR_NATVENT,hdirin)
695  dtb%XPAR_NATVENT=float(nint(dtb%XPAR_NATVENT))
696  ENDIF
697  !
698  IF (dtb%LDATA_QIN_FLAT) THEN
699  ALLOCATE(dtb%XPAR_QIN_FLAT (kdim))
700  yrecfm='D_QIN_FLAT'
701  CALL read_field(yrecfm,dtb%XPAR_QIN_FLAT,hdirin)
702  ENDIF
703  !
704  IF (dtb%LDATA_HR_TARGET) THEN
705  ALLOCATE(dtb%XPAR_HR_TARGET (kdim))
706  yrecfm='D_HR_TARGET'
707  CALL read_field(yrecfm,dtb%XPAR_HR_TARGET,hdirin)
708  ENDIF
709  !
710  IF (dtb%LDATA_V_VENT) THEN
711  ALLOCATE(dtb%XPAR_V_VENT (kdim))
712  yrecfm='D_V_VENT'
713  CALL read_field(yrecfm,dtb%XPAR_V_VENT,hdirin)
714  ENDIF
715  !
716  IF (dtb%LDATA_CAP_SYS_HEAT) THEN
717  ALLOCATE(dtb%XPAR_CAP_SYS_HEAT (kdim))
718  yrecfm='D_CAP_SYS_HE'
719  CALL read_field(yrecfm,dtb%XPAR_CAP_SYS_HEAT,hdirin)
720  ENDIF
721  !
722  IF (dtb%LDATA_CAP_SYS_RAT) THEN
723  ALLOCATE(dtb%XPAR_CAP_SYS_RAT (kdim))
724  yrecfm='D_CAP_SYS_RA'
725  CALL read_field(yrecfm,dtb%XPAR_CAP_SYS_RAT,hdirin)
726  ENDIF
727  !
728  IF (dtb%LDATA_T_ADP) THEN
729  ALLOCATE(dtb%XPAR_T_ADP (kdim))
730  yrecfm='D_T_ADP'
731  CALL read_field(yrecfm,dtb%XPAR_T_ADP,hdirin)
732  ENDIF
733  !
734  IF (dtb%LDATA_M_SYS_RAT) THEN
735  ALLOCATE(dtb%XPAR_M_SYS_RAT (kdim))
736  yrecfm='D_M_SYS_RAT'
737  CALL read_field(yrecfm,dtb%XPAR_M_SYS_RAT,hdirin)
738  ENDIF
739  !
740  IF (dtb%LDATA_COP_RAT) THEN
741  ALLOCATE(dtb%XPAR_COP_RAT (kdim))
742  yrecfm='D_COP_RAT'
743  CALL read_field(yrecfm,dtb%XPAR_COP_RAT,hdirin)
744  ENDIF
745  !
746  IF (dtb%LDATA_T_SIZE_MAX) THEN
747  ALLOCATE(dtb%XPAR_T_SIZE_MAX (kdim))
748  yrecfm='D_T_SIZE_MAX'
749  CALL read_field(yrecfm,dtb%XPAR_T_SIZE_MAX,hdirin)
750  ENDIF
751  !
752  IF (dtb%LDATA_T_SIZE_MIN) THEN
753  ALLOCATE(dtb%XPAR_T_SIZE_MIN (kdim))
754  yrecfm='D_T_SIZE_MIN'
755  CALL read_field(yrecfm,dtb%XPAR_T_SIZE_MIN,hdirin)
756  ENDIF
757  !
758 ENDIF
759 !
760 IF (lhook) CALL dr_hook('READ_PGD_TEB_PAR_N',1,zhook_handle)
761 !
762 !-------------------------------------------------------------------------------
763 CONTAINS
764 !-------------------------------------------------------------------------------
765 !
766 SUBROUTINE read_field(HRECFM,PFIELD,YDIR)
767 !
768 USE modi_hor_interpol
769 !
770 IMPLICIT NONE
771 !
772  CHARACTER(LEN=*), INTENT(IN) :: HRECFM ! name of record in the file
773 REAL, DIMENSION(KDIM), INTENT(OUT) :: PFIELD
774  CHARACTER(LEN=1), INTENT(IN) :: YDIR
775 !
776 REAL, DIMENSION(KNI) :: ZF
777 REAL, DIMENSION(:,:), POINTER :: ZIN
778 REAL, DIMENSION(KDIM,1) :: ZOUT
779 REAL(KIND=JPRB) :: ZHOOK_HANDLE
780 !
781 IF (lhook) CALL dr_hook('READ_PGD_TEB_PAR_N:READ_FIELD',0,zhook_handle)
782 !
783 IF (ydir=='A') THEN
784  !
785  CALL read_surf(hprogram,hrecfm,zf,iresp,hdir='A')
786  ALLOCATE(zin(kni,1))
787  zin(:,1) = zf(:)
788  CALL hor_interpol(dtco, u, gcp, iluout,zin,zout)
789  DEALLOCATE(zin)
790  pfield(:) = zout(:,1)
791  !
792 ELSE
793  CALL read_surf(hprogram,hrecfm,pfield,iresp)
794 ENDIF
795 !
796 IF (lhook) CALL dr_hook('READ_PGD_TEB_PAR_N:READ_FIELD',1,zhook_handle)
797 !
798 END SUBROUTINE read_field
799 !_______________________________
800 !
801 END SUBROUTINE read_pgd_teb_par_n
subroutine read_field(HRECFM, PFIELD, YDIR)
integer function, dimension(size(ktype)) bldcode(BDD, KTYPE, KAGE)
Definition: bldcode.F90:6
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
subroutine hor_interpol(DTCO, U, GCP, KLUOUT, PFIELDIN, PFIELDOUT)
Definition: hor_interpol.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
logical lhook
Definition: yomhook.F90:15
subroutine read_bld_description_n(BDD, HPROGRAM)
subroutine read_pgd_teb_par_n(DTCO, U, GCP, BDD, DTB, DTT, KDIM,