source: palm/trunk/SOURCE/urban_surface_mod.f90 @ 4510

Last change on this file since 4510 was 4510, checked in by raasch, 14 months ago

files re-formatted to follow the PALM coding standard

  • Property svn:keywords set to Id
File size: 525.8 KB
Line 
1!> @file urban_surface_mod.f90
2!--------------------------------------------------------------------------------------------------!
3! This file is part of the PALM model system.
4!
5! PALM is free software: you can redistribute it and/or modify it under the terms of the GNU General
6! Public License as published by the Free Software Foundation, either version 3 of the License, or
7! (at your option) any later version.
8!
9! PALM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
10! implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11! Public License for more details.
12!
13! You should have received a copy of the GNU General Public License along with PALM. If not, see
14! <http://www.gnu.org/licenses/>.
15!
16! Copyright 2015-2020 Czech Technical University in Prague
17! Copyright 2015-2020 Institute of Computer Science of the Czech Academy of Sciences, Prague
18! Copyright 1997-2020 Leibniz Universitaet Hannover
19!--------------------------------------------------------------------------------------------------!
20!
21!
22! Current revisions:
23! -----------------
24!
25!
26! Former revisions:
27! -----------------
28! $Id: urban_surface_mod.f90 4510 2020-04-29 14:19:18Z raasch $
29! Further re-formatting to follow the PALM coding standard
30!
31! 4509 2020-04-26 15:57:55Z raasch
32! File re-formatted to follow the PALM coding standard
33!
34! 4500 2020-04-17 10:12:45Z suehring
35! Allocate array for wall heat flux, which is further used to aggregate tile
36! fractions in the surface output
37!
38! 4495 2020-04-13 20:11:20Z raasch
39! Restart data handling with MPI-IO added
40!
41! 4493 2020-04-10 09:49:43Z pavelkrc
42! J.Resler, 2020/03/19
43! - Remove reading of deprecated input parameters c_surface and lambda_surf
44! - And calculate them from parameters of the outer wall/roof layer
45!
46! 4481 2020-03-31 18:55:54Z maronga
47! Use statement for exchange horiz added
48!
49! 4442 2020-03-04 19:21:13Z suehring
50! Change order of dimension in surface arrays %frac, %emissivity and %albedo to allow for better
51! vectorization in the radiation interactions.
52!
53! 4441 2020-03-04 19:20:35Z suehring
54! Removed wall_flags_static_0 from USE statements as it's not used within the module
55!
56! 4329 2019-12-10 15:46:36Z motisi
57! Renamed wall_flags_0 to wall_flags_static_0
58!
59! 4309 2019-11-26 18:49:59Z suehring
60! - Bugfix, include m_liq into restarts
61! - Remove unused arrays for liquid water and saturation moisture at vertical walls
62!
63! 4305 2019-11-25 11:15:40Z suehring
64! Revision of some indoor-model parameters
65!
66! 4259 2019-10-09 10:05:22Z suehring
67! Instead of terminate the job in case the relative wall fractions do not sum-up to one, give only
68! an informative message and normalize the fractions.
69!
70! 4258 2019-10-07 13:29:08Z suehring
71! - Add checks to ensure that relative fractions of walls, windowns and green surfaces sum-up to one.
72! - Revise message calls dealing with local checks.
73!
74! 4245 2019-09-30 08:40:37Z pavelkrc
75! Initialize explicit per-surface parameters from building_surface_pars
76!
77! 4238 2019-09-25 16:06:01Z suehring
78! Indoor-model parameters for some building types adjusted in order to avoid unrealistically high
79! indoor temperatures (S. Rissmann)
80!
81! 4230 2019-09-11 13:58:14Z suehring
82! Bugfix, initialize canopy resistance. Even if no green fraction is set, r_canopy must be
83! initialized for output purposes.
84!
85! 4227 2019-09-10 18:04:34Z gronemeier
86! Implement new palm_date_time_mod
87!
88! 4214 2019-09-02 15:57:02Z suehring
89! Bugfix, missing initialization and clearing of soil-moisture tendency (J.Resler)
90!
91! 4182 2019-08-22 15:20:23Z scharf
92! Corrected 'Former revisions' section
93!
94! 4168 2019-08-16 13:50:17Z suehring
95! Replace function get_topography_top_index by topo_top_ind
96!
97! 4148 2019-08-08 11:26:00Z suehring
98! - Add anthropogenic heat output factors for heating and cooling to building data base
99! - Move definition of building_pars to usm_init_arrays since it is already required in the indoor
100!   model
101!
102! 4127 2019-07-30 14:47:10Z suehring
103! Do not add anthopogenic energy during wall/soil spin-up (merge from branch resler)
104!
105! 4077 2019-07-09 13:27:11Z gronemeier
106! Set roughness length z0 and z0h/q at ground-floor level to same value as those above ground-floor
107! level
108!
109! 4051 2019-06-24 13:58:30Z suehring
110! Remove work-around for green surface fraction on buildings (do not set it zero)
111!
112! 4050 2019-06-24 13:57:27Z suehring
113! In order to avoid confusion with global control parameter, rename the USM-internal flag spinup
114! into during_spinup.
115!
116! 3987 2019-05-22 09:52:13Z kanani
117! Introduce alternative switch for debug output during timestepping
118!
119! 3943 2019-05-02 09:50:41Z maronga
120! Removed qsws_eb. Bugfix in calculation of qsws.
121!
122! 3933 2019-04-25 12:33:20Z kanani
123! Remove allocation of pt_2m, this is done in surface_mod now (surfaces%pt_2m)
124!
125! 3921 2019-04-18 14:21:10Z suehring
126! Undo accidentally commented initialization
127!
128! 3918 2019-04-18 13:33:11Z suehring
129! Set green fraction to zero also at vertical surfaces
130!
131! 3914 2019-04-17 16:02:02Z suehring
132! In order to obtain correct surface temperature during spinup set window fraction to zero
133! (only during spinup) instead of just disabling time-integration of window-surface temperature.
134!
135! 3901 2019-04-16 16:17:02Z suehring
136! Workaround - set green fraction to zero ( green-heat model crashes ).
137!
138! 3896 2019-04-15 10:10:17Z suehring
139!
140!
141! 3896 2019-04-15 10:10:17Z suehring
142! Bugfix, wrong index used for accessing building_pars from PIDS
143!
144! 3885 2019-04-11 11:29:34Z kanani
145! Changes related to global restructuring of location messages and introduction of additional debug
146! messages
147!
148! 3882 2019-04-10 11:08:06Z suehring
149! Avoid different type kinds
150! Move definition of building-surface properties from declaration block to an extra routine
151!
152! 3881 2019-04-10 09:31:22Z suehring
153! Revise determination of local ground-floor level height.
154! Make level 3 initalization conform with Palm-input-data standard
155! Move output of albedo and emissivity to radiation module
156!
157! 3832 2019-03-28 13:16:58Z raasch
158! Instrumented with openmp directives
159!
160! 3824 2019-03-27 15:56:16Z pavelkrc
161! Remove unused imports
162!
163!
164! 3814 2019-03-26 08:40:31Z pavelkrc
165! Unused subroutine commented out
166!
167! 3769 2019-02-28 10:16:49Z moh.hefny
168! Removed unused variables
169!
170! 3767 2019-02-27 08:18:02Z raasch
171! Unused variables removed from rrd-subroutines parameter list
172!
173! 3748 2019-02-18 10:38:31Z suehring
174! Revise conversion of waste-heat flux (do not divide by air density, will be done in diffusion_s)
175!
176! 3745 2019-02-15 18:57:56Z suehring
177! - Remove internal flag indoor_model (is a global control parameter)
178! - Add waste heat from buildings to the kinmatic heat flux
179! - Consider waste heat in restart data
180! - Remove unused USE statements
181!
182! 3744 2019-02-15 18:38:58Z suehring
183! Fixed surface heat capacity in the building parameters convert the file back to unix format
184!
185! 3730 2019-02-11 11:26:47Z moh.hefny
186! Formatting and clean-up (rvtils)
187!
188! 3710 2019-01-30 18:11:19Z suehring
189! Check if building type is set within a valid range.
190!
191! 3705 2019-01-29 19:56:39Z suehring
192! Make nzb_wall public, required for virtual-measurements
193!
194! 3704 2019-01-29 19:51:41Z suehring
195! Some interface calls moved to module_interface + cleanup
196!
197! 3655 2019-01-07 16:51:22Z knoop
198! Implementation of the PALM module interface
199!
200! 2007 2016-08-24 15:47:17Z kanani
201! Initial revision
202!
203!
204! Description:
205! ------------
206! 2016/6/9 - Initial version of the USM (Urban Surface Model)
207!            authors: Jaroslav Resler, Pavel Krc (Czech Technical University in Prague and Institute
208!            of Computer Science of the Czech Academy of Sciences, Prague)
209!            with contributions: Michal Belda, Nina Benesova, Ondrej Vlcek
210!            partly inspired by PALM LSM (B. Maronga)
211!            parameterizations of Ra checked with TUF3D (E. S. Krayenhoff)
212!> Module for Urban Surface Model (USM)
213!> The module includes:
214!>    1. Radiation model with direct/diffuse radiation, shading, reflections and integration with
215!>       plant canopy
216!>    2. Wall and wall surface model
217!>    3. Surface layer energy balance
218!>    4. Anthropogenic heat (only from transportation so far)
219!>    5. Necessary auxiliary subroutines (reading inputs, writing outputs, restart simulations, ...)
220!> It also makes use of standard radiation and integrates it into urban surface model.
221!>
222!> Further work:
223!> -------------
224!> @todo Output of _av variables in case of restarts
225!> @todo Revise flux conversion in energy-balance solver
226!> @todo Check divisions in wtend (etc.) calculations for possible division by zero, e.g. in case
227!> fraq(0,m) + fraq(1,m) = 0?!
228!> @todo Use unit 90 for OPEN/CLOSE of input files (FK)
229!> @todo Remove reading of old csv inputs
230!--------------------------------------------------------------------------------------------------!
231 MODULE urban_surface_mod
232
233    USE arrays_3d,                                                                                 &
234        ONLY:  exner,                                                                              &
235               hyp,                                                                                &
236               hyrho,                                                                              &
237               p,                                                                                  &
238               prr,                                                                                &
239               pt,                                                                                 &
240               q,                                                                                  &
241               ql,                                                                                 &
242               tend,                                                                               &
243               u,                                                                                  &
244               v,                                                                                  &
245               vpt,                                                                                &
246               w,                                                                                  &
247               zu
248
249    USE calc_mean_profile_mod,                                                                     &
250        ONLY:  calc_mean_profile
251
252    USE basic_constants_and_equations_mod,                                                         &
253        ONLY:  c_p,                                                                                &
254               g,                                                                                  &
255               kappa,                                                                              &
256               l_v,                                                                                &
257               pi,                                                                                 &
258               r_d,                                                                                &
259               rho_l,                                                                              &
260               sigma_sb
261
262    USE control_parameters,                                                                        &
263        ONLY:  average_count_3d,                                                                   &
264               coupling_char,                                                                      &
265               coupling_start_time,                                                                &
266               debug_output,                                                                       &
267               debug_output_timestep,                                                              &
268               debug_string,                                                                       &
269               dt_do3d,                                                                            &
270               dt_3d,                                                                              &
271               dz,                                                                                 &
272               end_time,                                                                           &
273               humidity,                                                                           &
274               indoor_model,                                                                       &
275               initializing_actions,                                                               &
276               intermediate_timestep_count,                                                        &
277               intermediate_timestep_count_max,                                                    &
278               io_blocks,                                                                          &
279               io_group,                                                                           &
280               large_scale_forcing,                                                                &
281               lsf_surf,                                                                           &
282               message_string,                                                                     &
283               pt_surface,                                                                         &
284               restart_data_format_output,                                                         &
285               simulated_time,                                                                     &
286               surface_pressure,                                                                   &
287               spinup_pt_mean,                                                                     &
288               spinup_time,                                                                        &
289               time_do3d,                                                                          &
290               time_since_reference_point,                                                         &
291               timestep_scheme,                                                                    &
292               topography,                                                                         &
293               tsc,                                                                                &
294               urban_surface,                                                                      &
295               varnamelength
296
297
298    USE bulk_cloud_model_mod,                                                                      &
299        ONLY:  bulk_cloud_model,                                                                   &
300               precipitation
301
302    USE cpulog,                                                                                    &
303        ONLY:  cpu_log,                                                                            &
304               log_point,                                                                          &
305               log_point_s
306
307    USE grid_variables,                                                                            &
308        ONLY:  ddx,                                                                                &
309               ddx2,                                                                               &
310               ddy,                                                                                &
311               ddy2,                                                                               &
312               dx,                                                                                 &
313               dy
314
315    USE indices,                                                                                   &
316        ONLY:  nbgp,                                                                               &
317               nnx,                                                                                &
318               nny,                                                                                &
319               nnz,                                                                                &
320               nx,                                                                                 &
321               nxl,                                                                                &
322               nxlg,                                                                               &
323               nxr,                                                                                &
324               nxrg,                                                                               &
325               ny,                                                                                 &
326               nyn,                                                                                &
327               nyng,                                                                               &
328               nys,                                                                                &
329               nysg,                                                                               &
330               nzb,                                                                                &
331               nzt,                                                                                &
332               topo_top_ind
333
334    USE, INTRINSIC :: iso_c_binding
335
336    USE kinds
337
338    USE palm_date_time_mod,                                                                        &
339        ONLY:  get_date_time,                                                                      &
340               seconds_per_hour
341
342    USE pegrid
343
344    USE radiation_model_mod,                                                                       &
345        ONLY:  albedo_type,                                                                        &
346               force_radiation_call,                                                               &
347               id,                                                                                 &
348               ieast_l,                                                                            &
349               ieast_u,                                                                            &
350               inorth_l,                                                                           &
351               inorth_u,                                                                           &
352               isouth_l,                                                                           &
353               isouth_u,                                                                           &
354               iup_l,                                                                              &
355               iup_u,                                                                              &
356               iwest_l,                                                                            &
357               iwest_u,                                                                            &
358               nz_urban_b,                                                                         &
359               nz_urban_t,                                                                         &
360               radiation_interaction,                                                              &
361               radiation,                                                                          &
362               rad_lw_in,                                                                          &
363               rad_lw_out,                                                                         &
364               rad_sw_in,                                                                          &
365               rad_sw_out,                                                                         &
366               unscheduled_radiation_calls
367
368    USE restart_data_mpi_io_mod,                                                                   &
369        ONLY:  rd_mpi_io_surface_filetypes,                                                        &
370               wrd_mpi_io,                                                                         &
371               wrd_mpi_io_surface
372
373    USE statistics,                                                                                &
374        ONLY:  hom,                                                                                &
375               statistic_regions
376
377    USE surface_mod,                                                                               &
378        ONLY:  ind_pav_green,                                                                      &
379               ind_veg_wall,                                                                       &
380               ind_wat_win,                                                                        &
381               surf_usm_h,                                                                         &
382               surf_usm_v,                                                                         &
383               surface_restore_elements
384
385
386    IMPLICIT NONE
387
388!
389!-- USM model constants
390
391    REAL(wp), PARAMETER ::  b_ch               = 6.04_wp    !< Clapp & Hornberger exponent
392    REAL(wp), PARAMETER ::  lambda_h_green_dry = 0.19_wp    !< heat conductivity for dry soil
393    REAL(wp), PARAMETER ::  lambda_h_green_sm  = 3.44_wp    !< heat conductivity of the soil matrix
394    REAL(wp), PARAMETER ::  lambda_h_water     = 0.57_wp    !< heat conductivity of water
395    REAL(wp), PARAMETER ::  psi_sat            = -0.388_wp  !< soil matrix potential at saturation
396    REAL(wp), PARAMETER ::  rho_c_soil         = 2.19E6_wp  !< volumetric heat capacity of soil
397    REAL(wp), PARAMETER ::  rho_c_water        = 4.20E6_wp  !< volumetric heat capacity of water
398!    REAL(wp), PARAMETER ::  m_max_depth        = 0.0002_wp  !< Maximum capacity of the water reservoir (m)
399
400!
401!-- Soil parameters I           alpha_vg,      l_vg_green,    n_vg, gamma_w_green_sat
402    REAL(wp), DIMENSION(0:3,1:7), PARAMETER ::  soil_pars = RESHAPE( (/     &
403                                 3.83_wp,  1.250_wp, 1.38_wp,  6.94E-6_wp, &  !< soil 1
404                                 3.14_wp, -2.342_wp, 1.28_wp,  1.16E-6_wp, &  !< soil 2
405                                 0.83_wp, -0.588_wp, 1.25_wp,  0.26E-6_wp, &  !< soil 3
406                                 3.67_wp, -1.977_wp, 1.10_wp,  2.87E-6_wp, &  !< soil 4
407                                 2.65_wp,  2.500_wp, 1.10_wp,  1.74E-6_wp, &  !< soil 5
408                                 1.30_wp,  0.400_wp, 1.20_wp,  0.93E-6_wp, &  !< soil 6
409                                 0.00_wp,  0.00_wp,  0.00_wp,  0.57E-6_wp  &  !< soil 7
410                                 /), (/ 4, 7 /) )
411
412!
413!-- Soil parameters II              swc_sat,     fc,   wilt,    swc_res
414    REAL(wp), DIMENSION(0:3,1:7), PARAMETER ::  m_soil_pars = RESHAPE( (/ &
415                                 0.403_wp, 0.244_wp, 0.059_wp, 0.025_wp, &  !< soil 1
416                                 0.439_wp, 0.347_wp, 0.151_wp, 0.010_wp, &  !< soil 2
417                                 0.430_wp, 0.383_wp, 0.133_wp, 0.010_wp, &  !< soil 3
418                                 0.520_wp, 0.448_wp, 0.279_wp, 0.010_wp, &  !< soil 4
419                                 0.614_wp, 0.541_wp, 0.335_wp, 0.010_wp, &  !< soil 5
420                                 0.766_wp, 0.663_wp, 0.267_wp, 0.010_wp, &  !< soil 6
421                                 0.472_wp, 0.323_wp, 0.171_wp, 0.000_wp  &  !< soil 7
422                                 /), (/ 4, 7 /) )
423!
424!-- Value 9999999.9_wp -> Generic available or user-defined value must be set otherwise
425!-- -> No generic variable and user setting is optional
426    REAL(wp) ::  alpha_vangenuchten = 9999999.9_wp      !< NAMELIST alpha_vg
427    REAL(wp) ::  field_capacity = 9999999.9_wp          !< NAMELIST fc
428    REAL(wp) ::  hydraulic_conductivity = 9999999.9_wp  !< NAMELIST gamma_w_green_sat
429    REAL(wp) ::  l_vangenuchten = 9999999.9_wp          !< NAMELIST l_vg
430    REAL(wp) ::  n_vangenuchten = 9999999.9_wp          !< NAMELIST n_vg
431    REAL(wp) ::  residual_moisture = 9999999.9_wp       !< NAMELIST m_res
432    REAL(wp) ::  saturation_moisture = 9999999.9_wp     !< NAMELIST m_sat
433    REAL(wp) ::  wilting_point = 9999999.9_wp           !< NAMELIST m_wilt
434
435!
436!-- Configuration parameters (they can be setup in PALM config)
437    LOGICAL ::  force_radiation_call_l = .FALSE.   !< flag parameter for unscheduled radiation model calls
438    LOGICAL ::  read_wall_temp_3d = .FALSE.        !<
439    LOGICAL ::  usm_anthropogenic_heat = .FALSE.   !< flag parameter indicating wheather the anthropogenic heat sources
440                                                   !< (e.g.transportation) are used
441    LOGICAL ::  usm_material_model = .TRUE.        !< flag parameter indicating wheather the  model of heat in materials is used
442    LOGICAL ::  usm_wall_mod = .FALSE.             !< reduces conductivity of the first 2 wall layers by factor 0.1
443
444
445    INTEGER(iwp) ::  building_type = 1               !< default building type (preleminary setting)
446    INTEGER(iwp) ::  land_category = 2               !< default category for land surface
447    INTEGER(iwp) ::  pedestrian_category = 2         !< default category for wall surface in pedestrian zone
448    INTEGER(iwp) ::  roof_category = 2               !< default category for root surface
449    INTEGER(iwp) ::  wall_category = 2               !< default category for wall surface over pedestrian zone
450
451    REAL(wp)     ::  roughness_concrete = 0.001_wp   !< roughness length of average concrete surface
452
453!
454!-- Indices of input attributes in building_pars for (above) ground floor level
455    INTEGER(iwp) ::  ind_alb_wall_agfl     = 38   !< index in input list for albedo_type of wall above ground floor level
456    INTEGER(iwp) ::  ind_alb_wall_gfl      = 66   !< index in input list for albedo_type of wall ground floor level
457    INTEGER(iwp) ::  ind_alb_wall_r        = 101  !< index in input list for albedo_type of wall roof
458    INTEGER(iwp) ::  ind_alb_green_agfl    = 39   !< index in input list for albedo_type of green above ground floor level
459    INTEGER(iwp) ::  ind_alb_green_gfl     = 78   !< index in input list for albedo_type of green ground floor level
460    INTEGER(iwp) ::  ind_alb_green_r       = 117  !< index in input list for albedo_type of green roof
461    INTEGER(iwp) ::  ind_alb_win_agfl      = 40   !< index in input list for albedo_type of window fraction above ground floor
462                                                  !< level
463    INTEGER(iwp) ::  ind_alb_win_gfl       = 77   !< index in input list for albedo_type of window fraction ground floor level
464    INTEGER(iwp) ::  ind_alb_win_r         = 115  !< index in input list for albedo_type of window fraction roof
465    INTEGER(iwp) ::  ind_emis_wall_agfl    = 14   !< index in input list for wall emissivity, above ground floor level
466    INTEGER(iwp) ::  ind_emis_wall_gfl     = 32   !< index in input list for wall emissivity, ground floor level
467    INTEGER(iwp) ::  ind_emis_wall_r       = 100  !< index in input list for wall emissivity, roof
468    INTEGER(iwp) ::  ind_emis_green_agfl   = 15   !< index in input list for green emissivity, above ground floor level
469    INTEGER(iwp) ::  ind_emis_green_gfl    = 34   !< index in input list for green emissivity, ground floor level
470    INTEGER(iwp) ::  ind_emis_green_r      = 116  !< index in input list for green emissivity, roof
471    INTEGER(iwp) ::  ind_emis_win_agfl     = 16   !< index in input list for window emissivity, above ground floor level
472    INTEGER(iwp) ::  ind_emis_win_gfl      = 33   !< index in input list for window emissivity, ground floor level
473    INTEGER(iwp) ::  ind_emis_win_r        = 113  !< index in input list for window emissivity, roof
474    INTEGER(iwp) ::  ind_gflh              = 20   !< index in input list for ground floor level height
475    INTEGER(iwp) ::  ind_green_frac_w_agfl = 2    !< index in input list for green fraction on wall, above ground floor level
476    INTEGER(iwp) ::  ind_green_frac_w_gfl  = 23   !< index in input list for green fraction on wall, ground floor level
477    INTEGER(iwp) ::  ind_green_frac_r_agfl = 3    !< index in input list for green fraction on roof, above ground floor level
478    INTEGER(iwp) ::  ind_green_frac_r_gfl  = 24   !< index in input list for green fraction on roof, ground floor level
479    INTEGER(iwp) ::  ind_green_type_roof   = 118  !< index in input list for type of green roof
480    INTEGER(iwp) ::  ind_hc1_agfl          = 6    !< index in input list for heat capacity at first wall layer,
481                                                  !< above ground floor level
482    INTEGER(iwp) ::  ind_hc1_gfl           = 26   !< index in input list for heat capacity at first wall layer, ground floor level
483    INTEGER(iwp) ::  ind_hc1_wall_r        = 94   !< index in input list for heat capacity at first wall layer, roof
484    INTEGER(iwp) ::  ind_hc1_win_agfl      = 83   !< index in input list for heat capacity at first window layer,
485                                                  !< above ground floor level
486    INTEGER(iwp) ::  ind_hc1_win_gfl       = 71   !< index in input list for heat capacity at first window layer,
487                                                  !< ground floor level
488    INTEGER(iwp) ::  ind_hc1_win_r         = 107  !< index in input list for heat capacity at first window layer, roof
489    INTEGER(iwp) ::  ind_hc2_agfl          = 7    !< index in input list for heat capacity at second wall layer,
490                                                  !< above ground floor level
491    INTEGER(iwp) ::  ind_hc2_gfl           = 27   !< index in input list for heat capacity at second wall layer, ground floor level
492    INTEGER(iwp) ::  ind_hc2_wall_r        = 95   !< index in input list for heat capacity at second wall layer, roof
493    INTEGER(iwp) ::  ind_hc2_win_agfl      = 84   !< index in input list for heat capacity at second window layer,
494                                                  !< above ground floor level
495    INTEGER(iwp) ::  ind_hc2_win_gfl       = 72   !< index in input list for heat capacity at second window layer,
496                                                  !< ground floor level
497    INTEGER(iwp) ::  ind_hc2_win_r         = 108  !< index in input list for heat capacity at second window layer, roof
498    INTEGER(iwp) ::  ind_hc3_agfl          = 8    !< index in input list for heat capacity at third wall layer,
499                                                  !< above ground floor level
500    INTEGER(iwp) ::  ind_hc3_gfl           = 28   !< index in input list for heat capacity at third wall layer, ground floor level
501    INTEGER(iwp) ::  ind_hc3_wall_r        = 96   !< index in input list for heat capacity at third wall layer, roof
502    INTEGER(iwp) ::  ind_hc3_win_agfl      = 85   !< index in input list for heat capacity at third window layer,
503                                                  !< above ground floor level
504    INTEGER(iwp) ::  ind_hc3_win_gfl       = 73   !< index in input list for heat capacity at third window layer,
505                                                  !< ground floor level
506    INTEGER(iwp) ::  ind_hc3_win_r         = 109  !< index in input list for heat capacity at third window layer, roof
507    INTEGER(iwp) ::  ind_indoor_target_temp_summer = 12  !<
508    INTEGER(iwp) ::  ind_indoor_target_temp_winter = 13  !<
509    INTEGER(iwp) ::  ind_lai_r_agfl        = 4    !< index in input list for LAI on roof, above ground floor level
510    INTEGER(iwp) ::  ind_lai_r_gfl         = 4    !< index in input list for LAI on roof, ground floor level
511    INTEGER(iwp) ::  ind_lai_w_agfl        = 5    !< index in input list for LAI on wall, above ground floor level
512    INTEGER(iwp) ::  ind_lai_w_gfl         = 25   !< index in input list for LAI on wall, ground floor level
513    INTEGER(iwp) ::  ind_tc1_agfl          = 9    !< index in input list for thermal conductivity at first wall layer,
514                                                  !< above ground floor level
515    INTEGER(iwp) ::  ind_tc1_gfl           = 29   !< index in input list for thermal conductivity at first wall layer,
516                                                  !< ground floor level
517    INTEGER(iwp) ::  ind_tc1_wall_r        = 97   !< index in input list for thermal conductivity at first wall layer, roof
518    INTEGER(iwp) ::  ind_tc1_win_agfl      = 86   !< index in input list for thermal conductivity at first window layer,
519                                                  !< above ground floor level
520    INTEGER(iwp) ::  ind_tc1_win_gfl       = 74   !< index in input list for thermal conductivity at first window layer,
521                                                  !< ground floor level
522    INTEGER(iwp) ::  ind_tc1_win_r         = 110  !< index in input list for thermal conductivity at first window layer, roof
523    INTEGER(iwp) ::  ind_tc2_agfl          = 10   !< index in input list for thermal conductivity at second wall layer,
524                                                  !< above ground floor level
525    INTEGER(iwp) ::  ind_tc2_gfl           = 30   !< index in input list for thermal conductivity at second wall layer,
526                                                  !< ground floor level
527    INTEGER(iwp) ::  ind_tc2_wall_r        = 98   !< index in input list for thermal conductivity at second wall layer, roof
528    INTEGER(iwp) ::  ind_tc2_win_agfl      = 87   !< index in input list for thermal conductivity at second window layer,
529                                                  !< above ground floor level
530    INTEGER(iwp) ::  ind_tc2_win_gfl       = 75   !< index in input list for thermal conductivity at second window layer,
531                                                  !< ground floor level
532    INTEGER(iwp) ::  ind_tc2_win_r         = 111  !< index in input list for thermal conductivity at second window layer,
533                                                  !< ground floor level
534    INTEGER(iwp) ::  ind_tc3_agfl          = 11   !< index in input list for thermal conductivity at third wall layer,
535                                                  !< above ground floor level
536    INTEGER(iwp) ::  ind_tc3_gfl           = 31   !< index in input list for thermal conductivity at third wall layer,
537                                                  !< ground floor level
538    INTEGER(iwp) ::  ind_tc3_wall_r        = 99   !< index in input list for thermal conductivity at third wall layer, roof
539    INTEGER(iwp) ::  ind_tc3_win_agfl      = 88   !< index in input list for thermal conductivity at third window layer,
540                                                  !< above ground floor level
541    INTEGER(iwp) ::  ind_tc3_win_gfl       = 76   !< index in input list for thermal conductivity at third window layer,
542                                                  !< ground floor level
543    INTEGER(iwp) ::  ind_tc3_win_r         = 112  !< index in input list for thermal conductivity at third window layer, roof
544    INTEGER(iwp) ::  ind_thick_1_agfl      = 41   !< index for wall layer thickness - 1st layer above ground floor level
545    INTEGER(iwp) ::  ind_thick_1_gfl       = 62   !< index for wall layer thickness - 1st layer ground floor level
546    INTEGER(iwp) ::  ind_thick_1_wall_r    = 90   !< index for wall layer thickness - 1st layer roof
547    INTEGER(iwp) ::  ind_thick_1_win_agfl  = 79   !< index for window layer thickness - 1st layer above ground floor level
548    INTEGER(iwp) ::  ind_thick_1_win_gfl   = 67   !< index for window layer thickness - 1st layer ground floor level
549    INTEGER(iwp) ::  ind_thick_1_win_r     = 103  !< index for window layer thickness - 1st layer roof
550    INTEGER(iwp) ::  ind_thick_2_agfl      = 42   !< index for wall layer thickness - 2nd layer above ground floor level
551    INTEGER(iwp) ::  ind_thick_2_gfl       = 63   !< index for wall layer thickness - 2nd layer ground floor level
552    INTEGER(iwp) ::  ind_thick_2_wall_r    = 91   !< index for wall layer thickness - 2nd layer roof
553    INTEGER(iwp) ::  ind_thick_2_win_agfl  = 80   !< index for window layer thickness - 2nd layer above ground floor level
554    INTEGER(iwp) ::  ind_thick_2_win_gfl   = 68   !< index for window layer thickness - 2nd layer ground floor level
555    INTEGER(iwp) ::  ind_thick_2_win_r     = 104  !< index for window layer thickness - 2nd layer roof
556    INTEGER(iwp) ::  ind_thick_3_agfl      = 43   !< index for wall layer thickness - 3rd layer above ground floor level
557    INTEGER(iwp) ::  ind_thick_3_gfl       = 64   !< index for wall layer thickness - 3rd layer ground floor level
558    INTEGER(iwp) ::  ind_thick_3_wall_r    = 92   !< index for wall layer thickness - 3rd layer roof
559    INTEGER(iwp) ::  ind_thick_3_win_agfl  = 81   !< index for window layer thickness - 3rd layer above ground floor level
560    INTEGER(iwp) ::  ind_thick_3_win_gfl   = 69   !< index for window layer thickness - 3rd layer ground floor level
561    INTEGER(iwp) ::  ind_thick_3_win_r     = 105  !< index for window layer thickness - 3rd layer roof
562    INTEGER(iwp) ::  ind_thick_4_agfl      = 44   !< index for wall layer thickness - 4th layer above ground floor level
563    INTEGER(iwp) ::  ind_thick_4_gfl       = 65   !< index for wall layer thickness - 4th layer ground floor level
564    INTEGER(iwp) ::  ind_thick_4_wall_r    = 93   !< index for wall layer thickness - 4st layer roof
565    INTEGER(iwp) ::  ind_thick_4_win_agfl  = 82   !< index for window layer thickness - 4th layer above ground floor level
566    INTEGER(iwp) ::  ind_thick_4_win_gfl   = 70   !< index for window layer thickness - 4th layer ground floor level
567    INTEGER(iwp) ::  ind_thick_4_win_r     = 106  !< index for window layer thickness - 4th layer roof
568    INTEGER(iwp) ::  ind_trans_agfl        = 17   !< index in input list for window transmissivity, above ground floor level
569    INTEGER(iwp) ::  ind_trans_gfl         = 35   !< index in input list for window transmissivity, ground floor level
570    INTEGER(iwp) ::  ind_trans_r           = 114  !< index in input list for window transmissivity, roof
571    INTEGER(iwp) ::  ind_wall_frac_agfl    = 0    !< index in input list for wall fraction, above ground floor level
572    INTEGER(iwp) ::  ind_wall_frac_gfl     = 21   !< index in input list for wall fraction, ground floor level
573    INTEGER(iwp) ::  ind_wall_frac_r       = 89   !< index in input list for wall fraction, roof
574    INTEGER(iwp) ::  ind_win_frac_agfl     = 1    !< index in input list for window fraction, above ground floor level
575    INTEGER(iwp) ::  ind_win_frac_gfl      = 22   !< index in input list for window fraction, ground floor level
576    INTEGER(iwp) ::  ind_win_frac_r        = 102  !< index in input list for window fraction, roof
577    INTEGER(iwp) ::  ind_z0_agfl           = 18   !< index in input list for z0, above ground floor level
578    INTEGER(iwp) ::  ind_z0_gfl            = 36   !< index in input list for z0, ground floor level
579    INTEGER(iwp) ::  ind_z0qh_agfl         = 19   !< index in input list for z0h / z0q, above ground floor level
580    INTEGER(iwp) ::  ind_z0qh_gfl          = 37   !< index in input list for z0h / z0q, ground floor level
581!
582!-- Indices of input attributes in building_surface_pars (except for radiation-related, which are in
583!-- radiation_model_mod)
584    CHARACTER(37), DIMENSION(0:7), PARAMETER ::  building_type_name = (/     &
585                                   'user-defined                         ', &  !< type 0
586                                   'residential - 1950                   ', &  !< type  1
587                                   'residential 1951 - 2000              ', &  !< type  2
588                                   'residential 2001 -                   ', &  !< type  3
589                                   'office - 1950                        ', &  !< type  4
590                                   'office 1951 - 2000                   ', &  !< type  5
591                                   'office 2001 -                        ', &  !< type  6
592                                   'bridges                              '  &  !< type  7
593                                                                     /)
594
595    INTEGER(iwp) ::  ind_s_emis_green                = 14  !< index for emissivity of green fraction (0-1)
596    INTEGER(iwp) ::  ind_s_emis_wall                 = 13  !< index for emissivity of wall fraction (0-1)
597    INTEGER(iwp) ::  ind_s_emis_win                  = 15  !< index for emissivity o f window fraction (0-1)
598    INTEGER(iwp) ::  ind_s_green_frac_r              = 3   !< index for green fraction on roof (0-1)
599    INTEGER(iwp) ::  ind_s_green_frac_w              = 2   !< index for green fraction on wall (0-1)
600    INTEGER(iwp) ::  ind_s_hc1                       = 5   !< index for heat capacity of wall layer 1
601    INTEGER(iwp) ::  ind_s_hc2                       = 6   !< index for heat capacity of wall layer 2
602    INTEGER(iwp) ::  ind_s_hc3                       = 7   !< index for heat capacity of wall layer 3
603    INTEGER(iwp) ::  ind_s_indoor_target_temp_summer = 11  !< index for indoor target summer temperature
604    INTEGER(iwp) ::  ind_s_indoor_target_temp_winter = 12  !< index for indoor target winter temperature
605    INTEGER(iwp) ::  ind_s_lai_r                     = 4   !< index for leaf area index of green fraction
606    INTEGER(iwp) ::  ind_s_tc1                       = 8   !< index for thermal conducivity of wall layer 1
607    INTEGER(iwp) ::  ind_s_tc2                       = 9   !< index for thermal conducivity of wall layer 2
608    INTEGER(iwp) ::  ind_s_tc3                       = 10  !< index for thermal conducivity of wall layer 3
609    INTEGER(iwp) ::  ind_s_trans                     = 16  !< index for transmissivity of window fraction (0-1)
610    INTEGER(iwp) ::  ind_s_wall_frac                 = 0   !< index for wall fraction (0-1)
611    INTEGER(iwp) ::  ind_s_win_frac                  = 1   !< index for window fraction (0-1)
612    INTEGER(iwp) ::  ind_s_z0                        = 17  !< index for roughness length for momentum (m)
613    INTEGER(iwp) ::  ind_s_z0qh                      = 18  !< index for roughness length for heat (m)
614
615    REAL(wp)  ::  ground_floor_level = 4.0_wp  !< default ground floor level
616    REAL(wp)  ::  roof_height_limit  = 4.0_wp  !< height to distinguish between land surfaces and roofs
617
618
619
620
621!
622!-- Building facade/wall/green/window properties (partly according to PIDS).
623!-- Initialization of building_pars is outsourced to usm_init_pars. This is needed because of the
624!-- huge number of attributes given in building_pars (>700), while intel and gfortran compiler have
625!-- hard limit of continuation lines of 511.
626    REAL(wp), DIMENSION(0:135,1:7) ::  building_pars  !<
627!
628!-- Type for surface temperatures at vertical walls. Is not necessary for horizontal walls.
629    TYPE t_surf_vertical
630       REAL(wp), DIMENSION(:), ALLOCATABLE         ::  t  !<
631    END TYPE t_surf_vertical
632!
633!-- Type for wall temperatures at vertical walls. Is not necessary for horizontal walls.
634    TYPE t_wall_vertical
635       REAL(wp), DIMENSION(:,:), ALLOCATABLE       ::  t  !<
636    END TYPE t_wall_vertical
637
638    TYPE surf_type_usm
639       REAL(wp), DIMENSION(:),   ALLOCATABLE ::  var_usm_1d  !< 1D prognostic variable
640       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  var_usm_2d  !< 2D prognostic variable
641    END TYPE surf_type_usm
642
643    TYPE(surf_type_usm), POINTER  ::  m_liq_usm_h    !< liquid water reservoir (m), horizontal surface elements
644    TYPE(surf_type_usm), POINTER  ::  m_liq_usm_h_p  !< progn. liquid water reservoir (m), horizontal surface elements
645
646    TYPE(surf_type_usm), TARGET   ::  m_liq_usm_h_1  !<
647    TYPE(surf_type_usm), TARGET   ::  m_liq_usm_h_2  !<
648
649    TYPE(surf_type_usm), TARGET   ::  tm_liq_usm_h_m  !< liquid water reservoir tendency (m), horizontal surface elements
650!
651!-- Anthropogenic heat sources
652    INTEGER(iwp)                                   ::  naheatlayers = 1  !< number of layers of anthropogenic heat
653
654    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE        ::  aheat             !< daily average of anthropogenic heat (W/m2)
655    REAL(wp), DIMENSION(:,:), ALLOCATABLE          ::  aheatprof         !< diurnal profiles of anthropogenic heat
656                                                                         !< for particular layers
657
658!
659!-- Wall surface model
660!-- Wall surface model constants
661    INTEGER(iwp), PARAMETER                        ::  nzb_wall = 0  !< inner side of the wall model (to be switched)
662    INTEGER(iwp), PARAMETER                        ::  nzt_wall = 3  !< outer side of the wall model (to be switched)
663    INTEGER(iwp), PARAMETER                        ::  nzw      = 4  !< number of wall layers (fixed for now)
664
665    INTEGER(iwp)                                   ::  soil_type     !<
666
667
668    REAL(wp), DIMENSION(nzb_wall:nzt_wall)         ::  zwn_default        = (/0.0242_wp, 0.0969_wp, 0.346_wp, 1.0_wp /)
669    REAL(wp), DIMENSION(nzb_wall:nzt_wall)         ::  zwn_default_green  = (/0.25_wp,   0.5_wp,    0.75_wp,  1.0_wp /)
670                                                                          !< normalized soil, wall and roof, window and
671                                                                          !< green layer depths (m/m)
672    REAL(wp), DIMENSION(nzb_wall:nzt_wall)         ::  zwn_default_window = (/0.25_wp,   0.5_wp,    0.75_wp,  1.0_wp /)
673
674
675    REAL(wp)  ::  m_total                  = 0.0_wp    !< weighted total water content of the soil (m3/m3)
676    REAL(wp)  ::  roof_inner_temperature   = 295.0_wp  !< temperature of the inner roof
677                                                       !< surface (~22 degrees C) (K)
678    REAL(wp)  ::  soil_inner_temperature   = 288.0_wp  !< temperature of the deep soil
679                                                       !< (~15 degrees C) (K)
680    REAL(wp)  ::  wall_inner_temperature   = 295.0_wp  !< temperature of the inner wall
681                                                       !< surface (~22 degrees C) (K)
682    REAL(wp)  ::  window_inner_temperature = 295.0_wp  !< temperature of the inner window
683                                                       !< surface (~22 degrees C) (K)
684
685!
686!-- Surface and material model variables for walls, ground, roofs
687    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  zwn                 !< normalized wall layer depths (m)
688    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  zwn_green           !< normalized green layer depths (m)
689    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  zwn_window          !< normalized window layer depths (m)
690
691    REAL(wp), DIMENSION(:), POINTER                ::  t_surf_green_h      !<
692    REAL(wp), DIMENSION(:), POINTER                ::  t_surf_green_h_p    !<
693    REAL(wp), DIMENSION(:), POINTER                ::  t_surf_wall_h       !<
694    REAL(wp), DIMENSION(:), POINTER                ::  t_surf_wall_h_p     !<
695    REAL(wp), DIMENSION(:), POINTER                ::  t_surf_window_h     !<
696    REAL(wp), DIMENSION(:), POINTER                ::  t_surf_window_h_p   !<
697
698    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_green_h_1    !<
699    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_green_h_2    !<
700    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_wall_h_1     !<
701    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_wall_h_2     !<
702    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_window_h_1   !<
703    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_window_h_2   !<
704
705    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_green_v      !<
706    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_green_v_p    !<
707    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_wall_v       !<
708    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_wall_v_p     !<
709    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_window_v     !<
710    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_window_v_p   !<
711
712    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_green_v_1    !<
713    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_green_v_2    !<
714    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_wall_v_1     !<
715    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_wall_v_2     !<
716    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_window_v_1   !<
717    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_window_v_2   !<
718
719!
720!-- Energy balance variables
721!-- Parameters of the land, roof and wall surfaces
722    REAL(wp), DIMENSION(:,:), POINTER                ::  fc_h          !<
723    REAL(wp), DIMENSION(:,:), POINTER                ::  rootfr_h      !<
724    REAL(wp), DIMENSION(:,:), POINTER                ::  swc_h         !<
725    REAL(wp), DIMENSION(:,:), POINTER                ::  swc_h_p       !<
726    REAL(wp), DIMENSION(:,:), POINTER                ::  swc_res_h     !<
727    REAL(wp), DIMENSION(:,:), POINTER                ::  swc_sat_h     !<
728    REAL(wp), DIMENSION(:,:), POINTER                ::  t_green_h     !<
729    REAL(wp), DIMENSION(:,:), POINTER                ::  t_green_h_p   !<
730    REAL(wp), DIMENSION(:,:), POINTER                ::  t_wall_h      !<
731    REAL(wp), DIMENSION(:,:), POINTER                ::  t_wall_h_p    !<
732    REAL(wp), DIMENSION(:,:), POINTER                ::  wilt_h        !<
733    REAL(wp), DIMENSION(:,:), POINTER                ::  t_window_h    !<
734    REAL(wp), DIMENSION(:,:), POINTER                ::  t_window_h_p  !<
735
736
737    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  fc_h_1        !<
738    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  rootfr_h_1    !<
739    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  swc_h_1       !<
740    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  swc_h_2       !<
741    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  swc_res_h_1   !<
742    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  swc_sat_h_1   !<
743    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_green_h_1   !<
744    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_green_h_2   !<
745    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_wall_h_1    !<
746    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_wall_h_2    !<
747    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  wilt_h_1      !<
748    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_window_h_1  !<
749    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_window_h_2  !<
750
751
752    TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_green_v     !<
753    TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_green_v_p   !<
754    TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_wall_v      !<
755    TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_wall_v_p    !<
756    TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_window_v    !<
757    TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_window_v_p  !<
758
759
760    TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_green_v_1   !<
761    TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_green_v_2   !<
762    TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_wall_v_1    !<
763    TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_wall_v_2    !<
764    TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_window_v_1  !<
765    TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_window_v_2  !<
766
767!
768!-- Surface and material parameter classes (surface_type)
769!-- Albedo, emissivity, lambda_surf, roughness, thickness, volumetric heat capacity, thermal conductivity
770    CHARACTER(12), DIMENSION(:), ALLOCATABLE  ::  surface_type_names    !< names of wall types (used only for reports)
771
772    INTEGER(iwp)                              ::  n_surface_types       !< number of the wall type categories
773
774    INTEGER(iwp), PARAMETER                   ::  ialbedo  = 1          !< albedo of the surface
775    INTEGER(iwp), PARAMETER                   ::  icsurf   = 6          !< Surface skin layer heat capacity (J m-2 K-1 )
776    INTEGER(iwp), PARAMETER                   ::  iemiss   = 2          !< emissivity of the surface
777    INTEGER(iwp), PARAMETER                   ::  ilambdah = 9          !< thermal conductivity lambda H
778                                                                        !< of the wall (W m-1 K-1 )
779    INTEGER(iwp), PARAMETER                   ::  ilambdas = 3          !< heat conductivity lambda S between surface
780                                                                        !< and material ( W m-2 K-1 )
781    INTEGER(iwp), PARAMETER                   ::  irhoC    = 8          !< volumetric heat capacity rho*C of
782                                                                        !< the material ( J m-3 K-1 )
783    INTEGER(iwp), PARAMETER                   ::  irough   = 4          !< roughness length z0 for movements
784    INTEGER(iwp), PARAMETER                   ::  iroughh  = 5          !< roughness length z0h for scalars
785                                                                        !< (heat, humidity,...)
786    INTEGER(iwp), PARAMETER                   ::  ithick   = 7          !< thickness of the surface (wall, roof, land) (m)
787    INTEGER(iwp), PARAMETER                   ::  n_surface_params = 9  !< number of parameters for each type of the wall
788
789
790    INTEGER(iwp), DIMENSION(:), ALLOCATABLE   ::  surface_type_codes    !< codes of wall types
791
792
793    REAL(wp), DIMENSION(:,:), ALLOCATABLE     ::  surface_params        !< parameters of wall types
794
795!
796!-- Interfaces of subroutines accessed from outside of this module
797    INTERFACE usm_3d_data_averaging
798       MODULE PROCEDURE usm_3d_data_averaging
799    END INTERFACE usm_3d_data_averaging
800
801    INTERFACE usm_boundary_condition
802       MODULE PROCEDURE usm_boundary_condition
803    END INTERFACE usm_boundary_condition
804
805    INTERFACE usm_check_data_output
806       MODULE PROCEDURE usm_check_data_output
807    END INTERFACE usm_check_data_output
808
809    INTERFACE usm_check_parameters
810       MODULE PROCEDURE usm_check_parameters
811    END INTERFACE usm_check_parameters
812
813    INTERFACE usm_data_output_3d
814       MODULE PROCEDURE usm_data_output_3d
815    END INTERFACE usm_data_output_3d
816
817    INTERFACE usm_define_netcdf_grid
818       MODULE PROCEDURE usm_define_netcdf_grid
819    END INTERFACE usm_define_netcdf_grid
820
821    INTERFACE usm_init
822       MODULE PROCEDURE usm_init
823    END INTERFACE usm_init
824
825    INTERFACE usm_init_arrays
826       MODULE PROCEDURE usm_init_arrays
827    END INTERFACE usm_init_arrays
828
829    INTERFACE usm_material_heat_model
830       MODULE PROCEDURE usm_material_heat_model
831    END INTERFACE usm_material_heat_model
832
833    INTERFACE usm_green_heat_model
834       MODULE PROCEDURE usm_green_heat_model
835    END INTERFACE usm_green_heat_model
836
837    INTERFACE usm_parin
838       MODULE PROCEDURE usm_parin
839    END INTERFACE usm_parin
840
841    INTERFACE usm_rrd_local
842       MODULE PROCEDURE usm_rrd_local
843    END INTERFACE usm_rrd_local
844
845    INTERFACE usm_surface_energy_balance
846       MODULE PROCEDURE usm_surface_energy_balance
847    END INTERFACE usm_surface_energy_balance
848
849    INTERFACE usm_swap_timelevel
850       MODULE PROCEDURE usm_swap_timelevel
851    END INTERFACE usm_swap_timelevel
852
853    INTERFACE usm_wrd_local
854       MODULE PROCEDURE usm_wrd_local
855    END INTERFACE usm_wrd_local
856
857
858    SAVE
859
860    PRIVATE
861
862!
863!-- Public functions
864    PUBLIC usm_boundary_condition,                                                                 &
865           usm_check_data_output,                                                                  &
866           usm_check_parameters,                                                                   &
867           usm_data_output_3d,                                                                     &
868           usm_define_netcdf_grid,                                                                 &
869           usm_init,                                                                               &
870           usm_init_arrays,                                                                        &
871           usm_material_heat_model,                                                                &
872           usm_parin,                                                                              &
873           usm_rrd_local,                                                                          &
874           usm_surface_energy_balance,                                                             &
875           usm_swap_timelevel,                                                                     &
876           usm_wrd_local,                                                                          &
877           usm_3d_data_averaging
878
879!
880!-- Public parameters, constants and initial values
881    PUBLIC building_type,                                                                          &
882           building_pars,                                                                          &
883           nzb_wall,                                                                               &
884           nzt_wall,                                                                               &
885           t_wall_h,                                                                               &
886           t_wall_v,                                                                               &
887           t_window_h,                                                                             &
888           t_window_v,                                                                             &
889           usm_anthropogenic_heat,                                                                 &
890           usm_green_heat_model,                                                                   &
891           usm_material_model,                                                                     &
892           usm_wall_mod
893
894
895
896
897
898
899 CONTAINS
900
901!--------------------------------------------------------------------------------------------------!
902! Description:
903! ------------
904!> This subroutine creates the necessary indices of the urban surfaces and plant canopy and it
905!> allocates the needed arrays for USM
906!--------------------------------------------------------------------------------------------------!
907 SUBROUTINE usm_init_arrays
908
909    IMPLICIT NONE
910
911    INTEGER(iwp) ::  l  !<
912
913    IF ( debug_output )  CALL debug_message( 'usm_init_arrays', 'start' )
914
915!
916!-- Allocate radiation arrays which are part of the new data type.
917!-- For horizontal surfaces.
918    ALLOCATE ( surf_usm_h%surfhf(1:surf_usm_h%ns)    )
919    ALLOCATE ( surf_usm_h%rad_net_l(1:surf_usm_h%ns) )
920!
921!-- For vertical surfaces
922    DO  l = 0, 3
923       ALLOCATE ( surf_usm_v(l)%surfhf(1:surf_usm_v(l)%ns)    )
924       ALLOCATE ( surf_usm_v(l)%rad_net_l(1:surf_usm_v(l)%ns) )
925    ENDDO
926
927!
928!-- Wall surface model
929!-- Allocate arrays for wall surface model and define pointers
930!-- Allocate array of wall types and wall parameters
931    ALLOCATE ( surf_usm_h%surface_types(1:surf_usm_h%ns)      )
932    ALLOCATE ( surf_usm_h%building_type(1:surf_usm_h%ns)      )
933    ALLOCATE ( surf_usm_h%building_type_name(1:surf_usm_h%ns) )
934    surf_usm_h%building_type      = 0
935    surf_usm_h%building_type_name = 'none'
936    DO  l = 0, 3
937       ALLOCATE ( surf_usm_v(l)%surface_types(1:surf_usm_v(l)%ns)      )
938       ALLOCATE ( surf_usm_v(l)%building_type(1:surf_usm_v(l)%ns)      )
939       ALLOCATE ( surf_usm_v(l)%building_type_name(1:surf_usm_v(l)%ns) )
940       surf_usm_v(l)%building_type      = 0
941       surf_usm_v(l)%building_type_name = 'none'
942    ENDDO
943!
944!-- Allocate albedo_type and albedo. Each surface element has 3 values, 0: wall fraction,
945!-- 1: green fraction, 2: window fraction.
946    ALLOCATE ( surf_usm_h%albedo_type(1:surf_usm_h%ns,0:2) )
947    ALLOCATE ( surf_usm_h%albedo(1:surf_usm_h%ns,0:2)      )
948    surf_usm_h%albedo_type = albedo_type
949    DO  l = 0, 3
950       ALLOCATE ( surf_usm_v(l)%albedo_type(1:surf_usm_v(l)%ns,0:2) )
951       ALLOCATE ( surf_usm_v(l)%albedo(1:surf_usm_v(l)%ns,0:2)      )
952       surf_usm_v(l)%albedo_type = albedo_type
953    ENDDO
954
955!
956!-- Allocate indoor target temperature for summer and winter
957    ALLOCATE ( surf_usm_h%target_temp_summer(1:surf_usm_h%ns) )
958    ALLOCATE ( surf_usm_h%target_temp_winter(1:surf_usm_h%ns) )
959    DO  l = 0, 3
960       ALLOCATE ( surf_usm_v(l)%target_temp_summer(1:surf_usm_v(l)%ns) )
961       ALLOCATE ( surf_usm_v(l)%target_temp_winter(1:surf_usm_v(l)%ns) )
962    ENDDO
963!
964!-- In case the indoor model is applied, allocate memory for waste heat and indoor temperature.
965    IF ( indoor_model )  THEN
966       ALLOCATE ( surf_usm_h%waste_heat(1:surf_usm_h%ns) )
967       surf_usm_h%waste_heat = 0.0_wp
968       DO  l = 0, 3
969          ALLOCATE ( surf_usm_v(l)%waste_heat(1:surf_usm_v(l)%ns) )
970          surf_usm_v(l)%waste_heat = 0.0_wp
971       ENDDO
972    ENDIF
973!
974!-- Allocate flag indicating ground floor level surface elements
975    ALLOCATE ( surf_usm_h%ground_level(1:surf_usm_h%ns) )
976    DO  l = 0, 3
977       ALLOCATE ( surf_usm_v(l)%ground_level(1:surf_usm_v(l)%ns) )
978    ENDDO
979!
980!--  Allocate arrays for relative surface fraction.
981!--  0 - wall fraction, 1 - green fraction, 2 - window fraction
982     ALLOCATE ( surf_usm_h%frac(1:surf_usm_h%ns,0:2) )
983     surf_usm_h%frac = 0.0_wp
984     DO  l = 0, 3
985        ALLOCATE ( surf_usm_v(l)%frac(1:surf_usm_v(l)%ns,0:2) )
986        surf_usm_v(l)%frac = 0.0_wp
987     ENDDO
988
989!
990!-- Wall and roof surface parameters. First for horizontal surfaces
991    ALLOCATE ( surf_usm_h%isroof_surf(1:surf_usm_h%ns)        )
992    ALLOCATE ( surf_usm_h%lambda_surf(1:surf_usm_h%ns)        )
993    ALLOCATE ( surf_usm_h%lambda_surf_window(1:surf_usm_h%ns) )
994    ALLOCATE ( surf_usm_h%lambda_surf_green(1:surf_usm_h%ns)  )
995    ALLOCATE ( surf_usm_h%c_surface(1:surf_usm_h%ns)          )
996    ALLOCATE ( surf_usm_h%c_surface_window(1:surf_usm_h%ns)   )
997    ALLOCATE ( surf_usm_h%c_surface_green(1:surf_usm_h%ns)    )
998    ALLOCATE ( surf_usm_h%transmissivity(1:surf_usm_h%ns)     )
999    ALLOCATE ( surf_usm_h%lai(1:surf_usm_h%ns)                )
1000    ALLOCATE ( surf_usm_h%emissivity(1:surf_usm_h%ns,0:2)     )
1001    ALLOCATE ( surf_usm_h%r_a(1:surf_usm_h%ns)                )
1002    ALLOCATE ( surf_usm_h%r_a_green(1:surf_usm_h%ns)          )
1003    ALLOCATE ( surf_usm_h%r_a_window(1:surf_usm_h%ns)         )
1004    ALLOCATE ( surf_usm_h%green_type_roof(1:surf_usm_h%ns)    )
1005    ALLOCATE ( surf_usm_h%r_s(1:surf_usm_h%ns)                )
1006
1007!
1008!-- For vertical surfaces.
1009    DO  l = 0, 3
1010       ALLOCATE ( surf_usm_v(l)%lambda_surf(1:surf_usm_v(l)%ns)        )
1011       ALLOCATE ( surf_usm_v(l)%c_surface(1:surf_usm_v(l)%ns)          )
1012       ALLOCATE ( surf_usm_v(l)%lambda_surf_window(1:surf_usm_v(l)%ns) )
1013       ALLOCATE ( surf_usm_v(l)%c_surface_window(1:surf_usm_v(l)%ns)   )
1014       ALLOCATE ( surf_usm_v(l)%lambda_surf_green(1:surf_usm_v(l)%ns)  )
1015       ALLOCATE ( surf_usm_v(l)%c_surface_green(1:surf_usm_v(l)%ns)    )
1016       ALLOCATE ( surf_usm_v(l)%transmissivity(1:surf_usm_v(l)%ns)     )
1017       ALLOCATE ( surf_usm_v(l)%lai(1:surf_usm_v(l)%ns)                )
1018       ALLOCATE ( surf_usm_v(l)%emissivity(1:surf_usm_v(l)%ns,0:2)     )
1019       ALLOCATE ( surf_usm_v(l)%r_a(1:surf_usm_v(l)%ns)                )
1020       ALLOCATE ( surf_usm_v(l)%r_a_green(1:surf_usm_v(l)%ns)          )
1021       ALLOCATE ( surf_usm_v(l)%r_a_window(1:surf_usm_v(l)%ns)         )
1022       ALLOCATE ( surf_usm_v(l)%r_s(1:surf_usm_v(l)%ns)                )
1023    ENDDO
1024
1025!
1026!-- Allocate wall and roof material parameters. First for horizontal surfaces
1027    ALLOCATE ( surf_usm_h%thickness_wall(1:surf_usm_h%ns)                    )
1028    ALLOCATE ( surf_usm_h%thickness_window(1:surf_usm_h%ns)                  )
1029    ALLOCATE ( surf_usm_h%thickness_green(1:surf_usm_h%ns)                   )
1030    ALLOCATE ( surf_usm_h%lambda_h(nzb_wall:nzt_wall,1:surf_usm_h%ns)        )
1031    ALLOCATE ( surf_usm_h%rho_c_wall(nzb_wall:nzt_wall,1:surf_usm_h%ns)      )
1032    ALLOCATE ( surf_usm_h%lambda_h_window(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
1033    ALLOCATE ( surf_usm_h%rho_c_window(nzb_wall:nzt_wall,1:surf_usm_h%ns)    )
1034    ALLOCATE ( surf_usm_h%lambda_h_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)  )
1035    ALLOCATE ( surf_usm_h%rho_c_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)     )
1036
1037    ALLOCATE ( surf_usm_h%rho_c_total_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)    )
1038    ALLOCATE ( surf_usm_h%n_vg_green(1:surf_usm_h%ns)                             )
1039    ALLOCATE ( surf_usm_h%alpha_vg_green(1:surf_usm_h%ns)                         )
1040    ALLOCATE ( surf_usm_h%l_vg_green(1:surf_usm_h%ns)                             )
1041    ALLOCATE ( surf_usm_h%gamma_w_green_sat(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)  )
1042    ALLOCATE ( surf_usm_h%lambda_w_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)       )
1043    ALLOCATE ( surf_usm_h%gamma_w_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)        )
1044    ALLOCATE ( surf_usm_h%tswc_h_m(nzb_wall:nzt_wall,1:surf_usm_h%ns)             )
1045
1046!
1047!-- For vertical surfaces.
1048    DO  l = 0, 3
1049       ALLOCATE ( surf_usm_v(l)%thickness_wall(1:surf_usm_v(l)%ns)                    )
1050       ALLOCATE ( surf_usm_v(l)%thickness_window(1:surf_usm_v(l)%ns)                  )
1051       ALLOCATE ( surf_usm_v(l)%thickness_green(1:surf_usm_v(l)%ns)                   )
1052       ALLOCATE ( surf_usm_v(l)%lambda_h(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)        )
1053       ALLOCATE ( surf_usm_v(l)%rho_c_wall(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)      )
1054       ALLOCATE ( surf_usm_v(l)%lambda_h_window(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
1055       ALLOCATE ( surf_usm_v(l)%rho_c_window(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)    )
1056       ALLOCATE ( surf_usm_v(l)%lambda_h_green(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)  )
1057       ALLOCATE ( surf_usm_v(l)%rho_c_green(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)     )
1058    ENDDO
1059
1060!
1061!-- Allocate green wall and roof vegetation and soil parameters. First horizontal surfaces
1062    ALLOCATE ( surf_usm_h%g_d(1:surf_usm_h%ns)              )
1063    ALLOCATE ( surf_usm_h%c_liq(1:surf_usm_h%ns)            )
1064    ALLOCATE ( surf_usm_h%qsws_liq(1:surf_usm_h%ns)         )
1065    ALLOCATE ( surf_usm_h%qsws_veg(1:surf_usm_h%ns)         )
1066    ALLOCATE ( surf_usm_h%r_canopy(1:surf_usm_h%ns)         )
1067    ALLOCATE ( surf_usm_h%r_canopy_min(1:surf_usm_h%ns)     )
1068    ALLOCATE ( surf_usm_h%pt_10cm(1:surf_usm_h%ns)          )
1069
1070!
1071!-- For vertical surfaces.
1072    DO  l = 0, 3
1073      ALLOCATE ( surf_usm_v(l)%g_d(1:surf_usm_v(l)%ns)              )
1074      ALLOCATE ( surf_usm_v(l)%c_liq(1:surf_usm_v(l)%ns)            )
1075      ALLOCATE ( surf_usm_v(l)%qsws_liq(1:surf_usm_v(l)%ns)         )
1076      ALLOCATE ( surf_usm_v(l)%qsws_veg(1:surf_usm_v(l)%ns)         )
1077      ALLOCATE ( surf_usm_v(l)%r_canopy(1:surf_usm_v(l)%ns)         )
1078      ALLOCATE ( surf_usm_v(l)%r_canopy_min(1:surf_usm_v(l)%ns)     )
1079      ALLOCATE ( surf_usm_v(l)%pt_10cm(1:surf_usm_v(l)%ns)          )
1080    ENDDO
1081
1082!
1083!-- Allocate wall and roof layers sizes. For horizontal surfaces.
1084    ALLOCATE ( zwn(nzb_wall:nzt_wall)                                        )
1085    ALLOCATE ( surf_usm_h%dz_wall(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)       )
1086    ALLOCATE ( zwn_window(nzb_wall:nzt_wall)                                 )
1087    ALLOCATE ( surf_usm_h%dz_window(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)     )
1088    ALLOCATE ( zwn_green(nzb_wall:nzt_wall)                                  )
1089    ALLOCATE ( surf_usm_h%dz_green(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)      )
1090    ALLOCATE ( surf_usm_h%ddz_wall(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)      )
1091    ALLOCATE ( surf_usm_h%dz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)    )
1092    ALLOCATE ( surf_usm_h%ddz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)   )
1093    ALLOCATE ( surf_usm_h%zw(nzb_wall:nzt_wall,1:surf_usm_h%ns)              )
1094    ALLOCATE ( surf_usm_h%ddz_window(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)    )
1095    ALLOCATE ( surf_usm_h%dz_window_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)  )
1096    ALLOCATE ( surf_usm_h%ddz_window_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
1097    ALLOCATE ( surf_usm_h%zw_window(nzb_wall:nzt_wall,1:surf_usm_h%ns)       )
1098    ALLOCATE ( surf_usm_h%ddz_green(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)     )
1099    ALLOCATE ( surf_usm_h%dz_green_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)   )
1100    ALLOCATE ( surf_usm_h%ddz_green_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)  )
1101    ALLOCATE ( surf_usm_h%zw_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)        )
1102
1103!
1104!-- For vertical surfaces.
1105    DO  l = 0, 3
1106       ALLOCATE ( surf_usm_v(l)%dz_wall(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)       )
1107       ALLOCATE ( surf_usm_v(l)%dz_window(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)     )
1108       ALLOCATE ( surf_usm_v(l)%dz_green(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)      )
1109       ALLOCATE ( surf_usm_v(l)%ddz_wall(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)      )
1110       ALLOCATE ( surf_usm_v(l)%dz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)    )
1111       ALLOCATE ( surf_usm_v(l)%ddz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)   )
1112       ALLOCATE ( surf_usm_v(l)%zw(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)              )
1113       ALLOCATE ( surf_usm_v(l)%ddz_window(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)    )
1114       ALLOCATE ( surf_usm_v(l)%dz_window_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)  )
1115       ALLOCATE ( surf_usm_v(l)%ddz_window_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
1116       ALLOCATE ( surf_usm_v(l)%zw_window(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)       )
1117       ALLOCATE ( surf_usm_v(l)%ddz_green(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)     )
1118       ALLOCATE ( surf_usm_v(l)%dz_green_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)   )
1119       ALLOCATE ( surf_usm_v(l)%ddz_green_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)  )
1120       ALLOCATE ( surf_usm_v(l)%zw_green(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)        )
1121    ENDDO
1122
1123!
1124!-- Allocate wall and roof temperature arrays, for horizontal walls.
1125!-- Allocate if required. Note, in case of restarts, some of these arrays might be already allocated.
1126    IF ( .NOT. ALLOCATED( t_surf_wall_h_1 ) )                                                      &
1127       ALLOCATE ( t_surf_wall_h_1(1:surf_usm_h%ns) )
1128    IF ( .NOT. ALLOCATED( t_surf_wall_h_2 ) )                                                      &
1129       ALLOCATE ( t_surf_wall_h_2(1:surf_usm_h%ns) )
1130    IF ( .NOT. ALLOCATED( t_wall_h_1 ) )                                                           &
1131       ALLOCATE ( t_wall_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1132    IF ( .NOT. ALLOCATED( t_wall_h_2 ) )                                                           &
1133       ALLOCATE ( t_wall_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1134    IF ( .NOT. ALLOCATED( t_surf_window_h_1 ) )                                                    &
1135       ALLOCATE ( t_surf_window_h_1(1:surf_usm_h%ns) )
1136    IF ( .NOT. ALLOCATED( t_surf_window_h_2 ) )                                                    &
1137       ALLOCATE ( t_surf_window_h_2(1:surf_usm_h%ns) )
1138    IF ( .NOT. ALLOCATED( t_window_h_1 ) )                                                         &
1139       ALLOCATE ( t_window_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1140    IF ( .NOT. ALLOCATED( t_window_h_2 ) )                                                         &
1141       ALLOCATE ( t_window_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1142    IF ( .NOT. ALLOCATED( t_surf_green_h_1 ) )                                                     &
1143       ALLOCATE ( t_surf_green_h_1(1:surf_usm_h%ns) )
1144    IF ( .NOT. ALLOCATED( t_surf_green_h_2 ) )                                                     &
1145       ALLOCATE ( t_surf_green_h_2(1:surf_usm_h%ns) )
1146    IF ( .NOT. ALLOCATED( t_green_h_1 ) )                                                          &
1147       ALLOCATE ( t_green_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1148    IF ( .NOT. ALLOCATED( t_green_h_2 ) )                                                          &
1149       ALLOCATE ( t_green_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1150    IF ( .NOT. ALLOCATED( swc_h_1 ) )                                                              &
1151       ALLOCATE ( swc_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1152    IF ( .NOT. ALLOCATED( swc_sat_h_1 ) )                                                          &
1153       ALLOCATE ( swc_sat_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1154    IF ( .NOT. ALLOCATED( swc_res_h_1 ) )                                                          &
1155       ALLOCATE ( swc_res_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1156    IF ( .NOT. ALLOCATED( swc_h_2 ) )                                                              &
1157       ALLOCATE ( swc_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1158    IF ( .NOT. ALLOCATED( rootfr_h_1 ) )                                                           &
1159       ALLOCATE ( rootfr_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1160    IF ( .NOT. ALLOCATED( wilt_h_1 ) )                                                             &
1161       ALLOCATE ( wilt_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1162    IF ( .NOT. ALLOCATED( fc_h_1 ) )                                                               &
1163       ALLOCATE ( fc_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1164
1165    IF ( .NOT. ALLOCATED( m_liq_usm_h_1%var_usm_1d ) )                                             &
1166       ALLOCATE ( m_liq_usm_h_1%var_usm_1d(1:surf_usm_h%ns) )
1167    IF ( .NOT. ALLOCATED( m_liq_usm_h_2%var_usm_1d ) )                                             &
1168       ALLOCATE ( m_liq_usm_h_2%var_usm_1d(1:surf_usm_h%ns) )
1169
1170!
1171!-- Initial assignment of the pointers
1172    t_wall_h    => t_wall_h_1;   t_wall_h_p   => t_wall_h_2
1173    t_window_h  => t_window_h_1; t_window_h_p => t_window_h_2
1174    t_green_h   => t_green_h_1;  t_green_h_p  => t_green_h_2
1175    t_surf_wall_h   => t_surf_wall_h_1;   t_surf_wall_h_p   => t_surf_wall_h_2
1176    t_surf_window_h => t_surf_window_h_1; t_surf_window_h_p => t_surf_window_h_2
1177    t_surf_green_h  => t_surf_green_h_1;  t_surf_green_h_p  => t_surf_green_h_2
1178    m_liq_usm_h     => m_liq_usm_h_1;     m_liq_usm_h_p     => m_liq_usm_h_2
1179    swc_h     => swc_h_1; swc_h_p => swc_h_2
1180    swc_sat_h => swc_sat_h_1
1181    swc_res_h => swc_res_h_1
1182    rootfr_h  => rootfr_h_1
1183    wilt_h    => wilt_h_1
1184    fc_h      => fc_h_1
1185
1186!
1187!-- Allocate wall and roof temperature arrays, for vertical walls if required.
1188!-- Allocate if required. Note, in case of restarts, some of these arrays might be already allocated.
1189    DO  l = 0, 3
1190       IF ( .NOT. ALLOCATED( t_surf_wall_v_1(l)%t ) )                                              &
1191          ALLOCATE ( t_surf_wall_v_1(l)%t(1:surf_usm_v(l)%ns) )
1192       IF ( .NOT. ALLOCATED( t_surf_wall_v_2(l)%t ) )                                              &
1193          ALLOCATE ( t_surf_wall_v_2(l)%t(1:surf_usm_v(l)%ns) )
1194       IF ( .NOT. ALLOCATED( t_wall_v_1(l)%t ) )                                                   &
1195          ALLOCATE ( t_wall_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
1196       IF ( .NOT. ALLOCATED( t_wall_v_2(l)%t ) )                                                   &
1197          ALLOCATE ( t_wall_v_2(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
1198       IF ( .NOT. ALLOCATED( t_surf_window_v_1(l)%t ) )                                            &
1199          ALLOCATE ( t_surf_window_v_1(l)%t(1:surf_usm_v(l)%ns) )
1200       IF ( .NOT. ALLOCATED( t_surf_window_v_2(l)%t ) )                                            &
1201          ALLOCATE ( t_surf_window_v_2(l)%t(1:surf_usm_v(l)%ns) )
1202       IF ( .NOT. ALLOCATED( t_window_v_1(l)%t ) )                                                 &
1203          ALLOCATE ( t_window_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
1204       IF ( .NOT. ALLOCATED( t_window_v_2(l)%t ) )                                                 &
1205          ALLOCATE ( t_window_v_2(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
1206       IF ( .NOT. ALLOCATED( t_surf_green_v_1(l)%t ) )                                             &
1207          ALLOCATE ( t_surf_green_v_1(l)%t(1:surf_usm_v(l)%ns) )
1208       IF ( .NOT. ALLOCATED( t_surf_green_v_2(l)%t ) )                                             &
1209          ALLOCATE ( t_surf_green_v_2(l)%t(1:surf_usm_v(l)%ns) )
1210       IF ( .NOT. ALLOCATED( t_green_v_1(l)%t ) )                                                  &
1211          ALLOCATE ( t_green_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
1212       IF ( .NOT. ALLOCATED( t_green_v_2(l)%t ) )                                                  &
1213          ALLOCATE ( t_green_v_2(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
1214    ENDDO
1215!
1216!-- Initial assignment of the pointers
1217    t_wall_v        => t_wall_v_1;        t_wall_v_p        => t_wall_v_2
1218    t_surf_wall_v   => t_surf_wall_v_1;   t_surf_wall_v_p   => t_surf_wall_v_2
1219    t_window_v      => t_window_v_1;      t_window_v_p      => t_window_v_2
1220    t_green_v       => t_green_v_1;       t_green_v_p       => t_green_v_2
1221    t_surf_window_v => t_surf_window_v_1; t_surf_window_v_p => t_surf_window_v_2
1222    t_surf_green_v  => t_surf_green_v_1;  t_surf_green_v_p  => t_surf_green_v_2
1223
1224!
1225!-- Allocate intermediate timestep arrays. For horizontal surfaces.
1226    ALLOCATE ( surf_usm_h%tt_surface_wall_m(1:surf_usm_h%ns)               )
1227    ALLOCATE ( surf_usm_h%tt_wall_m(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)   )
1228    ALLOCATE ( surf_usm_h%tt_surface_window_m(1:surf_usm_h%ns)             )
1229    ALLOCATE ( surf_usm_h%tt_window_m(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1230    ALLOCATE ( surf_usm_h%tt_green_m(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)  )
1231    ALLOCATE ( surf_usm_h%tt_surface_green_m(1:surf_usm_h%ns)              )
1232
1233!
1234!-- Allocate intermediate timestep arrays
1235!-- Horizontal surfaces
1236    ALLOCATE ( tm_liq_usm_h_m%var_usm_1d(1:surf_usm_h%ns) )
1237    tm_liq_usm_h_m%var_usm_1d = 0.0_wp
1238!
1239!-- Set inital values for prognostic quantities
1240    IF ( ALLOCATED( surf_usm_h%tt_surface_wall_m )   )  surf_usm_h%tt_surface_wall_m   = 0.0_wp
1241    IF ( ALLOCATED( surf_usm_h%tt_wall_m )           )  surf_usm_h%tt_wall_m           = 0.0_wp
1242    IF ( ALLOCATED( surf_usm_h%tt_surface_window_m ) )  surf_usm_h%tt_surface_window_m = 0.0_wp
1243    IF ( ALLOCATED( surf_usm_h%tt_window_m    )      )  surf_usm_h%tt_window_m         = 0.0_wp
1244    IF ( ALLOCATED( surf_usm_h%tt_green_m    )       )  surf_usm_h%tt_green_m          = 0.0_wp
1245    IF ( ALLOCATED( surf_usm_h%tt_surface_green_m )  )  surf_usm_h%tt_surface_green_m  = 0.0_wp
1246!
1247!-- Now, for vertical surfaces
1248    DO  l = 0, 3
1249       ALLOCATE ( surf_usm_v(l)%tt_surface_wall_m(1:surf_usm_v(l)%ns) )
1250       ALLOCATE ( surf_usm_v(l)%tt_wall_m(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
1251       IF ( ALLOCATED( surf_usm_v(l)%tt_surface_wall_m ) )  surf_usm_v(l)%tt_surface_wall_m = 0.0_wp
1252       IF ( ALLOCATED( surf_usm_v(l)%tt_wall_m ) )  surf_usm_v(l)%tt_wall_m  = 0.0_wp
1253       ALLOCATE ( surf_usm_v(l)%tt_surface_window_m(1:surf_usm_v(l)%ns) )
1254       ALLOCATE ( surf_usm_v(l)%tt_window_m(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
1255       IF ( ALLOCATED( surf_usm_v(l)%tt_surface_window_m ) )  surf_usm_v(l)%tt_surface_window_m = 0.0_wp
1256       IF ( ALLOCATED( surf_usm_v(l)%tt_window_m ) )  surf_usm_v(l)%tt_window_m = 0.0_wp
1257       ALLOCATE ( surf_usm_v(l)%tt_surface_green_m(1:surf_usm_v(l)%ns) )
1258       IF ( ALLOCATED( surf_usm_v(l)%tt_surface_green_m ) )  surf_usm_v(l)%tt_surface_green_m = 0.0_wp
1259       ALLOCATE ( surf_usm_v(l)%tt_green_m(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
1260       IF ( ALLOCATED( surf_usm_v(l)%tt_green_m ) )  surf_usm_v(l)%tt_green_m = 0.0_wp
1261    ENDDO
1262!
1263!-- Allocate wall heat flux output arrays and set initial values. For horizontal surfaces
1264!    ALLOCATE ( surf_usm_h%wshf(1:surf_usm_h%ns)    )  !can be removed
1265    ALLOCATE ( surf_usm_h%ghf(1:surf_usm_h%ns) )
1266    ALLOCATE ( surf_usm_h%wshf_eb(1:surf_usm_h%ns) )
1267    ALLOCATE ( surf_usm_h%wghf_eb(1:surf_usm_h%ns) )
1268    ALLOCATE ( surf_usm_h%wghf_eb_window(1:surf_usm_h%ns) )
1269    ALLOCATE ( surf_usm_h%wghf_eb_green(1:surf_usm_h%ns) )
1270    ALLOCATE ( surf_usm_h%iwghf_eb(1:surf_usm_h%ns) )
1271    ALLOCATE ( surf_usm_h%iwghf_eb_window(1:surf_usm_h%ns) )
1272    IF ( ALLOCATED( surf_usm_h%ghf     ) )  surf_usm_h%ghf     = 0.0_wp
1273    IF ( ALLOCATED( surf_usm_h%wshf    ) )  surf_usm_h%wshf    = 0.0_wp
1274    IF ( ALLOCATED( surf_usm_h%wshf_eb ) )  surf_usm_h%wshf_eb = 0.0_wp
1275    IF ( ALLOCATED( surf_usm_h%wghf_eb ) )  surf_usm_h%wghf_eb = 0.0_wp
1276    IF ( ALLOCATED( surf_usm_h%wghf_eb_window ) )   surf_usm_h%wghf_eb_window  = 0.0_wp
1277    IF ( ALLOCATED( surf_usm_h%wghf_eb_green ) )    surf_usm_h%wghf_eb_green   = 0.0_wp
1278    IF ( ALLOCATED( surf_usm_h%iwghf_eb ) )         surf_usm_h%iwghf_eb        = 0.0_wp
1279    IF ( ALLOCATED( surf_usm_h%iwghf_eb_window ) )  surf_usm_h%iwghf_eb_window = 0.0_wp
1280!
1281!-- Now, for vertical surfaces
1282    DO  l = 0, 3
1283!       ALLOCATE ( surf_usm_v(l)%wshf(1:surf_usm_v(l)%ns)    )    ! can be removed
1284       ALLOCATE ( surf_usm_v(l)%ghf(1:surf_usm_v(l)%ns) )
1285       ALLOCATE ( surf_usm_v(l)%wshf_eb(1:surf_usm_v(l)%ns) )
1286       ALLOCATE ( surf_usm_v(l)%wghf_eb(1:surf_usm_v(l)%ns) )
1287       ALLOCATE ( surf_usm_v(l)%wghf_eb_window(1:surf_usm_v(l)%ns) )
1288       ALLOCATE ( surf_usm_v(l)%wghf_eb_green(1:surf_usm_v(l)%ns) )
1289       ALLOCATE ( surf_usm_v(l)%iwghf_eb(1:surf_usm_v(l)%ns) )
1290       ALLOCATE ( surf_usm_v(l)%iwghf_eb_window(1:surf_usm_v(l)%ns) )
1291       IF ( ALLOCATED( surf_usm_v(l)%ghf     ) )  surf_usm_v(l)%ghf     = 0.0_wp
1292       IF ( ALLOCATED( surf_usm_v(l)%wshf    ) )  surf_usm_v(l)%wshf    = 0.0_wp
1293       IF ( ALLOCATED( surf_usm_v(l)%wshf_eb ) )  surf_usm_v(l)%wshf_eb = 0.0_wp
1294       IF ( ALLOCATED( surf_usm_v(l)%wghf_eb ) )  surf_usm_v(l)%wghf_eb = 0.0_wp
1295       IF ( ALLOCATED( surf_usm_v(l)%wghf_eb_window ) )   surf_usm_v(l)%wghf_eb_window  = 0.0_wp
1296       IF ( ALLOCATED( surf_usm_v(l)%wghf_eb_green ) )    surf_usm_v(l)%wghf_eb_green   = 0.0_wp
1297       IF ( ALLOCATED( surf_usm_v(l)%iwghf_eb ) )         surf_usm_v(l)%iwghf_eb        = 0.0_wp
1298       IF ( ALLOCATED( surf_usm_v(l)%iwghf_eb_window ) )  surf_usm_v(l)%iwghf_eb_window = 0.0_wp
1299    ENDDO
1300!
1301!-- Initialize building-surface properties, which are also required by other modules, e.g. the
1302!-- indoor model.
1303    CALL usm_define_pars
1304
1305    IF ( debug_output )  CALL debug_message( 'usm_init_arrays', 'end' )
1306
1307 END SUBROUTINE usm_init_arrays
1308
1309
1310!--------------------------------------------------------------------------------------------------!
1311! Description:
1312! ------------
1313!> Sum up and time-average urban surface output quantities as well as allocate the array necessary
1314!> for storing the average.
1315!--------------------------------------------------------------------------------------------------!
1316 SUBROUTINE usm_3d_data_averaging( mode, variable )
1317
1318    IMPLICIT NONE
1319
1320    CHARACTER(LEN=*), INTENT(IN) ::  variable  !<
1321    CHARACTER(LEN=*), INTENT(IN) ::  mode      !<
1322
1323    INTEGER(iwp)                                       ::  i, j, k, l, m, ids, idsint, iwl, istat  !< runnin indices
1324    CHARACTER(LEN=varnamelength)                       ::  var                                     !< trimmed variable
1325    INTEGER(iwp), PARAMETER                            ::  nd = 5                                  !< number of directions
1326    CHARACTER(LEN=6), DIMENSION(0:nd-1), PARAMETER     ::  dirname = (/ '_roof ', '_south', '_north', '_west ', '_east ' /)
1327    INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER         ::  dirint = (/ iup_u, isouth_u, inorth_u, iwest_u, ieast_u /)
1328
1329
1330
1331
1332    IF ( variable(1:4) == 'usm_' )  THEN  ! Is such a check really required?
1333
1334!
1335!-- Find the real name of the variable
1336    ids = -1
1337    l = -1
1338    var = TRIM(variable)
1339    DO  i = 0, nd-1
1340       k = len( TRIM( var ) )
1341       j = len( TRIM( dirname(i) ) )
1342       IF ( TRIM( var(k-j+1:k) ) == TRIM( dirname(i) ) )  THEN
1343           ids = i
1344           idsint = dirint(ids)
1345           var = var(:k-j)
1346           EXIT
1347       ENDIF
1348    ENDDO
1349    l = idsint - 2  ! Horizontal direction index - terrible hack !
1350    IF ( l < 0 .OR. l > 3 )  THEN
1351       l = -1
1352    ENDIF
1353    IF ( ids == -1 )  THEN
1354        var = TRIM( variable )
1355    ENDIF
1356    IF ( var(1:11) == 'usm_t_wall_'  .AND.  len( TRIM( var ) ) >= 12 )  THEN
1357!
1358!--      Wall layers
1359        READ( var(12:12), '(I1)', iostat=istat ) iwl
1360        IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
1361            var = var(1:10)
1362        ELSE
1363!
1364!--         Wrong wall layer index
1365            RETURN
1366        ENDIF
1367    ENDIF
1368    IF ( var(1:13) == 'usm_t_window_'  .AND.  len( TRIM(var) ) >= 14 )  THEN
1369!
1370!--      Wall layers
1371        READ( var(14:14), '(I1)', iostat=istat ) iwl
1372        IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
1373            var = var(1:12)
1374        ELSE
1375!
1376!--         Wrong window layer index
1377            RETURN
1378        ENDIF
1379    ENDIF
1380    IF ( var(1:12) == 'usm_t_green_'  .AND.  len( TRIM( var ) ) >= 13 )  THEN
1381!
1382!--      Wall layers
1383        READ( var(13:13), '(I1)', iostat=istat ) iwl
1384        IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
1385            var = var(1:11)
1386        ELSE
1387!
1388!--         Wrong green layer index
1389            RETURN
1390        ENDIF
1391    ENDIF
1392    IF ( var(1:8) == 'usm_swc_'  .AND.  len( TRIM( var ) ) >= 9 )  THEN
1393!
1394!--      Swc layers
1395        READ( var(9:9), '(I1)', iostat=istat ) iwl
1396        IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
1397            var = var(1:7)
1398        ELSE
1399!
1400!--         Wrong swc layer index
1401            RETURN
1402        ENDIF
1403    ENDIF
1404
1405    IF ( mode == 'allocate' )  THEN
1406
1407       SELECT CASE ( TRIM( var ) )
1408
1409            CASE ( 'usm_wshf' )
1410!
1411!--             Array of sensible heat flux from surfaces
1412!--             Land surfaces
1413                IF ( l == -1 )  THEN
1414                   IF ( .NOT.  ALLOCATED( surf_usm_h%wshf_eb_av ) )  THEN
1415                      ALLOCATE ( surf_usm_h%wshf_eb_av(1:surf_usm_h%ns) )
1416                      surf_usm_h%wshf_eb_av = 0.0_wp
1417                   ENDIF
1418                ELSE
1419                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%wshf_eb_av ) )  THEN
1420                       ALLOCATE ( surf_usm_v(l)%wshf_eb_av(1:surf_usm_v(l)%ns) )
1421                       surf_usm_v(l)%wshf_eb_av = 0.0_wp
1422                   ENDIF
1423                ENDIF
1424
1425            CASE ( 'usm_qsws' )
1426!
1427!--             Array of latent heat flux from surfaces
1428!--             Land surfaces
1429                IF ( l == -1 .AND. .NOT.  ALLOCATED( surf_usm_h%qsws_av ) )  THEN
1430                    ALLOCATE ( surf_usm_h%qsws_av(1:surf_usm_h%ns) )
1431                    surf_usm_h%qsws_av = 0.0_wp
1432                ELSE
1433                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%qsws_av ) )  THEN
1434                       ALLOCATE ( surf_usm_v(l)%qsws_av(1:surf_usm_v(l)%ns) )
1435                       surf_usm_v(l)%qsws_av = 0.0_wp
1436                   ENDIF
1437                ENDIF
1438
1439            CASE ( 'usm_qsws_veg' )
1440!
1441!--             Array of latent heat flux from vegetation surfaces
1442!--             Land surfaces
1443                IF ( l == -1 .AND. .NOT.  ALLOCATED( surf_usm_h%qsws_veg_av ) )  THEN
1444                    ALLOCATE ( surf_usm_h%qsws_veg_av(1:surf_usm_h%ns) )
1445                    surf_usm_h%qsws_veg_av = 0.0_wp
1446                ELSE
1447                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%qsws_veg_av ) )  THEN
1448                       ALLOCATE ( surf_usm_v(l)%qsws_veg_av(1:surf_usm_v(l)%ns) )
1449                       surf_usm_v(l)%qsws_veg_av = 0.0_wp
1450                   ENDIF
1451                ENDIF
1452
1453            CASE ( 'usm_qsws_liq' )
1454!
1455!--             Array of latent heat flux from surfaces with liquid
1456!--             Land surfaces
1457                IF ( l == -1 .AND. .NOT.  ALLOCATED( surf_usm_h%qsws_liq_av ) )  THEN
1458                    ALLOCATE ( surf_usm_h%qsws_liq_av(1:surf_usm_h%ns) )
1459                    surf_usm_h%qsws_liq_av = 0.0_wp
1460                ELSE
1461                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%qsws_liq_av ) )  THEN
1462                       ALLOCATE ( surf_usm_v(l)%qsws_liq_av(1:surf_usm_v(l)%ns) )
1463                       surf_usm_v(l)%qsws_liq_av = 0.0_wp
1464                   ENDIF
1465                ENDIF
1466!
1467!--         Please note, the following output quantities belongs to the individual tile fractions -
1468!--         ground heat flux at wall-, window-, and green fraction. Aggregated ground-heat flux is
1469!--         treated accordingly in average_3d_data, sum_up_3d_data, etc..
1470            CASE ( 'usm_wghf' )
1471!
1472!--             Array of heat flux from ground (wall, roof, land)
1473                IF ( l == -1 )  THEN
1474                   IF ( .NOT.  ALLOCATED( surf_usm_h%wghf_eb_av ) )  THEN
1475                       ALLOCATE ( surf_usm_h%wghf_eb_av(1:surf_usm_h%ns) )
1476                       surf_usm_h%wghf_eb_av = 0.0_wp
1477                   ENDIF
1478                ELSE
1479                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%wghf_eb_av ) )  THEN
1480                       ALLOCATE ( surf_usm_v(l)%wghf_eb_av(1:surf_usm_v(l)%ns) )
1481                       surf_usm_v(l)%wghf_eb_av = 0.0_wp
1482                   ENDIF
1483                ENDIF
1484
1485            CASE ( 'usm_wghf_window' )
1486!
1487!--             Array of heat flux from window ground (wall, roof, land)
1488                IF ( l == -1 )  THEN
1489                   IF ( .NOT.  ALLOCATED( surf_usm_h%wghf_eb_window_av ) )  THEN
1490                       ALLOCATE ( surf_usm_h%wghf_eb_window_av(1:surf_usm_h%ns) )
1491                       surf_usm_h%wghf_eb_window_av = 0.0_wp
1492                   ENDIF
1493                ELSE
1494                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%wghf_eb_window_av ) )  THEN
1495                       ALLOCATE ( surf_usm_v(l)%wghf_eb_window_av(1:surf_usm_v(l)%ns) )
1496                       surf_usm_v(l)%wghf_eb_window_av = 0.0_wp
1497                   ENDIF
1498                ENDIF
1499
1500            CASE ( 'usm_wghf_green' )
1501!
1502!--             Array of heat flux from green ground (wall, roof, land)
1503                IF ( l == -1 )  THEN
1504                   IF ( .NOT.  ALLOCATED( surf_usm_h%wghf_eb_green_av ) )  THEN
1505                       ALLOCATE ( surf_usm_h%wghf_eb_green_av(1:surf_usm_h%ns) )
1506                       surf_usm_h%wghf_eb_green_av = 0.0_wp
1507                   ENDIF
1508                ELSE
1509                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%wghf_eb_green_av ) )  THEN
1510                       ALLOCATE ( surf_usm_v(l)%wghf_eb_green_av(1:surf_usm_v(l)%ns) )
1511                       surf_usm_v(l)%wghf_eb_green_av = 0.0_wp
1512                   ENDIF
1513                ENDIF
1514
1515            CASE ( 'usm_iwghf' )
1516!
1517!--             Array of heat flux from indoor ground (wall, roof, land)
1518                IF ( l == -1 )  THEN
1519                   IF ( .NOT.  ALLOCATED( surf_usm_h%iwghf_eb_av ) )  THEN
1520                       ALLOCATE ( surf_usm_h%iwghf_eb_av(1:surf_usm_h%ns) )
1521                       surf_usm_h%iwghf_eb_av = 0.0_wp
1522                   ENDIF
1523                ELSE
1524                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%iwghf_eb_av ) )  THEN
1525                       ALLOCATE ( surf_usm_v(l)%iwghf_eb_av(1:surf_usm_v(l)%ns) )
1526                       surf_usm_v(l)%iwghf_eb_av = 0.0_wp
1527                   ENDIF
1528                ENDIF
1529
1530            CASE ( 'usm_iwghf_window' )
1531!
1532!--             Array of heat flux from indoor window ground (wall, roof, land)
1533                IF ( l == -1 ) THEN
1534                   IF ( .NOT.  ALLOCATED( surf_usm_h%iwghf_eb_window_av ) )  THEN
1535                       ALLOCATE ( surf_usm_h%iwghf_eb_window_av(1:surf_usm_h%ns) )
1536                       surf_usm_h%iwghf_eb_window_av = 0.0_wp
1537                   ENDIF
1538                ELSE
1539                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%iwghf_eb_window_av ) )  THEN
1540                       ALLOCATE ( surf_usm_v(l)%iwghf_eb_window_av(1:surf_usm_v(l)%ns) )
1541                       surf_usm_v(l)%iwghf_eb_window_av = 0.0_wp
1542                   ENDIF
1543                ENDIF
1544
1545            CASE ( 'usm_t_surf_wall' )
1546!
1547!--             Surface temperature for surfaces
1548                IF ( l == -1 )  THEN
1549                   IF ( .NOT.  ALLOCATED( surf_usm_h%t_surf_wall_av ) )  THEN
1550                       ALLOCATE ( surf_usm_h%t_surf_wall_av(1:surf_usm_h%ns) )
1551                       surf_usm_h%t_surf_wall_av = 0.0_wp
1552                   ENDIF
1553                ELSE
1554                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%t_surf_wall_av ) )  THEN
1555                       ALLOCATE ( surf_usm_v(l)%t_surf_wall_av(1:surf_usm_v(l)%ns) )
1556                       surf_usm_v(l)%t_surf_wall_av = 0.0_wp
1557                   ENDIF
1558                ENDIF
1559
1560            CASE ( 'usm_t_surf_window' )
1561!
1562!--             Surface temperature for window surfaces
1563                IF ( l == -1 )  THEN
1564                   IF ( .NOT.  ALLOCATED( surf_usm_h%t_surf_window_av ) )  THEN
1565                       ALLOCATE ( surf_usm_h%t_surf_window_av(1:surf_usm_h%ns) )
1566                       surf_usm_h%t_surf_window_av = 0.0_wp
1567                   ENDIF
1568                ELSE
1569                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%t_surf_window_av ) )  THEN
1570                       ALLOCATE ( surf_usm_v(l)%t_surf_window_av(1:surf_usm_v(l)%ns) )
1571                       surf_usm_v(l)%t_surf_window_av = 0.0_wp
1572                   ENDIF
1573                ENDIF
1574
1575            CASE ( 'usm_t_surf_green' )
1576!
1577!--             Surface temperature for green surfaces
1578                IF ( l == -1 )  THEN
1579                   IF ( .NOT.  ALLOCATED( surf_usm_h%t_surf_green_av ) )  THEN
1580                       ALLOCATE ( surf_usm_h%t_surf_green_av(1:surf_usm_h%ns) )
1581                       surf_usm_h%t_surf_green_av = 0.0_wp
1582                   ENDIF
1583                ELSE
1584                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%t_surf_green_av ) )  THEN
1585                       ALLOCATE ( surf_usm_v(l)%t_surf_green_av(1:surf_usm_v(l)%ns) )
1586                       surf_usm_v(l)%t_surf_green_av = 0.0_wp
1587                   ENDIF
1588                ENDIF
1589
1590            CASE ( 'usm_theta_10cm' )
1591!
1592!--             Near surface (10cm) temperature for whole surfaces
1593                IF ( l == -1 )  THEN
1594                   IF ( .NOT.  ALLOCATED( surf_usm_h%pt_10cm_av ) )  THEN
1595                       ALLOCATE ( surf_usm_h%pt_10cm_av(1:surf_usm_h%ns) )
1596                       surf_usm_h%pt_10cm_av = 0.0_wp
1597                   ENDIF
1598                ELSE
1599                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%pt_10cm_av ) )  THEN
1600                       ALLOCATE ( surf_usm_v(l)%pt_10cm_av(1:surf_usm_v(l)%ns) )
1601                       surf_usm_v(l)%pt_10cm_av = 0.0_wp
1602                   ENDIF
1603                ENDIF
1604
1605            CASE ( 'usm_t_wall' )
1606!
1607!--             Wall temperature for iwl layer of walls and land
1608                IF ( l == -1 )  THEN
1609                   IF ( .NOT.  ALLOCATED( surf_usm_h%t_wall_av ) )  THEN
1610                       ALLOCATE ( surf_usm_h%t_wall_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
1611                       surf_usm_h%t_wall_av = 0.0_wp
1612                   ENDIF
1613                ELSE
1614                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%t_wall_av ) )  THEN
1615                       ALLOCATE ( surf_usm_v(l)%t_wall_av(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
1616                       surf_usm_v(l)%t_wall_av = 0.0_wp
1617                   ENDIF
1618                ENDIF
1619
1620            CASE ( 'usm_t_window' )
1621!
1622!--             Window temperature for iwl layer of walls and land
1623                IF ( l == -1 )  THEN
1624                   IF ( .NOT.  ALLOCATED( surf_usm_h%t_window_av ) )  THEN
1625                       ALLOCATE ( surf_usm_h%t_window_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
1626                       surf_usm_h%t_window_av = 0.0_wp
1627                   ENDIF
1628                ELSE
1629                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%t_window_av ) )  THEN
1630                       ALLOCATE ( surf_usm_v(l)%t_window_av(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
1631                       surf_usm_v(l)%t_window_av = 0.0_wp
1632                   ENDIF
1633                ENDIF
1634
1635            CASE ( 'usm_t_green' )
1636!
1637!--             Green temperature for iwl layer of walls and land
1638                IF ( l == -1 )  THEN
1639                   IF ( .NOT.  ALLOCATED( surf_usm_h%t_green_av ) )  THEN
1640                       ALLOCATE ( surf_usm_h%t_green_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
1641                       surf_usm_h%t_green_av = 0.0_wp
1642                   ENDIF
1643                ELSE
1644                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%t_green_av ) )  THEN
1645                       ALLOCATE ( surf_usm_v(l)%t_green_av(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
1646                       surf_usm_v(l)%t_green_av = 0.0_wp
1647                   ENDIF
1648                ENDIF
1649            CASE ( 'usm_swc' )
1650!
1651!--             Soil water content for iwl layer of walls and land
1652                IF ( l == -1 .AND. .NOT.  ALLOCATED( surf_usm_h%swc_av ) )  THEN
1653                    ALLOCATE ( surf_usm_h%swc_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
1654                    surf_usm_h%swc_av = 0.0_wp
1655                ELSE
1656                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%swc_av ) )  THEN
1657                       ALLOCATE ( surf_usm_v(l)%swc_av(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
1658                       surf_usm_v(l)%swc_av = 0.0_wp
1659                   ENDIF
1660                ENDIF
1661
1662           CASE DEFAULT
1663               CONTINUE
1664
1665       END SELECT
1666
1667    ELSEIF ( mode == 'sum' )  THEN
1668
1669       SELECT CASE ( TRIM( var ) )
1670
1671            CASE ( 'usm_wshf' )
1672!
1673!--             Array of sensible heat flux from surfaces (land, roof, wall)
1674                IF ( l == -1 )  THEN
1675                   DO  m = 1, surf_usm_h%ns
1676                      surf_usm_h%wshf_eb_av(m) = surf_usm_h%wshf_eb_av(m) + surf_usm_h%wshf_eb(m)
1677                   ENDDO
1678                ELSE
1679                   DO  m = 1, surf_usm_v(l)%ns
1680                      surf_usm_v(l)%wshf_eb_av(m) = surf_usm_v(l)%wshf_eb_av(m) +                  &
1681                                                    surf_usm_v(l)%wshf_eb(m)
1682                   ENDDO
1683                ENDIF
1684
1685            CASE ( 'usm_qsws' )
1686!
1687!--             Array of latent heat flux from surfaces (land, roof, wall)
1688                IF ( l == -1 ) THEN
1689                DO  m = 1, surf_usm_h%ns
1690                   surf_usm_h%qsws_av(m) = surf_usm_h%qsws_av(m) + surf_usm_h%qsws(m) * l_v
1691                ENDDO
1692                ELSE
1693                   DO  m = 1, surf_usm_v(l)%ns
1694                      surf_usm_v(l)%qsws_av(m) =  surf_usm_v(l)%qsws_av(m) +                       &
1695                                                  surf_usm_v(l)%qsws(m) * l_v
1696                   ENDDO
1697                ENDIF
1698
1699            CASE ( 'usm_qsws_veg' )
1700!
1701!--             Array of latent heat flux from vegetation surfaces (land, roof, wall)
1702                IF ( l == -1 )  THEN
1703                DO  m = 1, surf_usm_h%ns
1704                   surf_usm_h%qsws_veg_av(m) = surf_usm_h%qsws_veg_av(m) + surf_usm_h%qsws_veg(m)
1705                ENDDO
1706                ELSE
1707                   DO  m = 1, surf_usm_v(l)%ns
1708                      surf_usm_v(l)%qsws_veg_av(m) = surf_usm_v(l)%qsws_veg_av(m) +                &
1709                                                     surf_usm_v(l)%qsws_veg(m)
1710                   ENDDO
1711                ENDIF
1712
1713            CASE ( 'usm_qsws_liq' )
1714!
1715!--             Array of latent heat flux from surfaces with liquid (land, roof, wall)
1716                IF ( l == -1 ) THEN
1717                DO  m = 1, surf_usm_h%ns
1718                   surf_usm_h%qsws_liq_av(m) = surf_usm_h%qsws_liq_av(m) +                         &
1719                                               surf_usm_h%qsws_liq(m)
1720                ENDDO
1721                ELSE
1722                   DO  m = 1, surf_usm_v(l)%ns
1723                      surf_usm_v(l)%qsws_liq_av(m) = surf_usm_v(l)%qsws_liq_av(m) +                &
1724                                                     surf_usm_v(l)%qsws_liq(m)
1725                   ENDDO
1726                ENDIF
1727
1728            CASE ( 'usm_wghf' )
1729!
1730!--             Array of heat flux from ground (wall, roof, land)
1731                IF ( l == -1 ) THEN
1732                   DO  m = 1, surf_usm_h%ns
1733                      surf_usm_h%wghf_eb_av(m) = surf_usm_h%wghf_eb_av(m) +                        &
1734                                                 surf_usm_h%wghf_eb(m)
1735                   ENDDO
1736                ELSE
1737                   DO  m = 1, surf_usm_v(l)%ns
1738                      surf_usm_v(l)%wghf_eb_av(m) = surf_usm_v(l)%wghf_eb_av(m) +                  &
1739                                                    surf_usm_v(l)%wghf_eb(m)
1740                   ENDDO
1741                ENDIF
1742
1743            CASE ( 'usm_wghf_window' )
1744!
1745!--             Array of heat flux from window ground (wall, roof, land)
1746                IF ( l == -1 )  THEN
1747                   DO  m = 1, surf_usm_h%ns
1748                      surf_usm_h%wghf_eb_window_av(m) = surf_usm_h%wghf_eb_window_av(m) +          &
1749                                                        surf_usm_h%wghf_eb_window(m)
1750                   ENDDO
1751                ELSE
1752                   DO  m = 1, surf_usm_v(l)%ns
1753                      surf_usm_v(l)%wghf_eb_window_av(m) = surf_usm_v(l)%wghf_eb_window_av(m) +    &
1754                                                           surf_usm_v(l)%wghf_eb_window(m)
1755                   ENDDO
1756                ENDIF
1757
1758            CASE ( 'usm_wghf_green' )
1759!
1760!--             Array of heat flux from green ground (wall, roof, land)
1761                IF ( l == -1 )  THEN
1762                   DO  m = 1, surf_usm_h%ns
1763                      surf_usm_h%wghf_eb_green_av(m) = surf_usm_h%wghf_eb_green_av(m) +            &
1764                                                       surf_usm_h%wghf_eb_green(m)
1765                   ENDDO
1766                ELSE
1767                   DO  m = 1, surf_usm_v(l)%ns
1768                      surf_usm_v(l)%wghf_eb_green_av(m) = surf_usm_v(l)%wghf_eb_green_av(m) +      &
1769                                                          surf_usm_v(l)%wghf_eb_green(m)
1770                   ENDDO
1771                ENDIF
1772
1773            CASE ( 'usm_iwghf' )
1774!
1775!--             Array of heat flux from indoor ground (wall, roof, land)
1776                IF ( l == -1 )  THEN
1777                   DO  m = 1, surf_usm_h%ns
1778                      surf_usm_h%iwghf_eb_av(m) = surf_usm_h%iwghf_eb_av(m) + surf_usm_h%iwghf_eb(m)
1779                   ENDDO
1780                ELSE
1781                   DO  m = 1, surf_usm_v(l)%ns
1782                      surf_usm_v(l)%iwghf_eb_av(m) = surf_usm_v(l)%iwghf_eb_av(m) +                &
1783                                                     surf_usm_v(l)%iwghf_eb(m)
1784                   ENDDO
1785                ENDIF
1786
1787            CASE ( 'usm_iwghf_window' )
1788!
1789!--             Array of heat flux from indoor window ground (wall, roof, land)
1790                IF ( l == -1 )  THEN
1791                   DO  m = 1, surf_usm_h%ns
1792                      surf_usm_h%iwghf_eb_window_av(m) = surf_usm_h%iwghf_eb_window_av(m) +        &
1793                                                         surf_usm_h%iwghf_eb_window(m)
1794                   ENDDO
1795                ELSE
1796                   DO  m = 1, surf_usm_v(l)%ns
1797                      surf_usm_v(l)%iwghf_eb_window_av(m) = surf_usm_v(l)%iwghf_eb_window_av(m) +  &
1798                                                            surf_usm_v(l)%iwghf_eb_window(m)
1799                   ENDDO
1800                ENDIF
1801
1802            CASE ( 'usm_t_surf_wall' )
1803!
1804!--             Surface temperature for surfaces
1805                IF ( l == -1 )  THEN
1806                   DO  m = 1, surf_usm_h%ns
1807                   surf_usm_h%t_surf_wall_av(m) = surf_usm_h%t_surf_wall_av(m) + t_surf_wall_h(m)
1808                   ENDDO
1809                ELSE
1810                   DO  m = 1, surf_usm_v(l)%ns
1811                      surf_usm_v(l)%t_surf_wall_av(m) = surf_usm_v(l)%t_surf_wall_av(m) +          &
1812                                                        t_surf_wall_v(l)%t(m)
1813                   ENDDO
1814                ENDIF
1815
1816            CASE ( 'usm_t_surf_window' )
1817!
1818!--             Surface temperature for window surfaces
1819                IF ( l == -1 )  THEN
1820                   DO  m = 1, surf_usm_h%ns
1821                      surf_usm_h%t_surf_window_av(m) = surf_usm_h%t_surf_window_av(m) +            &
1822                                                       t_surf_window_h(m)
1823                   ENDDO
1824                ELSE
1825                   DO  m = 1, surf_usm_v(l)%ns
1826                      surf_usm_v(l)%t_surf_window_av(m) = surf_usm_v(l)%t_surf_window_av(m) +      &
1827                                                          t_surf_window_v(l)%t(m)
1828                   ENDDO
1829                ENDIF
1830
1831            CASE ( 'usm_t_surf_green' )
1832!
1833!--             Surface temperature for green surfaces
1834                IF ( l == -1 )  THEN
1835                   DO  m = 1, surf_usm_h%ns
1836                      surf_usm_h%t_surf_green_av(m) = surf_usm_h%t_surf_green_av(m) +              &
1837                                                      t_surf_green_h(m)
1838                   ENDDO
1839                ELSE
1840                   DO  m = 1, surf_usm_v(l)%ns
1841                      surf_usm_v(l)%t_surf_green_av(m) = surf_usm_v(l)%t_surf_green_av(m) +        &
1842                                                         t_surf_green_v(l)%t(m)
1843                   ENDDO
1844                ENDIF
1845
1846            CASE ( 'usm_theta_10cm' )
1847!
1848!--             Near surface temperature for whole surfaces
1849                IF ( l == -1 )  THEN
1850                   DO  m = 1, surf_usm_h%ns
1851                      surf_usm_h%pt_10cm_av(m) = surf_usm_h%pt_10cm_av(m) +                        &
1852                                                 surf_usm_h%pt_10cm(m)
1853                   ENDDO
1854                ELSE
1855                   DO  m = 1, surf_usm_v(l)%ns
1856                      surf_usm_v(l)%pt_10cm_av(m) = surf_usm_v(l)%pt_10cm_av(m) +                  &
1857                                                    surf_usm_v(l)%pt_10cm(m)
1858                   ENDDO
1859                ENDIF
1860
1861            CASE ( 'usm_t_wall' )
1862!
1863!--             Wall temperature for  iwl layer of walls and land
1864                IF ( l == -1 )  THEN
1865                   DO  m = 1, surf_usm_h%ns
1866                      surf_usm_h%t_wall_av(iwl,m) = surf_usm_h%t_wall_av(iwl,m) +                  &
1867                                                    t_wall_h(iwl,m)
1868                   ENDDO
1869                ELSE
1870                   DO  m = 1, surf_usm_v(l)%ns
1871                      surf_usm_v(l)%t_wall_av(iwl,m) = surf_usm_v(l)%t_wall_av(iwl,m) +            &
1872                                                       t_wall_v(l)%t(iwl,m)
1873                   ENDDO
1874                ENDIF
1875
1876            CASE ( 'usm_t_window' )
1877!
1878!--             Window temperature for  iwl layer of walls and land
1879                IF ( l == -1 )  THEN
1880                   DO  m = 1, surf_usm_h%ns
1881                      surf_usm_h%t_window_av(iwl,m) = surf_usm_h%t_window_av(iwl,m) +              &
1882                                                      t_window_h(iwl,m)
1883                   ENDDO
1884                ELSE
1885                   DO  m = 1, surf_usm_v(l)%ns
1886                      surf_usm_v(l)%t_window_av(iwl,m) = surf_usm_v(l)%t_window_av(iwl,m) +        &
1887                                                         t_window_v(l)%t(iwl,m)
1888                   ENDDO
1889                ENDIF
1890
1891            CASE ( 'usm_t_green' )
1892!
1893!--             Green temperature for  iwl layer of walls and land
1894                IF ( l == -1 )  THEN
1895                   DO  m = 1, surf_usm_h%ns
1896                      surf_usm_h%t_green_av(iwl,m) = surf_usm_h%t_green_av(iwl,m) + t_green_h(iwl,m)
1897                   ENDDO
1898                ELSE
1899                   DO  m = 1, surf_usm_v(l)%ns
1900                      surf_usm_v(l)%t_green_av(iwl,m) = surf_usm_v(l)%t_green_av(iwl,m) +          &
1901                                                        t_green_v(l)%t(iwl,m)
1902                   ENDDO
1903                ENDIF
1904
1905            CASE ( 'usm_swc' )
1906!
1907!--             Soil water content for  iwl layer of walls and land
1908                IF ( l == -1 )  THEN
1909                   DO  m = 1, surf_usm_h%ns
1910                      surf_usm_h%swc_av(iwl,m) = surf_usm_h%swc_av(iwl,m) + swc_h(iwl,m)
1911                   ENDDO
1912                ELSE
1913                ENDIF
1914
1915            CASE DEFAULT
1916                CONTINUE
1917
1918       END SELECT
1919
1920    ELSEIF ( mode == 'average' )  THEN
1921
1922       SELECT CASE ( TRIM( var ) )
1923
1924            CASE ( 'usm_wshf' )
1925!
1926!--             Array of sensible heat flux from surfaces (land, roof, wall)
1927                IF ( l == -1 )  THEN
1928                   DO  m = 1, surf_usm_h%ns
1929                      surf_usm_h%wshf_eb_av(m) = surf_usm_h%wshf_eb_av(m) /                        &
1930                                                 REAL( average_count_3d, kind=wp )
1931                   ENDDO
1932                ELSE
1933                   DO  m = 1, surf_usm_v(l)%ns
1934                      surf_usm_v(l)%wshf_eb_av(m) = surf_usm_v(l)%wshf_eb_av(m) /                  &
1935                                                    REAL( average_count_3d, kind=wp )
1936                   ENDDO
1937                ENDIF
1938
1939            CASE ( 'usm_qsws' )
1940!
1941!--             Array of latent heat flux from surfaces (land, roof, wall)
1942                IF ( l == -1 )  THEN
1943                DO  m = 1, surf_usm_h%ns
1944                   surf_usm_h%qsws_av(m) = surf_usm_h%qsws_av(m) /                                 &
1945                                           REAL( average_count_3d, kind=wp )
1946                ENDDO
1947                ELSE
1948                   DO  m = 1, surf_usm_v(l)%ns
1949                      surf_usm_v(l)%qsws_av(m) = surf_usm_v(l)%qsws_av(m) /                        &
1950                                                 REAL( average_count_3d, kind=wp )
1951                   ENDDO
1952                ENDIF
1953
1954            CASE ( 'usm_qsws_veg' )
1955!
1956!--             Array of latent heat flux from vegetation surfaces (land, roof, wall)
1957                IF ( l == -1 )  THEN
1958                DO  m = 1, surf_usm_h%ns
1959                   surf_usm_h%qsws_veg_av(m) = surf_usm_h%qsws_veg_av(m) /                         &
1960                                               REAL( average_count_3d, kind=wp )
1961                ENDDO
1962                ELSE
1963                   DO  m = 1, surf_usm_v(l)%ns
1964                      surf_usm_v(l)%qsws_veg_av(m) = surf_usm_v(l)%qsws_veg_av(m) /                &
1965                                                     REAL( average_count_3d, kind=wp )
1966                   ENDDO
1967                ENDIF
1968
1969            CASE ( 'usm_qsws_liq' )
1970!
1971!--             Array of latent heat flux from surfaces with liquid (land, roof, wall)
1972                IF ( l == -1 )  THEN
1973                DO  m = 1, surf_usm_h%ns
1974                   surf_usm_h%qsws_liq_av(m) = surf_usm_h%qsws_liq_av(m) /                         &
1975                                               REAL( average_count_3d, kind=wp )
1976                ENDDO
1977                ELSE
1978                   DO  m = 1, surf_usm_v(l)%ns
1979                      surf_usm_v(l)%qsws_liq_av(m) = surf_usm_v(l)%qsws_liq_av(m) /                &
1980                                                     REAL( average_count_3d, kind=wp )
1981                   ENDDO
1982                ENDIF
1983
1984            CASE ( 'usm_wghf' )
1985!
1986!--             Array of heat flux from ground (wall, roof, land)
1987                IF ( l == -1 )  THEN
1988                   DO  m = 1, surf_usm_h%ns
1989                      surf_usm_h%wghf_eb_av(m) = surf_usm_h%wghf_eb_av(m) /                        &
1990                                                 REAL( average_count_3d, kind=wp )
1991                   ENDDO
1992                ELSE
1993                   DO  m = 1, surf_usm_v(l)%ns
1994                      surf_usm_v(l)%wghf_eb_av(m) = surf_usm_v(l)%wghf_eb_av(m) /                  &
1995                                                    REAL( average_count_3d, kind=wp )
1996                   ENDDO
1997                ENDIF
1998
1999            CASE ( 'usm_wghf_window' )
2000!
2001!--             Array of heat flux from window ground (wall, roof, land)
2002                IF ( l == -1 )  THEN
2003                   DO  m = 1, surf_usm_h%ns
2004                      surf_usm_h%wghf_eb_window_av(m) = surf_usm_h%wghf_eb_window_av(m) /          &
2005                                                        REAL( average_count_3d, kind=wp )
2006                   ENDDO
2007                ELSE
2008                   DO  m = 1, surf_usm_v(l)%ns
2009                      surf_usm_v(l)%wghf_eb_window_av(m) = surf_usm_v(l)%wghf_eb_window_av(m) /    &
2010                                                           REAL( average_count_3d, kind=wp )
2011                   ENDDO
2012                ENDIF
2013
2014            CASE ( 'usm_wghf_green' )
2015!
2016!--             Array of heat flux from green ground (wall, roof, land)
2017                IF ( l == -1 )  THEN
2018                   DO  m = 1, surf_usm_h%ns
2019                      surf_usm_h%wghf_eb_green_av(m) = surf_usm_h%wghf_eb_green_av(m) /            &
2020                                                       REAL( average_count_3d, kind=wp )
2021                   ENDDO
2022                ELSE
2023                   DO  m = 1, surf_usm_v(l)%ns
2024                      surf_usm_v(l)%wghf_eb_green_av(m) = surf_usm_v(l)%wghf_eb_green_av(m) /      &
2025                                                          REAL( average_count_3d, kind=wp )
2026                   ENDDO
2027                ENDIF
2028
2029            CASE ( 'usm_iwghf' )
2030!
2031!--             Array of heat flux from indoor ground (wall, roof, land)
2032                IF ( l == -1 )  THEN
2033                   DO  m = 1, surf_usm_h%ns
2034                      surf_usm_h%iwghf_eb_av(m) = surf_usm_h%iwghf_eb_av(m) /                      &
2035                                                  REAL( average_count_3d, kind=wp )
2036                   ENDDO
2037                ELSE
2038                   DO  m = 1, surf_usm_v(l)%ns
2039                      surf_usm_v(l)%iwghf_eb_av(m) = surf_usm_v(l)%iwghf_eb_av(m) /                &
2040                                                     REAL( average_count_3d, kind=wp )
2041                   ENDDO
2042                ENDIF
2043
2044            CASE ( 'usm_iwghf_window' )
2045!
2046!--             Array of heat flux from indoor window ground (wall, roof, land)
2047                IF ( l == -1 )  THEN
2048                   DO  m = 1, surf_usm_h%ns
2049                      surf_usm_h%iwghf_eb_window_av(m) = surf_usm_h%iwghf_eb_window_av(m) /        &
2050                                                         REAL( average_count_3d, kind=wp )
2051                   ENDDO
2052                ELSE
2053                   DO  m = 1, surf_usm_v(l)%ns
2054                      surf_usm_v(l)%iwghf_eb_window_av(m) = surf_usm_v(l)%iwghf_eb_window_av(m) /  &
2055                                                            REAL( average_count_3d, kind=wp )
2056                   ENDDO
2057                ENDIF
2058
2059            CASE ( 'usm_t_surf_wall' )
2060!
2061!--             Surface temperature for surfaces
2062                IF ( l == -1 )  THEN
2063                   DO  m = 1, surf_usm_h%ns
2064                   surf_usm_h%t_surf_wall_av(m) = surf_usm_h%t_surf_wall_av(m) /                   &
2065                                                  REAL( average_count_3d, kind=wp )
2066                   ENDDO
2067                ELSE
2068                   DO  m = 1, surf_usm_v(l)%ns
2069                      surf_usm_v(l)%t_surf_wall_av(m) = surf_usm_v(l)%t_surf_wall_av(m) /          &
2070                                                        REAL( average_count_3d, kind=wp )
2071                   ENDDO
2072                ENDIF
2073
2074            CASE ( 'usm_t_surf_window' )
2075!
2076!--             Surface temperature for window surfaces
2077                IF ( l == -1 )  THEN
2078                   DO  m = 1, surf_usm_h%ns
2079                      surf_usm_h%t_surf_window_av(m) = surf_usm_h%t_surf_window_av(m) /            &
2080                                                       REAL( average_count_3d, kind=wp )
2081                   ENDDO
2082                ELSE
2083                   DO  m = 1, surf_usm_v(l)%ns
2084                      surf_usm_v(l)%t_surf_window_av(m) = surf_usm_v(l)%t_surf_window_av(m) /      &
2085                                                          REAL( average_count_3d, kind=wp )
2086                   ENDDO
2087                ENDIF
2088
2089            CASE ( 'usm_t_surf_green' )
2090!
2091!--             Surface temperature for green surfaces
2092                IF ( l == -1 )  THEN
2093                   DO  m = 1, surf_usm_h%ns
2094                      surf_usm_h%t_surf_green_av(m) = surf_usm_h%t_surf_green_av(m) /              &
2095                                                      REAL( average_count_3d, kind=wp )
2096                   ENDDO
2097                ELSE
2098                   DO  m = 1, surf_usm_v(l)%ns
2099                      surf_usm_v(l)%t_surf_green_av(m) = surf_usm_v(l)%t_surf_green_av(m) /        &
2100                                                         REAL( average_count_3d, kind=wp )
2101                   ENDDO
2102                ENDIF
2103
2104            CASE ( 'usm_theta_10cm' )
2105!
2106!--             Near surface temperature for whole surfaces
2107                IF ( l == -1 )  THEN
2108                   DO  m = 1, surf_usm_h%ns
2109                      surf_usm_h%pt_10cm_av(m) = surf_usm_h%pt_10cm_av(m) /                        &
2110                                                 REAL( average_count_3d, kind=wp )
2111                   ENDDO
2112                ELSE
2113                   DO  m = 1, surf_usm_v(l)%ns
2114                      surf_usm_v(l)%pt_10cm_av(m) = surf_usm_v(l)%pt_10cm_av(m) /                  &
2115                                                    REAL( average_count_3d, kind=wp )
2116                   ENDDO
2117                ENDIF
2118
2119
2120            CASE ( 'usm_t_wall' )
2121!
2122!--             Wall temperature for  iwl layer of walls and land
2123                IF ( l == -1 )  THEN
2124                   DO  m = 1, surf_usm_h%ns
2125                      surf_usm_h%t_wall_av(iwl,m) = surf_usm_h%t_wall_av(iwl,m) /                  &
2126                                                    REAL( average_count_3d, kind=wp )
2127                   ENDDO
2128                ELSE
2129                   DO  m = 1, surf_usm_v(l)%ns
2130                      surf_usm_v(l)%t_wall_av(iwl,m) = surf_usm_v(l)%t_wall_av(iwl,m) /            &
2131                                                       REAL( average_count_3d, kind=wp )
2132                   ENDDO
2133                ENDIF
2134
2135            CASE ( 'usm_t_window' )
2136!
2137!--             Window temperature for  iwl layer of walls and land
2138                IF ( l == -1 )  THEN
2139                   DO  m = 1, surf_usm_h%ns
2140                      surf_usm_h%t_window_av(iwl,m) = surf_usm_h%t_window_av(iwl,m) /              &
2141                                                      REAL( average_count_3d, kind=wp )
2142                   ENDDO
2143                ELSE
2144                   DO  m = 1, surf_usm_v(l)%ns
2145                      surf_usm_v(l)%t_window_av(iwl,m) = surf_usm_v(l)%t_window_av(iwl,m) /        &
2146                                                         REAL( average_count_3d, kind=wp )
2147                   ENDDO
2148                ENDIF
2149
2150            CASE ( 'usm_t_green' )
2151!
2152!--             Green temperature for  iwl layer of walls and land
2153                IF ( l == -1 )  THEN
2154                   DO  m = 1, surf_usm_h%ns
2155                      surf_usm_h%t_green_av(iwl,m) = surf_usm_h%t_green_av(iwl,m) /                &
2156                                                     REAL( average_count_3d, kind=wp )
2157                   ENDDO
2158                ELSE
2159                   DO  m = 1, surf_usm_v(l)%ns
2160                      surf_usm_v(l)%t_green_av(iwl,m) = surf_usm_v(l)%t_green_av(iwl,m) /          &
2161                                                        REAL( average_count_3d, kind=wp )
2162                   ENDDO
2163                ENDIF
2164
2165            CASE ( 'usm_swc' )
2166!
2167!--             Soil water content for  iwl layer of walls and land
2168                IF ( l == -1 )  THEN
2169                DO  m = 1, surf_usm_h%ns
2170                   surf_usm_h%swc_av(iwl,m) = surf_usm_h%swc_av(iwl,m) /                           &
2171                                              REAL( average_count_3d, kind=wp )
2172                ENDDO
2173                ELSE
2174                   DO  m = 1, surf_usm_v(l)%ns
2175                      surf_usm_v(l)%swc_av(iwl,m) = surf_usm_v(l)%swc_av(iwl,m) /                  &
2176                                                    REAL( average_count_3d, kind=wp )
2177                   ENDDO
2178                ENDIF
2179
2180
2181       END SELECT
2182
2183    ENDIF
2184
2185    ENDIF
2186
2187 END SUBROUTINE usm_3d_data_averaging
2188
2189
2190
2191!--------------------------------------------------------------------------------------------------!
2192! Description:
2193! ------------
2194!> Set internal Neumann boundary condition at outer soil grid points for temperature and humidity.
2195!--------------------------------------------------------------------------------------------------!
2196 SUBROUTINE usm_boundary_condition
2197
2198    IMPLICIT NONE
2199
2200    INTEGER(iwp) ::  i      !< grid index x-direction
2201    INTEGER(iwp) ::  ioff   !< offset index x-direction indicating location of soil grid point
2202    INTEGER(iwp) ::  j      !< grid index y-direction
2203    INTEGER(iwp) ::  joff   !< offset index x-direction indicating location of soil grid point
2204    INTEGER(iwp) ::  k      !< grid index z-direction
2205    INTEGER(iwp) ::  koff   !< offset index x-direction indicating location of soil grid point
2206    INTEGER(iwp) ::  l      !< running index surface-orientation
2207    INTEGER(iwp) ::  m      !< running index surface elements
2208
2209    koff = surf_usm_h%koff
2210    DO  m = 1, surf_usm_h%ns
2211       i = surf_usm_h%i(m)
2212       j = surf_usm_h%j(m)
2213       k = surf_usm_h%k(m)
2214       pt(k+koff,j,i) = pt(k,j,i)
2215    ENDDO
2216
2217    DO  l = 0, 3
2218       ioff = surf_usm_v(l)%ioff
2219       joff = surf_usm_v(l)%joff
2220       DO  m = 1, surf_usm_v(l)%ns
2221          i = surf_usm_v(l)%i(m)
2222          j = surf_usm_v(l)%j(m)
2223          k = surf_usm_v(l)%k(m)
2224          pt(k,j+joff,i+ioff) = pt(k,j,i)
2225       ENDDO
2226    ENDDO
2227
2228 END SUBROUTINE usm_boundary_condition
2229
2230
2231!--------------------------------------------------------------------------------------------------!
2232!
2233! Description:
2234! ------------
2235!> Subroutine checks variables and assigns units.
2236!> It is called out from subroutine check_parameters.
2237!--------------------------------------------------------------------------------------------------!
2238 SUBROUTINE usm_check_data_output( variable, unit )
2239
2240    IMPLICIT NONE
2241
2242    CHARACTER(LEN=*),INTENT(IN)    ::  variable   !<
2243    CHARACTER(LEN=*),INTENT(OUT)   ::  unit       !<
2244
2245    CHARACTER(LEN=2)                              ::  ls            !<
2246
2247    CHARACTER(LEN=varnamelength)                  ::  var           !< TRIM(variable)
2248
2249    INTEGER(iwp)                                  ::  i,j,l         !< index
2250
2251    INTEGER(iwp), PARAMETER                       ::  nl1 = 15      !< number of directional usm variables
2252    CHARACTER(LEN=varnamelength), DIMENSION(nl1)  ::  varlist1 = &  !< list of directional usm variables
2253              (/'usm_wshf                      ', &
2254                'usm_wghf                      ', &
2255                'usm_wghf_window               ', &
2256                'usm_wghf_green                ', &
2257                'usm_iwghf                     ', &
2258                'usm_iwghf_window              ', &
2259                'usm_surfz                     ', &
2260                'usm_surfwintrans              ', &
2261                'usm_surfcat                   ', &
2262                'usm_t_surf_wall               ', &
2263                'usm_t_surf_window             ', &
2264                'usm_t_surf_green              ', &
2265                'usm_t_green                   ', &
2266                'usm_qsws                      ', &
2267                'usm_theta_10cm                '/)
2268
2269    INTEGER(iwp), PARAMETER                       ::  nl2 = 3       !< number of directional layer usm variables
2270    CHARACTER(LEN=varnamelength), DIMENSION(nl2)  ::  varlist2 = &  !< list of directional layer usm variables
2271              (/'usm_t_wall                    ', &
2272                'usm_t_window                  ', &
2273                'usm_t_green                   '/)
2274
2275    INTEGER(iwp), PARAMETER                       ::  nd = 5     !< number of directions
2276    CHARACTER(LEN=6), DIMENSION(nd), PARAMETER    ::  dirname = &  !< direction names
2277              (/'_roof ','_south','_north','_west ','_east '/)
2278
2279    LOGICAL                                       ::  lfound     !< flag if the variable is found
2280
2281
2282    lfound = .FALSE.
2283
2284    var = TRIM( variable )
2285
2286!
2287!-- Check if variable exists
2288!-- Directional variables
2289    DO  i = 1, nl1
2290       DO  j = 1, nd
2291          IF ( TRIM( var ) == TRIM( varlist1(i)) // TRIM( dirname(j) ) )  THEN
2292             lfound = .TRUE.
2293             EXIT
2294          ENDIF
2295          IF ( lfound )  EXIT
2296       ENDDO
2297    ENDDO
2298    IF ( lfound )  GOTO 10
2299!
2300!-- Directional layer variables
2301    DO  i = 1, nl2
2302       DO  j = 1, nd
2303          DO  l = nzb_wall, nzt_wall
2304             WRITE( ls,'(A1,I1)' ) '_', l
2305             IF ( TRIM( var ) == TRIM( varlist2(i) ) // TRIM( ls ) // TRIM( dirname(j) ) )  THEN
2306                lfound = .TRUE.
2307                EXIT
2308             ENDIF
2309          ENDDO
2310          IF ( lfound )  EXIT
2311       ENDDO
2312    ENDDO
2313    IF ( .NOT.  lfound )  THEN
2314       unit = 'illegal'
2315       RETURN
2316    ENDIF
231710  CONTINUE
2318
2319    IF ( var(1:9)  == 'usm_wshf_'  .OR.  var(1:9) == 'usm_wghf_' .OR.                              &
2320         var(1:16) == 'usm_wghf_window_' .OR. var(1:15) == 'usm_wghf_green_' .OR.                  &
2321         var(1:10) == 'usm_iwghf_' .OR. var(1:17) == 'usm_iwghf_window_'    .OR.                   &
2322         var(1:17) == 'usm_surfwintrans_' .OR.                                                     &
2323         var(1:9)  == 'usm_qsws_'  .OR.  var(1:13)  == 'usm_qsws_veg_'  .OR.                       &
2324         var(1:13) == 'usm_qsws_liq_' )  THEN
2325        unit = 'W/m2'
2326    ELSE IF ( var(1:15) == 'usm_t_surf_wall'   .OR.  var(1:10) == 'usm_t_wall' .OR.                &
2327              var(1:12) == 'usm_t_window' .OR. var(1:17) == 'usm_t_surf_window' .OR.               &
2328              var(1:16) == 'usm_t_surf_green'  .OR.                                                &
2329              var(1:11) == 'usm_t_green' .OR.  var(1:7) == 'usm_swc' .OR.                          &
2330              var(1:14) == 'usm_theta_10cm' )  THEN
2331        unit = 'K'
2332    ELSE IF ( var(1:9) == 'usm_surfz'  .OR.  var(1:11) == 'usm_surfcat' )  THEN
2333        unit = '1'
2334    ELSE
2335        unit = 'illegal'
2336    ENDIF
2337
2338 END SUBROUTINE usm_check_data_output
2339
2340
2341!--------------------------------------------------------------------------------------------------!
2342! Description:
2343! ------------
2344!> Check parameters routine for urban surface model
2345!--------------------------------------------------------------------------------------------------!
2346 SUBROUTINE usm_check_parameters
2347
2348    USE control_parameters,                                                                        &
2349        ONLY:  bc_pt_b,                                                                            &
2350               bc_q_b,                                                                             &
2351               constant_flux_layer,                                                                &
2352               large_scale_forcing,                                                                &
2353               lsf_surf,                                                                           &
2354               topography
2355
2356    USE netcdf_data_input_mod,                                                                     &
2357         ONLY:  building_type_f
2358
2359    IMPLICIT NONE
2360
2361    INTEGER(iwp) ::  i  !< running index, x-dimension
2362    INTEGER(iwp) ::  j  !< running index, y-dimension
2363
2364!
2365!-- Dirichlet boundary conditions are required as the surface fluxes are calculated from the
2366!-- temperature/humidity gradients in the urban surface model
2367    IF ( bc_pt_b == 'neumann'   .OR.   bc_q_b == 'neumann' )  THEN
2368       message_string = 'urban surface model requires setting of bc_pt_b = "dirichlet" and '//     &
2369                        'bc_q_b  = "dirichlet"'
2370       CALL message( 'usm_check_parameters', 'PA0590', 1, 2, 0, 6, 0 )
2371    ENDIF
2372
2373    IF ( .NOT.  constant_flux_layer )  THEN
2374       message_string = 'urban surface model requires constant_flux_layer = .TRUE.'
2375       CALL message( 'usm_check_parameters', 'PA0084', 1, 2, 0, 6, 0 )
2376    ENDIF
2377
2378    IF (  .NOT.  radiation )  THEN
2379       message_string = 'urban surface model requires the radiation model to be switched on'
2380       CALL message( 'usm_check_parameters', 'PA0084', 1, 2, 0, 6, 0 )
2381    ENDIF
2382!
2383!-- Surface forcing has to be disabled for LSF in case of enabled urban surface module
2384    IF ( large_scale_forcing )  THEN
2385       lsf_surf = .FALSE.
2386    ENDIF
2387!
2388!-- Topography
2389    IF ( topography == 'flat' )  THEN
2390       message_string = 'topography /= "flat" is required when using the urban surface model'
2391       CALL message( 'usm_check_parameters', 'PA0592', 1, 2, 0, 6, 0 )
2392    ENDIF
2393!
2394!-- Naheatlayers
2395    IF ( naheatlayers > nzt )  THEN
2396       message_string = 'number of anthropogenic heat layers "naheatlayers" can not be larger ' // &
2397                        'than number of domain layers "nzt"'
2398       CALL message( 'usm_check_parameters', 'PA0593', 1, 2, 0, 6, 0 )
2399    ENDIF
2400!
2401!-- Check if building types are set within a valid range.
2402    IF ( building_type < LBOUND( building_pars, 2 )  .AND.                                         &
2403         building_type > UBOUND( building_pars, 2 ) )  THEN
2404       WRITE( message_string, * ) 'building_type = ', building_type, ' is out of the valid range'
2405       CALL message( 'usm_check_parameters', 'PA0529', 2, 2, 0, 6, 0 )
2406    ENDIF
2407    IF ( building_type_f%from_file )  THEN
2408       DO  i = nxl, nxr
2409          DO  j = nys, nyn
2410             IF ( building_type_f%var(j,i) /= building_type_f%fill  .AND.                          &
2411           ( building_type_f%var(j,i) < LBOUND( building_pars, 2 )  .OR.                           &
2412             building_type_f%var(j,i) > UBOUND( building_pars, 2 ) ) )  THEN
2413                WRITE( message_string, * ) 'building_type = is out of the valid range at (j,i) = ' &
2414                                           , j, i
2415                CALL message( 'usm_check_parameters', 'PA0529', 2, 2, myid, 6, 0 )
2416             ENDIF
2417          ENDDO
2418       ENDDO
2419    ENDIF
2420 END SUBROUTINE usm_check_parameters
2421
2422
2423!--------------------------------------------------------------------------------------------------!
2424!
2425! Description:
2426! ------------
2427!> Output of the 3D-arrays in netCDF and/or AVS format for variables of urban_surface model.
2428!> It resorts the urban surface module output quantities from surf style indexing into temporary 3D
2429!> array with indices (i,j,k). It is called from subroutine data_output_3d.
2430!--------------------------------------------------------------------------------------------------!
2431 SUBROUTINE usm_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
2432
2433    IMPLICIT NONE
2434
2435    CHARACTER(LEN=*), INTENT(IN)   ::  variable  !< variable name
2436
2437    CHARACTER(LEN=varnamelength)   ::  var  !< trimmed variable name
2438
2439    INTEGER(iwp), INTENT(IN)       ::  av        !< flag if averaged
2440    INTEGER(iwp), INTENT(IN)       ::  nzb_do    !< lower limit of the data output (usually 0)
2441    INTEGER(iwp), INTENT(IN)       ::  nzt_do    !< vertical upper limit of the data output (usually nz_do3d)
2442
2443    INTEGER(iwp), PARAMETER                            ::  nd = 5  !< number of directions
2444    INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER         ::  dirint =  (/    iup_u, isouth_u, inorth_u,  iwest_u,  ieast_u /)  !<
2445    INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER         ::  diridx =  (/       -1,        1,        0,        3,        2 /)
2446                                                           !< index for surf_*_v: 0:3 = (North, South, East, West)
2447    CHARACTER(LEN=6), DIMENSION(0:nd-1), PARAMETER     ::  dirname = (/ '_roof ', '_south', '_north', '_west ', '_east ' /)  !<
2448
2449
2450    INTEGER(iwp)  ::  ids, idsint, idsidx        !<
2451    INTEGER(iwp)  ::  i, j, k, iwl, istat, l, m  !< running indices
2452
2453    LOGICAL, INTENT(OUT)           ::  found     !<
2454
2455    REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf  !< sp - it has to correspond to module data_output_3d
2456    REAL(sp), DIMENSION(nzb:nzt+1,nys:nyn,nxl:nxr)     ::  temp_pf   !< temp array for urban surface output procedure
2457
2458    found = .TRUE.
2459    temp_pf = -1._wp
2460
2461    ids = -1
2462    var = TRIM( variable )
2463    DO i = 0, nd-1
2464        k = len( TRIM( var ) )
2465        j = len( TRIM( dirname(i) ) )
2466        IF ( TRIM( var(k-j+1:k) ) == TRIM( dirname(i) ) )  THEN
2467            ids = i
2468            idsint = dirint(ids)
2469            idsidx = diridx(ids)
2470            var = var(:k-j)
2471            EXIT
2472        ENDIF
2473    ENDDO
2474    IF ( ids == -1 )  THEN
2475        var = TRIM( variable )
2476    ENDIF
2477    IF ( var(1:11) == 'usm_t_wall_'  .AND.  len( TRIM( var ) ) >= 12 )  THEN
2478!
2479!--     Wall layers
2480        READ( var(12:12), '(I1)', iostat = istat ) iwl
2481        IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
2482            var = var(1:10)
2483        ENDIF
2484    ENDIF
2485    IF ( var(1:13) == 'usm_t_window_'  .AND.  len( TRIM( var ) ) >= 14 )  THEN
2486!
2487!--     Window layers
2488        READ( var(14:14), '(I1)', iostat = istat ) iwl
2489        IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
2490            var = var(1:12)
2491        ENDIF
2492    ENDIF
2493    IF ( var(1:12) == 'usm_t_green_'  .AND.  len( TRIM( var ) ) >= 13 )  THEN
2494!
2495!--     Green layers
2496        READ( var(13:13), '(I1)', iostat = istat ) iwl
2497        IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
2498            var = var(1:11)
2499        ENDIF
2500    ENDIF
2501    IF ( var(1:8) == 'usm_swc_'  .AND.  len( TRIM( var ) ) >= 9 )  THEN
2502!
2503!--     Green layers soil water content
2504        READ( var(9:9), '(I1)', iostat = istat ) iwl
2505        IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
2506            var = var(1:7)
2507        ENDIF
2508    ENDIF
2509
2510    SELECT CASE ( TRIM( var ) )
2511
2512      CASE ( 'usm_surfz' )
2513!
2514!--       Array of surface height (z)
2515          IF ( idsint == iup_u )  THEN
2516             DO  m = 1, surf_usm_h%ns
2517                i = surf_usm_h%i(m)
2518                j = surf_usm_h%j(m)
2519                k = surf_usm_h%k(m)
2520                temp_pf(0,j,i) = MAX( temp_pf(0,j,i), REAL( k, KIND = sp) )
2521             ENDDO
2522          ELSE
2523             l = idsidx
2524             DO  m = 1, surf_usm_v(l)%ns
2525                i = surf_usm_v(l)%i(m)
2526                j = surf_usm_v(l)%j(m)
2527                k = surf_usm_v(l)%k(m)
2528                temp_pf(0,j,i) = MAX( temp_pf(0,j,i), REAL( k, KIND = sp) + 1.0_sp )
2529             ENDDO
2530          ENDIF
2531
2532      CASE ( 'usm_surfcat' )
2533!
2534!--       Surface category
2535          IF ( idsint == iup_u )  THEN
2536             DO  m = 1, surf_usm_h%ns
2537                i = surf_usm_h%i(m)
2538                j = surf_usm_h%j(m)
2539                k = surf_usm_h%k(m)
2540                temp_pf(k,j,i) = surf_usm_h%surface_types(m)
2541             ENDDO
2542          ELSE
2543             l = idsidx
2544             DO  m = 1, surf_usm_v(l)%ns
2545                i = surf_usm_v(l)%i(m)
2546                j = surf_usm_v(l)%j(m)
2547                k = surf_usm_v(l)%k(m)
2548                temp_pf(k,j,i) = surf_usm_v(l)%surface_types(m)
2549             ENDDO
2550          ENDIF
2551
2552      CASE ( 'usm_surfwintrans' )
2553!
2554!--       Transmissivity window tiles
2555          IF ( idsint == iup_u )  THEN
2556             DO  m = 1, surf_usm_h%ns
2557                i = surf_usm_h%i(m)
2558                j = surf_usm_h%j(m)
2559                k = surf_usm_h%k(m)
2560                temp_pf(k,j,i) = surf_usm_h%transmissivity(m)
2561             ENDDO
2562          ELSE
2563             l = idsidx
2564             DO  m = 1, surf_usm_v(l)%ns
2565                i = surf_usm_v(l)%i(m)
2566                j = surf_usm_v(l)%j(m)
2567                k = surf_usm_v(l)%k(m)
2568                temp_pf(k,j,i) = surf_usm_v(l)%transmissivity(m)
2569             ENDDO
2570          ENDIF
2571
2572      CASE ( 'usm_wshf' )
2573!
2574!--       Array of sensible heat flux from surfaces
2575          IF ( av == 0 )  THEN
2576             IF ( idsint == iup_u )  THEN
2577                DO  m = 1, surf_usm_h%ns
2578                   i = surf_usm_h%i(m)
2579                   j = surf_usm_h%j(m)
2580                   k = surf_usm_h%k(m)
2581                   temp_pf(k,j,i) = surf_usm_h%wshf_eb(m)
2582                ENDDO
2583             ELSE
2584                l = idsidx
2585                DO  m = 1, surf_usm_v(l)%ns
2586                   i = surf_usm_v(l)%i(m)
2587                   j = surf_usm_v(l)%j(m)
2588                   k = surf_usm_v(l)%k(m)
2589                   temp_pf(k,j,i) = surf_usm_v(l)%wshf_eb(m)
2590                ENDDO
2591             ENDIF
2592          ELSE
2593             IF ( idsint == iup_u )  THEN
2594                DO  m = 1, surf_usm_h%ns
2595                   i = surf_usm_h%i(m)
2596                   j = surf_usm_h%j(m)
2597                   k = surf_usm_h%k(m)
2598                   temp_pf(k,j,i) = surf_usm_h%wshf_eb_av(m)
2599                ENDDO
2600             ELSE
2601                l = idsidx
2602                DO  m = 1, surf_usm_v(l)%ns
2603                   i = surf_usm_v(l)%i(m)
2604                   j = surf_usm_v(l)%j(m)
2605                   k = surf_usm_v(l)%k(m)
2606                   temp_pf(k,j,i) = surf_usm_v(l)%wshf_eb_av(m)
2607                ENDDO
2608             ENDIF
2609          ENDIF
2610
2611
2612      CASE ( 'usm_qsws' )
2613!
2614!--       Array of latent heat flux from surfaces
2615          IF ( av == 0 )  THEN
2616             IF ( idsint == iup_u )  THEN
2617                DO  m = 1, surf_usm_h%ns
2618                   i = surf_usm_h%i(m)
2619                   j = surf_usm_h%j(m)
2620                   k = surf_usm_h%k(m)
2621                   temp_pf(k,j,i) = surf_usm_h%qsws(m) * l_v
2622                ENDDO
2623             ELSE
2624                l = idsidx
2625                DO  m = 1, surf_usm_v(l)%ns
2626                   i = surf_usm_v(l)%i(m)
2627                   j = surf_usm_v(l)%j(m)
2628                   k = surf_usm_v(l)%k(m)
2629                   temp_pf(k,j,i) = surf_usm_v(l)%qsws(m) * l_v
2630                ENDDO
2631             ENDIF
2632          ELSE
2633             IF ( idsint == iup_u )  THEN
2634                DO  m = 1, surf_usm_h%ns
2635                   i = surf_usm_h%i(m)
2636                   j = surf_usm_h%j(m)
2637                   k = surf_usm_h%k(m)
2638                   temp_pf(k,j,i) = surf_usm_h%qsws_av(m)
2639                ENDDO
2640             ELSE
2641                l = idsidx
2642                DO  m = 1, surf_usm_v(l)%ns
2643                   i = surf_usm_v(l)%i(m)
2644                   j = surf_usm_v(l)%j(m)
2645                   k = surf_usm_v(l)%k(m)
2646                   temp_pf(k,j,i) = surf_usm_v(l)%qsws_av(m)
2647                ENDDO
2648             ENDIF
2649          ENDIF
2650
2651      CASE ( 'usm_qsws_veg' )
2652!
2653!--       Array of latent heat flux from vegetation surfaces
2654          IF ( av == 0 )  THEN
2655             IF ( idsint == iup_u )  THEN
2656                DO  m = 1, surf_usm_h%ns
2657                   i = surf_usm_h%i(m)
2658                   j = surf_usm_h%j(m)
2659                   k = surf_usm_h%k(m)
2660                   temp_pf(k,j,i) = surf_usm_h%qsws_veg(m)
2661                ENDDO
2662             ELSE
2663                l = idsidx
2664                DO  m = 1, surf_usm_v(l)%ns
2665                   i = surf_usm_v(l)%i(m)
2666                   j = surf_usm_v(l)%j(m)
2667                   k = surf_usm_v(l)%k(m)
2668                   temp_pf(k,j,i) = surf_usm_v(l)%qsws_veg(m)
2669                ENDDO
2670             ENDIF
2671          ELSE
2672             IF ( idsint == iup_u )  THEN
2673                DO  m = 1, surf_usm_h%ns
2674                   i = surf_usm_h%i(m)
2675                   j = surf_usm_h%j(m)
2676                   k = surf_usm_h%k(m)
2677                   temp_pf(k,j,i) = surf_usm_h%qsws_veg_av(m)
2678                ENDDO
2679             ELSE
2680                l = idsidx
2681                DO  m = 1, surf_usm_v(l)%ns
2682                   i = surf_usm_v(l)%i(m)
2683                   j = surf_usm_v(l)%j(m)
2684                   k = surf_usm_v(l)%k(m)
2685                   temp_pf(k,j,i) = surf_usm_v(l)%qsws_veg_av(m)
2686                ENDDO
2687             ENDIF
2688          ENDIF
2689
2690      CASE ( 'usm_qsws_liq' )
2691!
2692!--       Array of latent heat flux from surfaces with liquid
2693          IF ( av == 0 )  THEN
2694             IF ( idsint == iup_u )  THEN
2695                DO  m = 1, surf_usm_h%ns
2696                   i = surf_usm_h%i(m)
2697                   j = surf_usm_h%j(m)
2698                   k = surf_usm_h%k(m)
2699                   temp_pf(k,j,i) = surf_usm_h%qsws_liq(m)
2700                ENDDO
2701             ELSE
2702                l = idsidx
2703                DO  m = 1, surf_usm_v(l)%ns
2704                   i = surf_usm_v(l)%i(m)
2705                   j = surf_usm_v(l)%j(m)
2706                   k = surf_usm_v(l)%k(m)
2707                   temp_pf(k,j,i) = surf_usm_v(l)%qsws_liq(m)
2708                ENDDO
2709             ENDIF
2710          ELSE
2711             IF ( idsint == iup_u )  THEN
2712                DO  m = 1, surf_usm_h%ns
2713                   i = surf_usm_h%i(m)
2714                   j = surf_usm_h%j(m)
2715                   k = surf_usm_h%k(m)
2716                   temp_pf(k,j,i) = surf_usm_h%qsws_liq_av(m)
2717                ENDDO
2718             ELSE
2719                l = idsidx
2720                DO  m = 1, surf_usm_v(l)%ns
2721                   i = surf_usm_v(l)%i(m)
2722                   j = surf_usm_v(l)%j(m)
2723                   k = surf_usm_v(l)%k(m)
2724                   temp_pf(k,j,i) = surf_usm_v(l)%qsws_liq_av(m)
2725                ENDDO
2726             ENDIF
2727          ENDIF
2728
2729      CASE ( 'usm_wghf' )
2730!
2731!--       Array of heat flux from ground (land, wall, roof)
2732          IF ( av == 0 )  THEN
2733             IF ( idsint == iup_u )  THEN
2734                DO  m = 1, surf_usm_h%ns
2735                   i = surf_usm_h%i(m)
2736                   j = surf_usm_h%j(m)
2737                   k = surf_usm_h%k(m)
2738                   temp_pf(k,j,i) = surf_usm_h%wghf_eb(m)
2739                ENDDO
2740             ELSE
2741                l = idsidx
2742                DO  m = 1, surf_usm_v(l)%ns
2743                   i = surf_usm_v(l)%i(m)
2744                   j = surf_usm_v(l)%j(m)
2745                   k = surf_usm_v(l)%k(m)
2746                   temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb(m)
2747                ENDDO
2748             ENDIF
2749          ELSE
2750             IF ( idsint == iup_u )  THEN
2751                DO  m = 1, surf_usm_h%ns
2752                   i = surf_usm_h%i(m)
2753                   j = surf_usm_h%j(m)
2754                   k = surf_usm_h%k(m)
2755                   temp_pf(k,j,i) = surf_usm_h%wghf_eb_av(m)
2756                ENDDO
2757             ELSE
2758                l = idsidx
2759                DO  m = 1, surf_usm_v(l)%ns
2760                   i = surf_usm_v(l)%i(m)
2761                   j = surf_usm_v(l)%j(m)
2762                   k = surf_usm_v(l)%k(m)
2763                   temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb_av(m)
2764                ENDDO
2765             ENDIF
2766          ENDIF
2767
2768      CASE ( 'usm_wghf_window' )
2769!
2770!--       Array of heat flux from window ground (land, wall, roof)
2771          IF ( av == 0 )  THEN
2772             IF ( idsint == iup_u )  THEN
2773                DO  m = 1, surf_usm_h%ns
2774                   i = surf_usm_h%i(m)
2775                   j = surf_usm_h%j(m)
2776                   k = surf_usm_h%k(m)
2777                   temp_pf(k,j,i) = surf_usm_h%wghf_eb_window(m)
2778                ENDDO
2779             ELSE
2780                l = idsidx
2781                DO  m = 1, surf_usm_v(l)%ns
2782                   i = surf_usm_v(l)%i(m)
2783                   j = surf_usm_v(l)%j(m)
2784                   k = surf_usm_v(l)%k(m)
2785                   temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb_window(m)
2786                ENDDO
2787             ENDIF
2788          ELSE
2789             IF ( idsint == iup_u )  THEN
2790                DO  m = 1, surf_usm_h%ns
2791                   i = surf_usm_h%i(m)
2792                   j = surf_usm_h%j(m)
2793                   k = surf_usm_h%k(m)
2794                   temp_pf(k,j,i) = surf_usm_h%wghf_eb_window_av(m)
2795                ENDDO
2796             ELSE
2797                l = idsidx
2798                DO  m = 1, surf_usm_v(l)%ns
2799                   i = surf_usm_v(l)%i(m)
2800                   j = surf_usm_v(l)%j(m)
2801                   k = surf_usm_v(l)%k(m)
2802                   temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb_window_av(m)
2803                ENDDO
2804             ENDIF
2805          ENDIF
2806
2807      CASE ( 'usm_wghf_green' )
2808!
2809!--       Array of heat flux from green ground (land, wall, roof)
2810          IF ( av == 0 )  THEN
2811             IF ( idsint == iup_u )  THEN
2812                DO  m = 1, surf_usm_h%ns
2813                   i = surf_usm_h%i(m)
2814                   j = surf_usm_h%j(m)
2815                   k = surf_usm_h%k(m)
2816                   temp_pf(k,j,i) = surf_usm_h%wghf_eb_green(m)
2817                ENDDO
2818             ELSE
2819                l = idsidx
2820                DO  m = 1, surf_usm_v(l)%ns
2821                   i = surf_usm_v(l)%i(m)
2822                   j = surf_usm_v(l)%j(m)
2823                   k = surf_usm_v(l)%k(m)
2824                   temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb_green(m)
2825                ENDDO
2826             ENDIF
2827          ELSE
2828             IF ( idsint == iup_u )  THEN
2829                DO  m = 1, surf_usm_h%ns
2830                   i = surf_usm_h%i(m)
2831                   j = surf_usm_h%j(m)
2832                   k = surf_usm_h%k(m)
2833                   temp_pf(k,j,i) = surf_usm_h%wghf_eb_green_av(m)
2834                ENDDO
2835             ELSE
2836                l = idsidx
2837                DO  m = 1, surf_usm_v(l)%ns
2838                   i = surf_usm_v(l)%i(m)
2839                   j = surf_usm_v(l)%j(m)
2840                   k = surf_usm_v(l)%k(m)
2841                   temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb_green_av(m)
2842                ENDDO
2843             ENDIF
2844          ENDIF
2845
2846      CASE ( 'usm_iwghf' )
2847!
2848!--       Array of heat flux from indoor ground (land, wall, roof)
2849          IF ( av == 0 )  THEN
2850             IF ( idsint == iup_u )  THEN
2851                DO  m = 1, surf_usm_h%ns
2852                   i = surf_usm_h%i(m)
2853                   j = surf_usm_h%j(m)
2854                   k = surf_usm_h%k(m)
2855                   temp_pf(k,j,i) = surf_usm_h%iwghf_eb(m)
2856                ENDDO
2857             ELSE
2858                l = idsidx
2859                DO  m = 1, surf_usm_v(l)%ns
2860                   i = surf_usm_v(l)%i(m)
2861                   j = surf_usm_v(l)%j(m)
2862                   k = surf_usm_v(l)%k(m)
2863                   temp_pf(k,j,i) = surf_usm_v(l)%iwghf_eb(m)
2864                ENDDO
2865             ENDIF
2866          ELSE
2867             IF ( idsint == iup_u )  THEN
2868                DO  m = 1, surf_usm_h%ns
2869                   i = surf_usm_h%i(m)
2870                   j = surf_usm_h%j(m)
2871                   k = surf_usm_h%k(m)
2872                   temp_pf(k,j,i) = surf_usm_h%iwghf_eb_av(m)
2873                ENDDO
2874             ELSE
2875                l = idsidx
2876                DO  m = 1, surf_usm_v(l)%ns
2877                   i = surf_usm_v(l)%i(m)
2878                   j = surf_usm_v(l)%j(m)
2879                   k = surf_usm_v(l)%k(m)
2880                   temp_pf(k,j,i) = surf_usm_v(l)%iwghf_eb_av(m)
2881                ENDDO
2882             ENDIF
2883          ENDIF
2884
2885      CASE ( 'usm_iwghf_window' )
2886!
2887!--       Array of heat flux from indoor window ground (land, wall, roof)
2888          IF ( av == 0 )  THEN
2889             IF ( idsint == iup_u )  THEN
2890                DO  m = 1, surf_usm_h%ns
2891                   i = surf_usm_h%i(m)
2892                   j = surf_usm_h%j(m)
2893                   k = surf_usm_h%k(m)
2894                   temp_pf(k,j,i) = surf_usm_h%iwghf_eb_window(m)
2895                ENDDO
2896             ELSE
2897                l = idsidx
2898                DO  m = 1, surf_usm_v(l)%ns
2899                   i = surf_usm_v(l)%i(m)
2900                   j = surf_usm_v(l)%j(m)
2901                   k = surf_usm_v(l)%k(m)
2902                   temp_pf(k,j,i) = surf_usm_v(l)%iwghf_eb_window(m)
2903                ENDDO
2904             ENDIF
2905          ELSE
2906             IF ( idsint == iup_u )  THEN
2907                DO  m = 1, surf_usm_h%ns
2908                   i = surf_usm_h%i(m)
2909                   j = surf_usm_h%j(m)
2910                   k = surf_usm_h%k(m)
2911                   temp_pf(k,j,i) = surf_usm_h%iwghf_eb_window_av(m)
2912                ENDDO
2913             ELSE
2914                l = idsidx
2915                DO  m = 1, surf_usm_v(l)%ns
2916                   i = surf_usm_v(l)%i(m)
2917                   j = surf_usm_v(l)%j(m)
2918                   k = surf_usm_v(l)%k(m)
2919                   temp_pf(k,j,i) = surf_usm_v(l)%iwghf_eb_window_av(m)
2920                ENDDO
2921             ENDIF
2922          ENDIF
2923
2924      CASE ( 'usm_t_surf_wall' )
2925!
2926!--       Surface temperature for surfaces
2927          IF ( av == 0 )  THEN
2928             IF ( idsint == iup_u )  THEN
2929                DO  m = 1, surf_usm_h%ns
2930                   i = surf_usm_h%i(m)
2931                   j = surf_usm_h%j(m)
2932                   k = surf_usm_h%k(m)
2933                   temp_pf(k,j,i) = t_surf_wall_h(m)
2934                ENDDO
2935             ELSE
2936                l = idsidx
2937                DO  m = 1, surf_usm_v(l)%ns
2938                   i = surf_usm_v(l)%i(m)
2939                   j = surf_usm_v(l)%j(m)
2940                   k = surf_usm_v(l)%k(m)
2941                   temp_pf(k,j,i) = t_surf_wall_v(l)%t(m)
2942                ENDDO
2943             ENDIF
2944          ELSE
2945             IF ( idsint == iup_u )  THEN
2946                DO  m = 1, surf_usm_h%ns
2947                   i = surf_usm_h%i(m)
2948                   j = surf_usm_h%j(m)
2949                   k = surf_usm_h%k(m)
2950                   temp_pf(k,j,i) = surf_usm_h%t_surf_wall_av(m)
2951                ENDDO
2952             ELSE
2953                l = idsidx
2954                DO  m = 1, surf_usm_v(l)%ns
2955                   i = surf_usm_v(l)%i(m)
2956                   j = surf_usm_v(l)%j(m)
2957                   k = surf_usm_v(l)%k(m)
2958                   temp_pf(k,j,i) = surf_usm_v(l)%t_surf_wall_av(m)
2959                ENDDO
2960             ENDIF
2961          ENDIF
2962
2963      CASE ( 'usm_t_surf_window' )
2964!
2965!--       Surface temperature for window surfaces
2966          IF ( av == 0 )  THEN
2967             IF ( idsint == iup_u )  THEN
2968                DO  m = 1, surf_usm_h%ns
2969                   i = surf_usm_h%i(m)
2970                   j = surf_usm_h%j(m)
2971                   k = surf_usm_h%k(m)
2972                   temp_pf(k,j,i) = t_surf_window_h(m)
2973                ENDDO
2974             ELSE
2975                l = idsidx
2976                DO  m = 1, surf_usm_v(l)%ns
2977                   i = surf_usm_v(l)%i(m)
2978                   j = surf_usm_v(l)%j(m)
2979                   k = surf_usm_v(l)%k(m)
2980                   temp_pf(k,j,i) = t_surf_window_v(l)%t(m)
2981                ENDDO
2982             ENDIF
2983
2984          ELSE
2985             IF ( idsint == iup_u )  THEN
2986                DO  m = 1, surf_usm_h%ns
2987                   i = surf_usm_h%i(m)
2988                   j = surf_usm_h%j(m)
2989                   k = surf_usm_h%k(m)
2990                   temp_pf(k,j,i) = surf_usm_h%t_surf_window_av(m)
2991                ENDDO
2992             ELSE
2993                l = idsidx
2994                DO  m = 1, surf_usm_v(l)%ns
2995                   i = surf_usm_v(l)%i(m)
2996                   j = surf_usm_v(l)%j(m)
2997                   k = surf_usm_v(l)%k(m)
2998                   temp_pf(k,j,i) = surf_usm_v(l)%t_surf_window_av(m)
2999                ENDDO
3000
3001             ENDIF
3002
3003          ENDIF
3004
3005      CASE ( 'usm_t_surf_green' )
3006!
3007!--       Surface temperature for green surfaces
3008          IF ( av == 0 )  THEN
3009             IF ( idsint == iup_u )  THEN
3010                DO  m = 1, surf_usm_h%ns
3011                   i = surf_usm_h%i(m)
3012                   j = surf_usm_h%j(m)
3013                   k = surf_usm_h%k(m)
3014                   temp_pf(k,j,i) = t_surf_green_h(m)
3015                ENDDO
3016             ELSE
3017                l = idsidx
3018                DO  m = 1, surf_usm_v(l)%ns
3019                   i = surf_usm_v(l)%i(m)
3020                   j = surf_usm_v(l)%j(m)
3021                   k = surf_usm_v(l)%k(m)
3022                   temp_pf(k,j,i) = t_surf_green_v(l)%t(m)
3023                ENDDO
3024             ENDIF
3025
3026          ELSE
3027             IF ( idsint == iup_u )  THEN
3028                DO  m = 1, surf_usm_h%ns
3029                   i = surf_usm_h%i(m)
3030                   j = surf_usm_h%j(m)
3031                   k = surf_usm_h%k(m)
3032                   temp_pf(k,j,i) = surf_usm_h%t_surf_green_av(m)
3033                ENDDO
3034             ELSE
3035                l = idsidx
3036                DO  m = 1, surf_usm_v(l)%ns
3037                   i = surf_usm_v(l)%i(m)
3038                   j = surf_usm_v(l)%j(m)
3039                   k = surf_usm_v(l)%k(m)
3040                   temp_pf(k,j,i) = surf_usm_v(l)%t_surf_green_av(m)
3041                ENDDO
3042
3043             ENDIF
3044
3045          ENDIF
3046
3047      CASE ( 'usm_theta_10cm' )
3048!
3049!--       Near surface temperature for whole surfaces
3050          IF ( av == 0 )  THEN
3051             IF ( idsint == iup_u )  THEN
3052                DO  m = 1, surf_usm_h%ns
3053                   i = surf_usm_h%i(m)
3054                   j = surf_usm_h%j(m)
3055                   k = surf_usm_h%k(m)
3056                   temp_pf(k,j,i) = surf_usm_h%pt_10cm(m)
3057                ENDDO
3058             ELSE
3059                l = idsidx
3060                DO  m = 1, surf_usm_v(l)%ns
3061                   i = surf_usm_v(l)%i(m)
3062                   j = surf_usm_v(l)%j(m)
3063                   k = surf_usm_v(l)%k(m)
3064                   temp_pf(k,j,i) = surf_usm_v(l)%pt_10cm(m)
3065                ENDDO
3066             ENDIF
3067
3068
3069          ELSE
3070             IF ( idsint == iup_u )  THEN
3071                DO  m = 1, surf_usm_h%ns
3072                   i = surf_usm_h%i(m)
3073                   j = surf_usm_h%j(m)
3074                   k = surf_usm_h%k(m)
3075                   temp_pf(k,j,i) = surf_usm_h%pt_10cm_av(m)
3076                ENDDO
3077             ELSE
3078                l = idsidx
3079                DO  m = 1, surf_usm_v(l)%ns
3080                   i = surf_usm_v(l)%i(m)
3081                   j = surf_usm_v(l)%j(m)
3082                   k = surf_usm_v(l)%k(m)
3083                   temp_pf(k,j,i) = surf_usm_v(l)%pt_10cm_av(m)
3084                ENDDO
3085
3086              ENDIF
3087          ENDIF
3088
3089      CASE ( 'usm_t_wall' )
3090!
3091!--       Wall temperature for  iwl layer of walls and land
3092          IF ( av == 0 )  THEN
3093             IF ( idsint == iup_u )  THEN
3094                DO  m = 1, surf_usm_h%ns
3095                   i = surf_usm_h%i(m)
3096                   j = surf_usm_h%j(m)
3097                   k = surf_usm_h%k(m)
3098                   temp_pf(k,j,i) = t_wall_h(iwl,m)
3099                ENDDO
3100             ELSE
3101                l = idsidx
3102                DO  m = 1, surf_usm_v(l)%ns
3103                   i = surf_usm_v(l)%i(m)
3104                   j = surf_usm_v(l)%j(m)
3105                   k = surf_usm_v(l)%k(m)
3106                   temp_pf(k,j,i) = t_wall_v(l)%t(iwl,m)
3107                ENDDO
3108             ENDIF
3109          ELSE
3110             IF ( idsint == iup_u )  THEN
3111                DO  m = 1, surf_usm_h%ns
3112                   i = surf_usm_h%i(m)
3113                   j = surf_usm_h%j(m)
3114                   k = surf_usm_h%k(m)
3115                   temp_pf(k,j,i) = surf_usm_h%t_wall_av(iwl,m)
3116                ENDDO
3117             ELSE
3118                l = idsidx
3119                DO  m = 1, surf_usm_v(l)%ns
3120                   i = surf_usm_v(l)%i(m)
3121                   j = surf_usm_v(l)%j(m)
3122                   k = surf_usm_v(l)%k(m)
3123                   temp_pf(k,j,i) = surf_usm_v(l)%t_wall_av(iwl,m)
3124                ENDDO
3125             ENDIF
3126          ENDIF
3127
3128      CASE ( 'usm_t_window' )
3129!
3130!--       Window temperature for iwl layer of walls and land
3131          IF ( av == 0 )  THEN
3132             IF ( idsint == iup_u )  THEN
3133                DO  m = 1, surf_usm_h%ns
3134                   i = surf_usm_h%i(m)
3135                   j = surf_usm_h%j(m)
3136                   k = surf_usm_h%k(m)
3137                   temp_pf(k,j,i) = t_window_h(iwl,m)
3138                ENDDO
3139             ELSE
3140                l = idsidx
3141                DO  m = 1, surf_usm_v(l)%ns
3142                   i = surf_usm_v(l)%i(m)
3143                   j = surf_usm_v(l)%j(m)
3144                   k = surf_usm_v(l)%k(m)
3145                   temp_pf(k,j,i) = t_window_v(l)%t(iwl,m)
3146                ENDDO
3147             ENDIF
3148          ELSE
3149             IF ( idsint == iup_u )  THEN
3150                DO  m = 1, surf_usm_h%ns
3151                   i = surf_usm_h%i(m)
3152                   j = surf_usm_h%j(m)
3153                   k = surf_usm_h%k(m)
3154                   temp_pf(k,j,i) = surf_usm_h%t_window_av(iwl,m)
3155                ENDDO
3156             ELSE
3157                l = idsidx
3158                DO  m = 1, surf_usm_v(l)%ns
3159                   i = surf_usm_v(l)%i(m)
3160                   j = surf_usm_v(l)%j(m)
3161                   k = surf_usm_v(l)%k(m)
3162                   temp_pf(k,j,i) = surf_usm_v(l)%t_window_av(iwl,m)
3163                ENDDO
3164             ENDIF
3165          ENDIF
3166
3167      CASE ( 'usm_t_green' )
3168!
3169!--       Green temperature for  iwl layer of walls and land
3170          IF ( av == 0 )  THEN
3171             IF ( idsint == iup_u )  THEN
3172                DO  m = 1, surf_usm_h%ns
3173                   i = surf_usm_h%i(m)
3174                   j = surf_usm_h%j(m)
3175                   k = surf_usm_h%k(m)
3176                   temp_pf(k,j,i) = t_green_h(iwl,m)
3177                ENDDO
3178             ELSE
3179                l = idsidx
3180                DO  m = 1, surf_usm_v(l)%ns
3181                   i = surf_usm_v(l)%i(m)
3182                   j = surf_usm_v(l)%j(m)
3183                   k = surf_usm_v(l)%k(m)
3184                   temp_pf(k,j,i) = t_green_v(l)%t(iwl,m)
3185                ENDDO
3186             ENDIF
3187          ELSE
3188             IF ( idsint == iup_u )  THEN
3189                DO  m = 1, surf_usm_h%ns
3190                   i = surf_usm_h%i(m)
3191                   j = surf_usm_h%j(m)
3192                   k = surf_usm_h%k(m)
3193                   temp_pf(k,j,i) = surf_usm_h%t_green_av(iwl,m)
3194                ENDDO
3195             ELSE
3196                l = idsidx
3197                DO  m = 1, surf_usm_v(l)%ns
3198                   i = surf_usm_v(l)%i(m)
3199                   j = surf_usm_v(l)%j(m)
3200                   k = surf_usm_v(l)%k(m)
3201                   temp_pf(k,j,i) = surf_usm_v(l)%t_green_av(iwl,m)
3202                ENDDO
3203             ENDIF
3204          ENDIF
3205
3206          CASE ( 'usm_swc' )
3207!
3208!--       Soil water content for  iwl layer of walls and land
3209          IF ( av == 0 )  THEN
3210             IF ( idsint == iup_u )  THEN
3211                DO  m = 1, surf_usm_h%ns
3212                   i = surf_usm_h%i(m)
3213                   j = surf_usm_h%j(m)
3214                   k = surf_usm_h%k(m)
3215                   temp_pf(k,j,i) = swc_h(iwl,m)
3216                ENDDO
3217             ELSE
3218
3219             ENDIF
3220          ELSE
3221             IF ( idsint == iup_u )  THEN
3222                DO  m = 1, surf_usm_h%ns
3223                   i = surf_usm_h%i(m)
3224                   j = surf_usm_h%j(m)
3225                   k = surf_usm_h%k(m)
3226                   temp_pf(k,j,i) = surf_usm_h%swc_av(iwl,m)
3227                ENDDO
3228             ELSE
3229                l = idsidx
3230                DO  m = 1, surf_usm_v(l)%ns
3231                   i = surf_usm_v(l)%i(m)
3232                   j = surf_usm_v(l)%j(m)
3233                   k = surf_usm_v(l)%k(m)
3234                   temp_pf(k,j,i) = surf_usm_v(l)%swc_av(iwl,m)
3235                ENDDO
3236             ENDIF
3237          ENDIF
3238
3239
3240      CASE DEFAULT
3241          found = .FALSE.
3242          RETURN
3243    END SELECT
3244
3245!
3246!-- Rearrange dimensions for NetCDF output
3247!-- FIXME: this may generate FPE overflow upon conversion from DP to SP
3248    DO  j = nys, nyn
3249        DO  i = nxl, nxr
3250            DO  k = nzb_do, nzt_do
3251                local_pf(i,j,k) = temp_pf(k,j,i)
3252            ENDDO
3253        ENDDO
3254    ENDDO
3255
3256 END SUBROUTINE usm_data_output_3d
3257
3258
3259!--------------------------------------------------------------------------------------------------!
3260!
3261! Description:
3262! ------------
3263!> Soubroutine defines appropriate grid for netcdf variables.
3264!> It is called out from subroutine netcdf.
3265!--------------------------------------------------------------------------------------------------!
3266 SUBROUTINE usm_define_netcdf_grid( variable, found, grid_x, grid_y, grid_z )
3267
3268    IMPLICIT NONE
3269
3270    CHARACTER(LEN=*), INTENT(IN)  ::  variable  !<
3271    CHARACTER(LEN=*), INTENT(OUT) ::  grid_x    !<
3272    CHARACTER(LEN=*), INTENT(OUT) ::  grid_y    !<
3273    CHARACTER(LEN=*), INTENT(OUT) ::  grid_z    !<
3274
3275    CHARACTER(LEN=varnamelength)  ::  var  !<
3276
3277    LOGICAL, INTENT(OUT)  ::  found  !<
3278
3279    var = TRIM( variable )
3280    IF ( var(1:9) == 'usm_wshf_'  .OR.  var(1:9) == 'usm_wghf_'  .OR.                              &
3281         var(1:16) == 'usm_wghf_window_'  .OR. var(1:15) == 'usm_wghf_green_' .OR.                 &
3282         var(1:10) == 'usm_iwghf_'  .OR. var(1:17) == 'usm_iwghf_window_' .OR.                     &
3283         var(1:9) == 'usm_qsws_'  .OR.  var(1:13) == 'usm_qsws_veg_'  .OR.                         &
3284         var(1:13) == 'usm_qsws_liq_' .OR.                                                         &
3285         var(1:15) == 'usm_t_surf_wall'  .OR.  var(1:10) == 'usm_t_wall'  .OR.                     &
3286         var(1:17) == 'usm_t_surf_window'  .OR.  var(1:12) == 'usm_t_window'  .OR.                 &
3287         var(1:16) == 'usm_t_surf_green'  .OR. var(1:11) == 'usm_t_green' .OR.                     &
3288         var(1:15) == 'usm_theta_10cm' .OR.                                                        &
3289         var(1:9) == 'usm_surfz'  .OR.  var(1:11) == 'usm_surfcat'  .OR.                           &
3290         var(1:16) == 'usm_surfwintrans'  .OR. var(1:7) == 'usm_swc' ) THEN
3291
3292        found = .TRUE.
3293        grid_x = 'x'
3294        grid_y = 'y'
3295        grid_z = 'zu'
3296    ELSE
3297        found  = .FALSE.
3298        grid_x = 'none'
3299        grid_y = 'none'
3300        grid_z = 'none'
3301    ENDIF
3302
3303 END SUBROUTINE usm_define_netcdf_grid
3304
3305
3306!--------------------------------------------------------------------------------------------------!
3307! Description:
3308! ------------
3309!> Initialization of the wall surface model
3310!--------------------------------------------------------------------------------------------------!
3311 SUBROUTINE usm_init_material_model
3312
3313    IMPLICIT NONE
3314
3315    INTEGER(iwp) ::  k, l, m  !< running indices
3316
3317    IF ( debug_output )  CALL debug_message( 'usm_init_material_model', 'start' )
3318
3319!
3320!-- Calculate wall and window grid spacings. Wall temperature is defined at the center of the
3321!-- wall layers.
3322!-- First for horizontal surfaces:
3323    DO  m = 1, surf_usm_h%ns
3324
3325       surf_usm_h%dz_wall(nzb_wall,m) = surf_usm_h%zw(nzb_wall,m)
3326       DO k = nzb_wall+1, nzt_wall
3327          surf_usm_h%dz_wall(k,m) = surf_usm_h%zw(k,m) - surf_usm_h%zw(k-1,m)
3328       ENDDO
3329       surf_usm_h%dz_window(nzb_wall,m) = surf_usm_h%zw_window(nzb_wall,m)
3330       DO  k = nzb_wall+1, nzt_wall
3331          surf_usm_h%dz_window(k,m) = surf_usm_h%zw_window(k,m) - surf_usm_h%zw_window(k-1,m)
3332       ENDDO
3333
3334       surf_usm_h%dz_wall(nzt_wall+1,m) = surf_usm_h%dz_wall(nzt_wall,m)
3335
3336       DO k = nzb_wall, nzt_wall-1
3337         surf_usm_h%dz_wall_stag(k,m) = 0.5 * ( surf_usm_h%dz_wall(k+1,m) +                        &
3338                                                  surf_usm_h%dz_wall(k,m) )
3339       ENDDO
3340       surf_usm_h%dz_wall_stag(nzt_wall,m) = surf_usm_h%dz_wall(nzt_wall,m)
3341
3342       surf_usm_h%dz_window(nzt_wall+1,m) = surf_usm_h%dz_window(nzt_wall,m)
3343
3344       DO  k = nzb_wall, nzt_wall-1
3345          surf_usm_h%dz_window_stag(k,m) = 0.5 * ( surf_usm_h%dz_window(k+1,m) +                   &
3346                                                   surf_usm_h%dz_window(k,m) )
3347       ENDDO
3348       surf_usm_h%dz_window_stag(nzt_wall,m) = surf_usm_h%dz_window(nzt_wall,m)
3349
3350       IF (surf_usm_h%green_type_roof(m) == 2.0_wp )  THEN
3351!
3352!-- Extensive green roof
3353!-- Set ratio of substrate layer thickness, soil-type and LAI
3354          soil_type = 3
3355          surf_usm_h%lai(m) = 2.0_wp
3356
3357          surf_usm_h%zw_green(nzb_wall,m)   = 0.05_wp
3358          surf_usm_h%zw_green(nzb_wall+1,m) = 0.10_wp
3359          surf_usm_h%zw_green(nzb_wall+2,m) = 0.15_wp
3360          surf_usm_h%zw_green(nzb_wall+3,m) = 0.20_wp
3361       ELSE
3362!
3363!-- Intensiv green roof
3364!-- Set ratio of substrate layer thickness, soil-type and LAI
3365          soil_type = 6
3366          surf_usm_h%lai(m) = 4.0_wp
3367
3368          surf_usm_h%zw_green(nzb_wall,m)   = 0.05_wp
3369          surf_usm_h%zw_green(nzb_wall+1,m) = 0.10_wp
3370          surf_usm_h%zw_green(nzb_wall+2,m) = 0.40_wp
3371          surf_usm_h%zw_green(nzb_wall+3,m) = 0.80_wp
3372       ENDIF
3373
3374       surf_usm_h%dz_green(nzb_wall,m) = surf_usm_h%zw_green(nzb_wall,m)
3375       DO k = nzb_wall+1, nzt_wall
3376           surf_usm_h%dz_green(k,m) = surf_usm_h%zw_green(k,m) - surf_usm_h%zw_green(k-1,m)
3377       ENDDO
3378       surf_usm_h%dz_green(nzt_wall+1,m) = surf_usm_h%dz_green(nzt_wall,m)
3379
3380       DO k = nzb_wall, nzt_wall-1
3381           surf_usm_h%dz_green_stag(k,m) = 0.5 * ( surf_usm_h%dz_green(k+1,m) +                    &
3382                                                   surf_usm_h%dz_green(k,m) )
3383       ENDDO
3384       surf_usm_h%dz_green_stag(nzt_wall,m) = surf_usm_h%dz_green(nzt_wall,m)
3385
3386      IF ( alpha_vangenuchten == 9999999.9_wp )  THEN
3387         alpha_vangenuchten = soil_pars(0,soil_type)
3388      ENDIF
3389
3390      IF ( l_vangenuchten == 9999999.9_wp )  THEN
3391         l_vangenuchten = soil_pars(1,soil_type)
3392      ENDIF
3393
3394      IF ( n_vangenuchten == 9999999.9_wp )  THEN
3395         n_vangenuchten = soil_pars(2,soil_type)
3396      ENDIF
3397
3398      IF ( hydraulic_conductivity == 9999999.9_wp )  THEN
3399         hydraulic_conductivity = soil_pars(3,soil_type)
3400      ENDIF
3401
3402      IF ( saturation_moisture == 9999999.9_wp )  THEN
3403         saturation_moisture = m_soil_pars(0,soil_type)
3404      ENDIF
3405
3406      IF ( field_capacity == 9999999.9_wp )  THEN
3407         field_capacity = m_soil_pars(1,soil_type)
3408      ENDIF
3409
3410      IF ( wilting_point == 9999999.9_wp )  THEN
3411         wilting_point = m_soil_pars(2,soil_type)
3412      ENDIF
3413
3414      IF ( residual_moisture == 9999999.9_wp )  THEN
3415         residual_moisture = m_soil_pars(3,soil_type)
3416      ENDIF
3417
3418      DO  k = nzb_wall, nzt_wall+1
3419         swc_h(k,m) = field_capacity
3420         rootfr_h(k,m) = 0.5_wp
3421         surf_usm_h%alpha_vg_green(m)      = alpha_vangenuchten
3422         surf_usm_h%l_vg_green(m)          = l_vangenuchten
3423         surf_usm_h%n_vg_green(m)          = n_vangenuchten
3424         surf_usm_h%gamma_w_green_sat(k,m) = hydraulic_conductivity
3425         swc_sat_h(k,m)                    = saturation_moisture
3426         fc_h(k,m)                         = field_capacity
3427         wilt_h(k,m)                       = wilting_point
3428         swc_res_h(k,m)                    = residual_moisture
3429      ENDDO
3430
3431    ENDDO
3432
3433    surf_usm_h%ddz_wall        = 1.0_wp / surf_usm_h%dz_wall
3434    surf_usm_h%ddz_wall_stag   = 1.0_wp / surf_usm_h%dz_wall_stag
3435    surf_usm_h%ddz_window      = 1.0_wp / surf_usm_h%dz_window
3436    surf_usm_h%ddz_window_stag = 1.0_wp / surf_usm_h%dz_window_stag
3437    surf_usm_h%ddz_green       = 1.0_wp / surf_usm_h%dz_green
3438    surf_usm_h%ddz_green_stag  = 1.0_wp / surf_usm_h%dz_green_stag
3439!
3440!-- For vertical surfaces
3441    DO  l = 0, 3
3442       DO  m = 1, surf_usm_v(l)%ns
3443          surf_usm_v(l)%dz_wall(nzb_wall,m) = surf_usm_v(l)%zw(nzb_wall,m)
3444          DO  k = nzb_wall+1, nzt_wall
3445             surf_usm_v(l)%dz_wall(k,m) = surf_usm_v(l)%zw(k,m) - surf_usm_v(l)%zw(k-1,m)
3446          ENDDO
3447          surf_usm_v(l)%dz_window(nzb_wall,m) = surf_usm_v(l)%zw_window(nzb_wall,m)
3448          DO  k = nzb_wall+1, nzt_wall
3449             surf_usm_v(l)%dz_window(k,m) = surf_usm_v(l)%zw_window(k,m) -                         &
3450                                            surf_usm_v(l)%zw_window(k-1,m)
3451          ENDDO
3452          surf_usm_v(l)%dz_green(nzb_wall,m) = surf_usm_v(l)%zw_green(nzb_wall,m)
3453          DO  k = nzb_wall+1, nzt_wall
3454             surf_usm_v(l)%dz_green(k,m) = surf_usm_v(l)%zw_green(k,m) -                           &
3455                                           surf_usm_v(l)%zw_green(k-1,m)
3456          ENDDO
3457
3458          surf_usm_v(l)%dz_wall(nzt_wall+1,m) = surf_usm_v(l)%dz_wall(nzt_wall,m)
3459
3460          DO  k = nzb_wall, nzt_wall-1
3461             surf_usm_v(l)%dz_wall_stag(k,m) = 0.5 * ( surf_usm_v(l)%dz_wall(k+1,m) +              &
3462                                                       surf_usm_v(l)%dz_wall(k,m) )
3463          ENDDO
3464          surf_usm_v(l)%dz_wall_stag(nzt_wall,m) = surf_usm_v(l)%dz_wall(nzt_wall,m)
3465          surf_usm_v(l)%dz_window(nzt_wall+1,m)  = surf_usm_v(l)%dz_window(nzt_wall,m)
3466
3467          DO  k = nzb_wall, nzt_wall-1
3468             surf_usm_v(l)%dz_window_stag(k,m) = 0.5 * ( surf_usm_v(l)%dz_window(k+1,m) +          &
3469                                                         surf_usm_v(l)%dz_window(k,m) )
3470          ENDDO
3471          surf_usm_v(l)%dz_window_stag(nzt_wall,m) = surf_usm_v(l)%dz_window(nzt_wall,m)
3472          surf_usm_v(l)%dz_green(nzt_wall+1,m)     = surf_usm_v(l)%dz_green(nzt_wall,m)
3473
3474          DO  k = nzb_wall, nzt_wall-1
3475             surf_usm_v(l)%dz_green_stag(k,m) = 0.5 * ( surf_usm_v(l)%dz_green(k+1,m) +            &
3476                                                        surf_usm_v(l)%dz_green(k,m) )
3477          ENDDO
3478          surf_usm_v(l)%dz_green_stag(nzt_wall,m) = surf_usm_v(l)%dz_green(nzt_wall,m)
3479       ENDDO
3480       surf_usm_v(l)%ddz_wall        = 1.0_wp / surf_usm_v(l)%dz_wall
3481       surf_usm_v(l)%ddz_wall_stag   = 1.0_wp / surf_usm_v(l)%dz_wall_stag
3482       surf_usm_v(l)%ddz_window      = 1.0_wp / surf_usm_v(l)%dz_window
3483       surf_usm_v(l)%ddz_window_stag = 1.0_wp / surf_usm_v(l)%dz_window_stag
3484       surf_usm_v(l)%ddz_green       = 1.0_wp / surf_usm_v(l)%dz_green
3485       surf_usm_v(l)%ddz_green_stag  = 1.0_wp / surf_usm_v(l)%dz_green_stag
3486    ENDDO
3487
3488
3489    IF ( debug_output )  CALL debug_message( 'usm_init_material_model', 'end' )
3490
3491 END SUBROUTINE usm_init_material_model
3492
3493
3494!--------------------------------------------------------------------------------------------------!
3495! Description:
3496! ------------
3497!> Initialization of the urban surface model
3498!--------------------------------------------------------------------------------------------------!
3499 SUBROUTINE usm_init
3500
3501    USE arrays_3d,                                                                                 &
3502        ONLY:  zw
3503
3504    USE netcdf_data_input_mod,                                                                     &
3505        ONLY:  building_pars_f,                                                                    &
3506               building_surface_pars_f,                                                            &
3507               building_type_f,                                                                    &
3508               terrain_height_f
3509
3510    IMPLICIT NONE
3511
3512    INTEGER(iwp) ::  i                 !< loop index x-dirction
3513    INTEGER(iwp) ::  ind_alb_green     !< index in input list for green albedo
3514    INTEGER(iwp) ::  ind_alb_wall      !< index in input list for wall albedo
3515    INTEGER(iwp) ::  ind_alb_win       !< index in input list for window albedo
3516    INTEGER(iwp) ::  ind_emis_wall     !< index in input list for wall emissivity
3517    INTEGER(iwp) ::  ind_emis_green    !< index in input list for green emissivity
3518    INTEGER(iwp) ::  ind_emis_win      !< index in input list for window emissivity
3519    INTEGER(iwp) ::  ind_green_frac_w  !< index in input list for green fraction on wall
3520    INTEGER(iwp) ::  ind_green_frac_r  !< index in input list for green fraction on roof
3521    INTEGER(iwp) ::  ind_hc1           !< index in input list for heat capacity at first wall layer
3522    INTEGER(iwp) ::  ind_hc1_win       !< index in input list for heat capacity at first window layer
3523    INTEGER(iwp) ::  ind_hc2           !< index in input list for heat capacity at second wall layer
3524    INTEGER(iwp) ::  ind_hc2_win       !< index in input list for heat capacity at second window layer
3525    INTEGER(iwp) ::  ind_hc3           !< index in input list for heat capacity at third wall layer
3526    INTEGER(iwp) ::  ind_hc3_win       !< index in input list for heat capacity at third window layer
3527    INTEGER(iwp) ::  ind_lai_r         !< index in input list for LAI on roof
3528    INTEGER(iwp) ::  ind_lai_w         !< index in input list for LAI on wall
3529    INTEGER(iwp) ::  ind_tc1           !< index in input list for thermal conductivity at first wall layer
3530    INTEGER(iwp) ::  ind_tc1_win       !< index in input list for thermal conductivity at first window layer
3531    INTEGER(iwp) ::  ind_tc2           !< index in input list for thermal conductivity at second wall layer
3532    INTEGER(iwp) ::  ind_tc2_win       !< index in input list for thermal conductivity at second window layer
3533    INTEGER(iwp) ::  ind_tc3           !< index in input list for thermal conductivity at third wall layer
3534    INTEGER(iwp) ::  ind_tc3_win       !< index in input list for thermal conductivity at third window layer
3535    INTEGER(iwp) ::  ind_thick_1       !< index in input list for thickness of first wall layer
3536    INTEGER(iwp) ::  ind_thick_1_win   !< index in input list for thickness of first window layer
3537    INTEGER(iwp) ::  ind_thick_2       !< index in input list for thickness of second wall layer
3538    INTEGER(iwp) ::  ind_thick_2_win   !< index in input list for thickness of second window layer
3539    INTEGER(iwp) ::  ind_thick_3       !< index in input list for thickness of third wall layer
3540    INTEGER(iwp) ::  ind_thick_3_win   !< index in input list for thickness of third window layer
3541    INTEGER(iwp) ::  ind_thick_4       !< index in input list for thickness of fourth wall layer
3542    INTEGER(iwp) ::  ind_thick_4_win   !< index in input list for thickness of fourth window layer
3543    INTEGER(iwp) ::  ind_trans         !< index in input list for window transmissivity
3544    INTEGER(iwp) ::  ind_wall_frac     !< index in input list for wall fraction
3545    INTEGER(iwp) ::  ind_win_frac      !< index in input list for window fraction
3546    INTEGER(iwp) ::  ind_z0            !< index in input list for z0
3547    INTEGER(iwp) ::  ind_z0qh          !< index in input list for z0h / z0q
3548    INTEGER(iwp) ::  is                !< loop index input surface element
3549    INTEGER(iwp) ::  j                 !< loop index y-dirction
3550    INTEGER(iwp) ::  k                 !< loop index z-dirction
3551    INTEGER(iwp) ::  l                 !< loop index surface orientation
3552    INTEGER(iwp) ::  m                 !< loop index surface element
3553    INTEGER(iwp) ::  st                !< dummy
3554
3555    LOGICAL      ::  relative_fractions_corrected  !< flag indicating if relative surface fractions require normalization
3556
3557    REAL(wp)     ::  c, tin, twin          !<
3558    REAL(wp)     ::  ground_floor_level_l  !< local height of ground floor level
3559    REAL(wp)     ::  sum_frac              !< sum of the relative material fractions at a surface element
3560    REAL(wp)     ::  z_agl                 !< height of the surface element above terrain
3561
3562    IF ( debug_output )  CALL debug_message( 'usm_init', 'start' )
3563
3564    CALL cpu_log( log_point_s(78), 'usm_init', 'start' )
3565!
3566!-- Surface forcing has to be disabled for LSF in case of enabled urban surface module
3567    IF ( large_scale_forcing )  THEN
3568        lsf_surf = .FALSE.
3569    ENDIF
3570!
3571!-- Flag surface elements belonging to the ground floor level. Therefore, use terrain height array
3572!-- from file, if available. This flag is later used to control initialization of surface attributes.
3573!-- Todo: for the moment disable initialization of building roofs with ground-floor-level properties.
3574    surf_usm_h%ground_level = .FALSE.
3575
3576    DO  l = 0, 3
3577       surf_usm_v(l)%ground_level = .FALSE.
3578       DO  m = 1, surf_usm_v(l)%ns
3579          i = surf_usm_v(l)%i(m) + surf_usm_v(l)%ioff
3580          j = surf_usm_v(l)%j(m) + surf_usm_v(l)%joff
3581          k = surf_usm_v(l)%k(m)
3582!
3583!--       Determine local ground level. Level 1 - default value, level 2 - initialization according
3584!--       to building type, level 3 - initialization from value read from file.
3585          ground_floor_level_l = ground_floor_level
3586
3587          IF ( building_type_f%from_file )  THEN
3588              ground_floor_level_l = building_pars(ind_gflh,building_type_f%var(j,i))
3589          ENDIF
3590
3591          IF ( building_pars_f%from_file )  THEN
3592             IF ( building_pars_f%pars_xy(ind_gflh,j,i) /=  building_pars_f%fill )                 &
3593                ground_floor_level_l = building_pars_f%pars_xy(ind_gflh,j,i)
3594          ENDIF
3595!
3596!--       Determine height of surface element above ground level. Please note, the height of a
3597!--       surface element is determined with respect to its height above ground of the reference
3598!--       grid point in the atmosphere. Therefore, substract the offset values when assessing the
3599!--       terrain height.
3600          IF ( terrain_height_f%from_file )  THEN
3601             z_agl = zw(k) - terrain_height_f%var(j-surf_usm_v(l)%joff, i-surf_usm_v(l)%ioff)
3602          ELSE
3603             z_agl = zw(k)
3604          ENDIF
3605!
3606!--       Set flag for ground level
3607          IF ( z_agl <= ground_floor_level_l ) surf_usm_v(l)%ground_level(m) = .TRUE.
3608
3609       ENDDO
3610    ENDDO
3611!
3612!-- Initialization of resistances.
3613    DO  m = 1, surf_usm_h%ns
3614       surf_usm_h%r_a(m)        = 50.0_wp
3615       surf_usm_h%r_a_green(m)  = 50.0_wp
3616       surf_usm_h%r_a_window(m) = 50.0_wp
3617    ENDDO
3618    DO  l = 0, 3
3619       DO  m = 1, surf_usm_v(l)%ns
3620          surf_usm_v(l)%r_a(m)        = 50.0_wp
3621          surf_usm_v(l)%r_a_green(m)  = 50.0_wp
3622          surf_usm_v(l)%r_a_window(m) = 50.0_wp
3623       ENDDO
3624    ENDDO
3625
3626!
3627!-- Map values onto horizontal elemements
3628    DO  m = 1, surf_usm_h%ns
3629       surf_usm_h%r_canopy(m)     = 200.0_wp !< canopy_resistance
3630       surf_usm_h%r_canopy_min(m) = 200.0_wp !< min_canopy_resistance
3631       surf_usm_h%g_d(m)          = 0.0_wp   !< canopy_resistance_coefficient
3632    ENDDO
3633!
3634!-- Map values onto vertical elements, even though this does not make much sense.
3635    DO  l = 0, 3
3636       DO  m = 1, surf_usm_v(l)%ns
3637          surf_usm_v(l)%r_canopy(m)     = 200.0_wp !< canopy_resistance
3638          surf_usm_v(l)%r_canopy_min(m) = 200.0_wp !< min_canopy_resistance
3639          surf_usm_v(l)%g_d(m)          = 0.0_wp   !< canopy_resistance_coefficient
3640       ENDDO
3641    ENDDO
3642
3643!
3644!--  Initialize urban-type surface attribute. According to initialization in land-surface model,
3645!--  follow a 3-level approach.
3646!--  Level 1 - initialization via default attributes
3647     DO  m = 1, surf_usm_h%ns
3648!
3649!--     Now, all horizontal surfaces are roof surfaces (?)
3650        surf_usm_h%isroof_surf(m)   = .TRUE.
3651        surf_usm_h%surface_types(m) = roof_category         !< default category for root surface
3652!
3653!--     In order to distinguish between ground floor level and above-ground-floor level surfaces,
3654!--     set input indices.
3655
3656        ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,                     &
3657                                  surf_usm_h%ground_level(m) )
3658        ind_lai_r        = MERGE( ind_lai_r_gfl, ind_lai_r_agfl, surf_usm_h%ground_level(m) )
3659        ind_z0           = MERGE( ind_z0_gfl, ind_z0_agfl, surf_usm_h%ground_level(m) )
3660        ind_z0qh         = MERGE( ind_z0qh_gfl, ind_z0qh_agfl, surf_usm_h%ground_level(m) )
3661!
3662!--     Store building type and its name on each surface element
3663        surf_usm_h%building_type(m)      = building_type
3664        surf_usm_h%building_type_name(m) = building_type_name(building_type)
3665!
3666!--     Initialize relatvie wall- (0), green- (1) and window (2) fractions
3667        surf_usm_h%frac(m,ind_veg_wall)  = building_pars(ind_wall_frac_r,building_type)
3668        surf_usm_h%frac(m,ind_pav_green) = building_pars(ind_green_frac_r,building_type)
3669        surf_usm_h%frac(m,ind_wat_win)   = building_pars(ind_win_frac_r,building_type)
3670        surf_usm_h%lai(m)                = building_pars(ind_lai_r,building_type)
3671
3672        surf_usm_h%rho_c_wall(nzb_wall,m)        = building_pars(ind_hc1_wall_r,building_type)
3673        surf_usm_h%rho_c_wall(nzb_wall+1,m)      = building_pars(ind_hc1_wall_r,building_type)
3674        surf_usm_h%rho_c_wall(nzb_wall+2,m)      = building_pars(ind_hc2_wall_r,building_type)
3675        surf_usm_h%rho_c_wall(nzb_wall+3,m)      = building_pars(ind_hc3_wall_r,building_type)
3676        surf_usm_h%lambda_h(nzb_wall,m)          = building_pars(ind_tc1_wall_r,building_type)
3677        surf_usm_h%lambda_h(nzb_wall+1,m)        = building_pars(ind_tc1_wall_r,building_type)
3678        surf_usm_h%lambda_h(nzb_wall+2,m)        = building_pars(ind_tc2_wall_r,building_type)
3679        surf_usm_h%lambda_h(nzb_wall+3,m)        = building_pars(ind_tc3_wall_r,building_type)
3680        surf_usm_h%rho_c_green(nzb_wall,m)       = rho_c_soil !building_pars(ind_hc1_wall_r,building_type)
3681        surf_usm_h%rho_c_green(nzb_wall+1,m)     = rho_c_soil !building_pars(ind_hc1_wall_r,building_type)
3682        surf_usm_h%rho_c_green(nzb_wall+2,m)     = rho_c_soil !building_pars(ind_hc2_wall_r,building_type)
3683        surf_usm_h%rho_c_green(nzb_wall+3,m)     = rho_c_soil !building_pars(ind_hc3_wall_r,building_type)
3684        surf_usm_h%lambda_h_green(nzb_wall,m)    = lambda_h_green_sm !building_pars(ind_tc1_wall_r,building_type)
3685        surf_usm_h%lambda_h_green(nzb_wall+1,m)  = lambda_h_green_sm !building_pars(ind_tc1_wall_r,building_type)
3686        surf_usm_h%lambda_h_green(nzb_wall+2,m)  = lambda_h_green_sm !building_pars(ind_tc2_wall_r,building_type)
3687        surf_usm_h%lambda_h_green(nzb_wall+3,m)  = lambda_h_green_sm !building_pars(ind_tc3_wall_r,building_type)
3688        surf_usm_h%rho_c_window(nzb_wall,m)      = building_pars(ind_hc1_win_r,building_type)
3689        surf_usm_h%rho_c_window(nzb_wall+1,m)    = building_pars(ind_hc1_win_r,building_type)
3690        surf_usm_h%rho_c_window(nzb_wall+2,m)    = building_pars(ind_hc2_win_r,building_type)
3691        surf_usm_h%rho_c_window(nzb_wall+3,m)    = building_pars(ind_hc3_win_r,building_type)
3692        surf_usm_h%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win_r,building_type)
3693        surf_usm_h%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win_r,building_type)
3694        surf_usm_h%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win_r,building_type)
3695        surf_usm_h%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win_r,building_type)
3696
3697        surf_usm_h%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,building_type)
3698        surf_usm_h%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,building_type)
3699!
3700!--     Emissivity of wall-, green- and window fraction
3701        surf_usm_h%emissivity(m,ind_veg_wall)  = building_pars(ind_emis_wall_r,building_type)
3702        surf_usm_h%emissivity(m,ind_pav_green) = building_pars(ind_emis_green_r,building_type)
3703        surf_usm_h%emissivity(m,ind_wat_win)   = building_pars(ind_emis_win_r,building_type)
3704
3705        surf_usm_h%transmissivity(m)           = building_pars(ind_trans_r,building_type)
3706
3707        surf_usm_h%z0(m)                       = building_pars(ind_z0,building_type)
3708        surf_usm_h%z0h(m)                      = building_pars(ind_z0qh,building_type)
3709        surf_usm_h%z0q(m)                      = building_pars(ind_z0qh,building_type)
3710!
3711!--     Albedo type for wall fraction, green fraction, window fraction
3712        surf_usm_h%albedo_type(m,ind_veg_wall)  = INT( building_pars(ind_alb_wall_r,building_type) )
3713        surf_usm_h%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green_r,building_type) )
3714        surf_usm_h%albedo_type(m,ind_wat_win)   = INT( building_pars(ind_alb_win_r,building_type) )
3715
3716        surf_usm_h%zw(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,building_type)
3717        surf_usm_h%zw(nzb_wall+1,m)       = building_pars(ind_thick_2_wall_r,building_type)
3718        surf_usm_h%zw(nzb_wall+2,m)       = building_pars(ind_thick_3_wall_r,building_type)
3719        surf_usm_h%zw(nzb_wall+3,m)       = building_pars(ind_thick_4_wall_r,building_type)
3720
3721        surf_usm_h%zw_green(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,building_type)
3722        surf_usm_h%zw_green(nzb_wall+1,m)       = building_pars(ind_thick_2_wall_r,building_type)
3723        surf_usm_h%zw_green(nzb_wall+2,m)       = building_pars(ind_thick_3_wall_r,building_type)
3724        surf_usm_h%zw_green(nzb_wall+3,m)       = building_pars(ind_thick_4_wall_r,building_type)
3725
3726        surf_usm_h%zw_window(nzb_wall,m)         = building_pars(ind_thick_1_win_r,building_type)
3727        surf_usm_h%zw_window(nzb_wall+1,m)       = building_pars(ind_thick_2_win_r,building_type)
3728        surf_usm_h%zw_window(nzb_wall+2,m)       = building_pars(ind_thick_3_win_r,building_type)
3729        surf_usm_h%zw_window(nzb_wall+3,m)       = building_pars(ind_thick_4_win_r,building_type)
3730
3731        surf_usm_h%green_type_roof(m)     = building_pars(ind_green_type_roof,building_type)
3732
3733     ENDDO
3734
3735     DO  l = 0, 3
3736        DO  m = 1, surf_usm_v(l)%ns
3737
3738           surf_usm_v(l)%surface_types(m) = wall_category     !< Default category for root surface
3739!
3740!--        In order to distinguish between ground floor level and above-ground-floor level surfaces,
3741!--        set input indices.
3742           ind_alb_green    = MERGE( ind_alb_green_gfl,    ind_alb_green_agfl,                     &
3743                                     surf_usm_v(l)%ground_level(m) )
3744           ind_alb_wall     = MERGE( ind_alb_wall_gfl,     ind_alb_wall_agfl,                      &
3745                                     surf_usm_v(l)%ground_level(m) )
3746           ind_alb_win      = MERGE( ind_alb_win_gfl,      ind_alb_win_agfl,                       &
3747                                     surf_usm_v(l)%ground_level(m) )
3748           ind_wall_frac    = MERGE( ind_wall_frac_gfl,    ind_wall_frac_agfl,                     &
3749                                     surf_usm_v(l)%ground_level(m) )
3750           ind_win_frac     = MERGE( ind_win_frac_gfl,     ind_win_frac_agfl,                      &
3751                                     surf_usm_v(l)%ground_level(m) )
3752           ind_green_frac_w = MERGE( ind_green_frac_w_gfl, ind_green_frac_w_agfl,                  &
3753                                     surf_usm_v(l)%ground_level(m) )
3754           ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,                  &
3755                                     surf_usm_v(l)%ground_level(m) )
3756           ind_lai_r        = MERGE( ind_lai_r_gfl,        ind_lai_r_agfl,                         &
3757                                     surf_usm_v(l)%ground_level(m) )
3758           ind_lai_w        = MERGE( ind_lai_w_gfl,        ind_lai_w_agfl,                         &
3759                                     surf_usm_v(l)%ground_level(m) )
3760           ind_hc1          = MERGE( ind_hc1_gfl,          ind_hc1_agfl,                           &
3761                                     surf_usm_v(l)%ground_level(m) )
3762           ind_hc1_win      = MERGE( ind_hc1_win_gfl,      ind_hc1_win_agfl,                       &
3763                                     surf_usm_v(l)%ground_level(m) )
3764           ind_hc2          = MERGE( ind_hc2_gfl,          ind_hc2_agfl,                           &
3765                                     surf_usm_v(l)%ground_level(m) )
3766           ind_hc2_win      = MERGE( ind_hc2_win_gfl,      ind_hc2_win_agfl,                       &
3767                                     surf_usm_v(l)%ground_level(m) )
3768           ind_hc3          = MERGE( ind_hc3_gfl,          ind_hc3_agfl,                           &
3769                                     surf_usm_v(l)%ground_level(m) )
3770           ind_hc3_win      = MERGE( ind_hc3_win_gfl,      ind_hc3_win_agfl,                       &
3771                                     surf_usm_v(l)%ground_level(m) )
3772           ind_tc1          = MERGE( ind_tc1_gfl,          ind_tc1_agfl,                           &
3773                                     surf_usm_v(l)%ground_level(m) )
3774           ind_tc1_win      = MERGE( ind_tc1_win_gfl,      ind_tc1_win_agfl,                       &
3775                                     surf_usm_v(l)%ground_level(m) )
3776           ind_tc2          = MERGE( ind_tc2_gfl,          ind_tc2_agfl,                           &
3777                                     surf_usm_v(l)%ground_level(m) )
3778           ind_tc2_win      = MERGE( ind_tc2_win_gfl,      ind_tc2_win_agfl,                       &
3779                                     surf_usm_v(l)%ground_level(m) )
3780           ind_tc3          = MERGE( ind_tc3_gfl,          ind_tc3_agfl,                           &
3781                                     surf_usm_v(l)%ground_level(m) )
3782           ind_tc3_win      = MERGE( ind_tc3_win_gfl,      ind_tc3_win_agfl,                       &
3783                                     surf_usm_v(l)%ground_level(m) )
3784           ind_thick_1      = MERGE( ind_thick_1_gfl,      ind_thick_1_agfl,                       &
3785                                     surf_usm_v(l)%ground_level(m) )
3786           ind_thick_1_win  = MERGE( ind_thick_1_win_gfl,  ind_thick_1_win_agfl,                   &
3787                                     surf_usm_v(l)%ground_level(m) )
3788           ind_thick_2      = MERGE( ind_thick_2_gfl,      ind_thick_2_agfl,                       &
3789                                     surf_usm_v(l)%ground_level(m) )
3790           ind_thick_2_win  = MERGE( ind_thick_2_win_gfl,  ind_thick_2_win_agfl,                   &
3791                                     surf_usm_v(l)%ground_level(m) )
3792           ind_thick_3      = MERGE( ind_thick_3_gfl,      ind_thick_3_agfl,                       &
3793                                     surf_usm_v(l)%ground_level(m) )
3794           ind_thick_3_win  = MERGE( ind_thick_3_win_gfl,  ind_thick_3_win_agfl,                   &
3795                                     surf_usm_v(l)%ground_level(m) )
3796           ind_thick_4      = MERGE( ind_thick_4_gfl,      ind_thick_4_agfl,                       &
3797                                     surf_usm_v(l)%ground_level(m) )
3798           ind_thick_4_win  = MERGE( ind_thick_4_win_gfl,  ind_thick_4_win_agfl,                   &
3799                                     surf_usm_v(l)%ground_level(m) )
3800           ind_emis_wall    = MERGE( ind_emis_wall_gfl,    ind_emis_wall_agfl,                     &
3801                                     surf_usm_v(l)%ground_level(m) )
3802           ind_emis_green   = MERGE( ind_emis_green_gfl,   ind_emis_green_agfl,                    &
3803                                     surf_usm_v(l)%ground_level(m) )
3804           ind_emis_win     = MERGE( ind_emis_win_gfl,     ind_emis_win_agfl,                      &
3805                                     surf_usm_v(l)%ground_level(m) )
3806           ind_trans        = MERGE( ind_trans_gfl,       ind_trans_agfl,                          &
3807                                     surf_usm_v(l)%ground_level(m) )
3808           ind_z0           = MERGE( ind_z0_gfl,           ind_z0_agfl,                            &
3809                                     surf_usm_v(l)%ground_level(m) )
3810           ind_z0qh         = MERGE( ind_z0qh_gfl,         ind_z0qh_agfl,                          &
3811                                     surf_usm_v(l)%ground_level(m) )
3812!
3813!--        Store building type and its name on each surface element
3814           surf_usm_v(l)%building_type(m)      = building_type
3815           surf_usm_v(l)%building_type_name(m) = building_type_name(building_type)
3816!
3817!--        Initialize relatvie wall- (0), green- (1) and window (2) fractions
3818           surf_usm_v(l)%frac(m,ind_veg_wall)   = building_pars(ind_wall_frac,building_type)
3819           surf_usm_v(l)%frac(m,ind_pav_green)  = building_pars(ind_green_frac_w,building_type)
3820           surf_usm_v(l)%frac(m,ind_wat_win)    = building_pars(ind_win_frac,building_type)
3821           surf_usm_v(l)%lai(m)                 = building_pars(ind_lai_w,building_type)
3822
3823           surf_usm_v(l)%rho_c_wall(nzb_wall,m)   = building_pars(ind_hc1,building_type)
3824           surf_usm_v(l)%rho_c_wall(nzb_wall+1,m) = building_pars(ind_hc1,building_type)
3825           surf_usm_v(l)%rho_c_wall(nzb_wall+2,m) = building_pars(ind_hc2,building_type)
3826           surf_usm_v(l)%rho_c_wall(nzb_wall+3,m) = building_pars(ind_hc3,building_type)
3827
3828           surf_usm_v(l)%rho_c_green(nzb_wall,m)   = rho_c_soil !building_pars(ind_hc1,building_type)
3829           surf_usm_v(l)%rho_c_green(nzb_wall+1,m) = rho_c_soil !building_pars(ind_hc1,building_type)
3830           surf_usm_v(l)%rho_c_green(nzb_wall+2,m) = rho_c_soil !building_pars(ind_hc2,building_type)
3831           surf_usm_v(l)%rho_c_green(nzb_wall+3,m) = rho_c_soil !building_pars(ind_hc3,building_type)
3832
3833           surf_usm_v(l)%rho_c_window(nzb_wall,m)   = building_pars(ind_hc1_win,building_type)
3834           surf_usm_v(l)%rho_c_window(nzb_wall+1,m) = building_pars(ind_hc1_win,building_type)
3835           surf_usm_v(l)%rho_c_window(nzb_wall+2,m) = building_pars(ind_hc2_win,building_type)
3836           surf_usm_v(l)%rho_c_window(nzb_wall+3,m) = building_pars(ind_hc3_win,building_type)
3837
3838           surf_usm_v(l)%lambda_h(nzb_wall,m)   = building_pars(ind_tc1,building_type)
3839           surf_usm_v(l)%lambda_h(nzb_wall+1,m) = building_pars(ind_tc1,building_type)
3840           surf_usm_v(l)%lambda_h(nzb_wall+2,m) = building_pars(ind_tc2,building_type)
3841           surf_usm_v(l)%lambda_h(nzb_wall+3,m) = building_pars(ind_tc3,building_type)
3842
3843           surf_usm_v(l)%lambda_h_green(nzb_wall,m)   = lambda_h_green_sm !building_pars(ind_tc1,building_type)
3844           surf_usm_v(l)%lambda_h_green(nzb_wall+1,m) = lambda_h_green_sm !building_pars(ind_tc1,building_type)
3845           surf_usm_v(l)%lambda_h_green(nzb_wall+2,m) = lambda_h_green_sm !building_pars(ind_tc2,building_type)
3846           surf_usm_v(l)%lambda_h_green(nzb_wall+3,m) = lambda_h_green_sm !building_pars(ind_tc3,building_type)
3847
3848           surf_usm_v(l)%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win,building_type)
3849           surf_usm_v(l)%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win,building_type)
3850           surf_usm_v(l)%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win,building_type)
3851           surf_usm_v(l)%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win,building_type)
3852
3853           surf_usm_v(l)%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,building_type)
3854           surf_usm_v(l)%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,building_type)
3855!
3856!--        Emissivity of wall-, green- and window fraction
3857           surf_usm_v(l)%emissivity(m,ind_veg_wall)  = building_pars(ind_emis_wall,building_type)
3858           surf_usm_v(l)%emissivity(m,ind_pav_green) = building_pars(ind_emis_green,building_type)
3859           surf_usm_v(l)%emissivity(m,ind_wat_win)   = building_pars(ind_emis_win,building_type)
3860
3861           surf_usm_v(l)%transmissivity(m)      = building_pars(ind_trans,building_type)
3862
3863           surf_usm_v(l)%z0(m)                  = building_pars(ind_z0,building_type)
3864           surf_usm_v(l)%z0h(m)                 = building_pars(ind_z0qh,building_type)
3865           surf_usm_v(l)%z0q(m)                 = building_pars(ind_z0qh,building_type)
3866
3867           surf_usm_v(l)%albedo_type(m,ind_veg_wall)  = INT( building_pars(ind_alb_wall,building_type) )
3868           surf_usm_v(l)%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green,building_type) )
3869           surf_usm_v(l)%albedo_type(m,ind_wat_win)   = INT( building_pars(ind_alb_win,building_type) )
3870
3871           surf_usm_v(l)%zw(nzb_wall,m)         = building_pars(ind_thick_1,building_type)
3872           surf_usm_v(l)%zw(nzb_wall+1,m)       = building_pars(ind_thick_2,building_type)
3873           surf_usm_v(l)%zw(nzb_wall+2,m)       = building_pars(ind_thick_3,building_type)
3874           surf_usm_v(l)%zw(nzb_wall+3,m)       = building_pars(ind_thick_4,building_type)
3875
3876           surf_usm_v(l)%zw_green(nzb_wall,m)         = building_pars(ind_thick_1,building_type)
3877           surf_usm_v(l)%zw_green(nzb_wall+1,m)       = building_pars(ind_thick_2,building_type)
3878           surf_usm_v(l)%zw_green(nzb_wall+2,m)       = building_pars(ind_thick_3,building_type)
3879           surf_usm_v(l)%zw_green(nzb_wall+3,m)       = building_pars(ind_thick_4,building_type)
3880
3881           surf_usm_v(l)%zw_window(nzb_wall,m)        = building_pars(ind_thick_1_win,building_type)
3882           surf_usm_v(l)%zw_window(nzb_wall+1,m)      = building_pars(ind_thick_2_win,building_type)
3883           surf_usm_v(l)%zw_window(nzb_wall+2,m)      = building_pars(ind_thick_3_win,building_type)
3884           surf_usm_v(l)%zw_window(nzb_wall+3,m)      = building_pars(ind_thick_4_win,building_type)
3885
3886        ENDDO
3887     ENDDO
3888!
3889!--  Level 2 - initialization via building type read from file
3890     IF ( building_type_f%from_file )  THEN
3891        DO  m = 1, surf_usm_h%ns
3892           i = surf_usm_h%i(m)
3893           j = surf_usm_h%j(m)
3894!
3895!--        For the moment, limit building type to 6 (to overcome errors in input file).
3896           st = building_type_f%var(j,i)
3897           IF ( st /= building_type_f%fill )  THEN
3898
3899!
3900!--           In order to distinguish between ground floor level and above-ground-floor level
3901!--           surfaces, set input indices.
3902
3903              ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,               &
3904                                        surf_usm_h%ground_level(m) )
3905              ind_lai_r        = MERGE( ind_lai_r_gfl, ind_lai_r_agfl, surf_usm_h%ground_level(m) )
3906              ind_z0           = MERGE( ind_z0_gfl, ind_z0_agfl, surf_usm_h%ground_level(m) )
3907              ind_z0qh         = MERGE( ind_z0qh_gfl, ind_z0qh_agfl, surf_usm_h%ground_level(m) )
3908!
3909!--           Store building type and its name on each surface element
3910              surf_usm_h%building_type(m)      = st
3911              surf_usm_h%building_type_name(m) = building_type_name(st)
3912!
3913!--           Initialize relatvie wall- (0), green- (1) and window (2) fractions
3914              surf_usm_h%frac(m,ind_veg_wall)  = building_pars(ind_wall_frac_r,st)
3915              surf_usm_h%frac(m,ind_pav_green) = building_pars(ind_green_frac_r,st)
3916              surf_usm_h%frac(m,ind_wat_win)   = building_pars(ind_win_frac_r,st)
3917              surf_usm_h%lai(m)                = building_pars(ind_lai_r,st)
3918
3919              surf_usm_h%rho_c_wall(nzb_wall,m)   = building_pars(ind_hc1_wall_r,st)
3920              surf_usm_h%rho_c_wall(nzb_wall+1,m) = building_pars(ind_hc1_wall_r,st)
3921              surf_usm_h%rho_c_wall(nzb_wall+2,m) = building_pars(ind_hc2_wall_r,st)
3922              surf_usm_h%rho_c_wall(nzb_wall+3,m) = building_pars(ind_hc3_wall_r,st)
3923              surf_usm_h%lambda_h(nzb_wall,m)     = building_pars(ind_tc1_wall_r,st)
3924              surf_usm_h%lambda_h(nzb_wall+1,m)   = building_pars(ind_tc1_wall_r,st)
3925              surf_usm_h%lambda_h(nzb_wall+2,m)   = building_pars(ind_tc2_wall_r,st)
3926              surf_usm_h%lambda_h(nzb_wall+3,m)   = building_pars(ind_tc3_wall_r,st)
3927
3928              surf_usm_h%rho_c_green(nzb_wall,m)      = rho_c_soil !building_pars(ind_hc1_wall_r,st)
3929              surf_usm_h%rho_c_green(nzb_wall+1,m)    = rho_c_soil !building_pars(ind_hc1_wall_r,st)
3930              surf_usm_h%rho_c_green(nzb_wall+2,m)    = rho_c_soil !building_pars(ind_hc2_wall_r,st)
3931              surf_usm_h%rho_c_green(nzb_wall+3,m)    = rho_c_soil !building_pars(ind_hc3_wall_r,st)
3932              surf_usm_h%lambda_h_green(nzb_wall,m)   = lambda_h_green_sm !building_pars(ind_tc1_wall_r,st)
3933              surf_usm_h%lambda_h_green(nzb_wall+1,m) = lambda_h_green_sm !building_pars(ind_tc1_wall_r,st)
3934              surf_usm_h%lambda_h_green(nzb_wall+2,m) = lambda_h_green_sm !building_pars(ind_tc2_wall_r,st)
3935              surf_usm_h%lambda_h_green(nzb_wall+3,m) = lambda_h_green_sm !building_pars(ind_tc3_wall_r,st)
3936
3937              surf_usm_h%rho_c_window(nzb_wall,m)      = building_pars(ind_hc1_win_r,st)
3938              surf_usm_h%rho_c_window(nzb_wall+1,m)    = building_pars(ind_hc1_win_r,st)
3939              surf_usm_h%rho_c_window(nzb_wall+2,m)    = building_pars(ind_hc2_win_r,st)
3940              surf_usm_h%rho_c_window(nzb_wall+3,m)    = building_pars(ind_hc3_win_r,st)
3941              surf_usm_h%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win_r,st)
3942              surf_usm_h%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win_r,st)
3943              surf_usm_h%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win_r,st)
3944              surf_usm_h%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win_r,st)
3945
3946              surf_usm_h%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,st)
3947              surf_usm_h%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,st)
3948!
3949!--           Emissivity of wall-, green- and window fraction
3950              surf_usm_h%emissivity(m,ind_veg_wall)  = building_pars(ind_emis_wall_r,st)
3951              surf_usm_h%emissivity(m,ind_pav_green) = building_pars(ind_emis_green_r,st)
3952              surf_usm_h%emissivity(m,ind_wat_win)   = building_pars(ind_emis_win_r,st)
3953
3954              surf_usm_h%transmissivity(m)      = building_pars(ind_trans_r,st)
3955
3956              surf_usm_h%z0(m)                  = building_pars(ind_z0,st)
3957              surf_usm_h%z0h(m)                 = building_pars(ind_z0qh,st)
3958              surf_usm_h%z0q(m)                 = building_pars(ind_z0qh,st)
3959!
3960!--           Albedo type for wall fraction, green fraction, window fraction
3961              surf_usm_h%albedo_type(m,ind_veg_wall)  = INT( building_pars(ind_alb_wall_r,st) )
3962              surf_usm_h%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green_r,st) )
3963              surf_usm_h%albedo_type(m,ind_wat_win)   = INT( building_pars(ind_alb_win_r,st) )
3964
3965              surf_usm_h%zw(nzb_wall,m)   = building_pars(ind_thick_1_wall_r,st)
3966              surf_usm_h%zw(nzb_wall+1,m) = building_pars(ind_thick_2_wall_r,st)
3967              surf_usm_h%zw(nzb_wall+2,m) = building_pars(ind_thick_3_wall_r,st)
3968              surf_usm_h%zw(nzb_wall+3,m) = building_pars(ind_thick_4_wall_r,st)
3969
3970              surf_usm_h%zw_green(nzb_wall,m)   = building_pars(ind_thick_1_wall_r,st)
3971              surf_usm_h%zw_green(nzb_wall+1,m) = building_pars(ind_thick_2_wall_r,st)
3972              surf_usm_h%zw_green(nzb_wall+2,m) = building_pars(ind_thick_3_wall_r,st)
3973              surf_usm_h%zw_green(nzb_wall+3,m) = building_pars(ind_thick_4_wall_r,st)
3974
3975              surf_usm_h%zw_window(nzb_wall,m)   = building_pars(ind_thick_1_win_r,st)
3976              surf_usm_h%zw_window(nzb_wall+1,m) = building_pars(ind_thick_2_win_r,st)
3977              surf_usm_h%zw_window(nzb_wall+2,m) = building_pars(ind_thick_3_win_r,st)
3978              surf_usm_h%zw_window(nzb_wall+3,m) = building_pars(ind_thick_4_win_r,st)
3979
3980              surf_usm_h%green_type_roof(m) = building_pars(ind_green_type_roof,st)
3981
3982           ENDIF
3983        ENDDO
3984
3985        DO  l = 0, 3
3986           DO  m = 1, surf_usm_v(l)%ns
3987              i = surf_usm_v(l)%i(m) + surf_usm_v(l)%ioff
3988              j = surf_usm_v(l)%j(m) + surf_usm_v(l)%joff
3989!
3990!--           For the moment, limit building type to 6 (to overcome errors in input file).
3991
3992              st = building_type_f%var(j,i)
3993              IF ( st /= building_type_f%fill )  THEN
3994
3995!
3996!--              In order to distinguish between ground floor level and above-ground-floor level
3997!--              surfaces, set input indices.
3998                 ind_alb_green    = MERGE( ind_alb_green_gfl,    ind_alb_green_agfl,               &
3999                                           surf_usm_v(l)%ground_level(m) )
4000                 ind_alb_wall     = MERGE( ind_alb_wall_gfl,     ind_alb_wall_agfl,                &
4001                                           surf_usm_v(l)%ground_level(m) )
4002                 ind_alb_win      = MERGE( ind_alb_win_gfl,      ind_alb_win_agfl,                 &
4003                                           surf_usm_v(l)%ground_level(m) )
4004                 ind_wall_frac    = MERGE( ind_wall_frac_gfl,    ind_wall_frac_agfl,               &
4005                                           surf_usm_v(l)%ground_level(m) )
4006                 ind_win_frac     = MERGE( ind_win_frac_gfl,     ind_win_frac_agfl,                &
4007                                           surf_usm_v(l)%ground_level(m) )
4008                 ind_green_frac_w = MERGE( ind_green_frac_w_gfl, ind_green_frac_w_agfl,            &
4009                                           surf_usm_v(l)%ground_level(m) )
4010                 ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,            &
4011                                           surf_usm_v(l)%ground_level(m) )
4012                 ind_lai_r        = MERGE( ind_lai_r_gfl,        ind_lai_r_agfl,                   &
4013                                           surf_usm_v(l)%ground_level(m) )
4014                 ind_lai_w        = MERGE( ind_lai_w_gfl,        ind_lai_w_agfl,                   &
4015                                           surf_usm_v(l)%ground_level(m) )
4016                 ind_hc1          = MERGE( ind_hc1_gfl,          ind_hc1_agfl,                     &
4017                                           surf_usm_v(l)%ground_level(m) )
4018                 ind_hc1_win      = MERGE( ind_hc1_win_gfl,      ind_hc1_win_agfl,                 &
4019                                           surf_usm_v(l)%ground_level(m) )
4020                 ind_hc2          = MERGE( ind_hc2_gfl,          ind_hc2_agfl,                     &
4021                                           surf_usm_v(l)%ground_level(m) )
4022                 ind_hc2_win      = MERGE( ind_hc2_win_gfl,      ind_hc2_win_agfl,                 &
4023                                           surf_usm_v(l)%ground_level(m) )
4024                 ind_hc3          = MERGE( ind_hc3_gfl,          ind_hc3_agfl,                     &
4025                                           surf_usm_v(l)%ground_level(m) )
4026                 ind_hc3_win      = MERGE( ind_hc3_win_gfl,      ind_hc3_win_agfl,                 &
4027                                           surf_usm_v(l)%ground_level(m) )
4028                 ind_tc1          = MERGE( ind_tc1_gfl,          ind_tc1_agfl,                     &
4029                                           surf_usm_v(l)%ground_level(m) )
4030                 ind_tc1_win      = MERGE( ind_tc1_win_gfl,      ind_tc1_win_agfl,                 &
4031                                           surf_usm_v(l)%ground_level(m) )
4032                 ind_tc2          = MERGE( ind_tc2_gfl,          ind_tc2_agfl,                     &
4033                                           surf_usm_v(l)%ground_level(m) )
4034                 ind_tc2_win      = MERGE( ind_tc2_win_gfl,      ind_tc2_win_agfl,                 &
4035                                           surf_usm_v(l)%ground_level(m) )
4036                 ind_tc3          = MERGE( ind_tc3_gfl,          ind_tc3_agfl,                     &
4037                                           surf_usm_v(l)%ground_level(m) )
4038                 ind_tc3_win      = MERGE( ind_tc3_win_gfl,      ind_tc3_win_agfl,                 &
4039                                           surf_usm_v(l)%ground_level(m) )
4040                 ind_thick_1      = MERGE( ind_thick_1_gfl,      ind_thick_1_agfl,                 &
4041                                           surf_usm_v(l)%ground_level(m) )
4042                 ind_thick_1_win  = MERGE( ind_thick_1_win_gfl,  ind_thick_1_win_agfl,             &
4043                                           surf_usm_v(l)%ground_level(m) )
4044                 ind_thick_2      = MERGE( ind_thick_2_gfl,      ind_thick_2_agfl,                 &
4045                                           surf_usm_v(l)%ground_level(m) )
4046                 ind_thick_2_win  = MERGE( ind_thick_2_win_gfl,  ind_thick_2_win_agfl,             &
4047                                           surf_usm_v(l)%ground_level(m) )
4048                 ind_thick_3      = MERGE( ind_thick_3_gfl,      ind_thick_3_agfl,                 &
4049                                           surf_usm_v(l)%ground_level(m) )
4050                 ind_thick_3_win  = MERGE( ind_thick_3_win_gfl,  ind_thick_3_win_agfl,             &
4051                                           surf_usm_v(l)%ground_level(m) )
4052                 ind_thick_4      = MERGE( ind_thick_4_gfl,      ind_thick_4_agfl,                 &
4053                                           surf_usm_v(l)%ground_level(m) )
4054                 ind_thick_4_win  = MERGE( ind_thick_4_win_gfl,  ind_thick_4_win_agfl,             &
4055                                           surf_usm_v(l)%ground_level(m) )
4056                 ind_emis_wall    = MERGE( ind_emis_wall_gfl,    ind_emis_wall_agfl,               &
4057                                           surf_usm_v(l)%ground_level(m) )
4058                 ind_emis_green   = MERGE( ind_emis_green_gfl,   ind_emis_green_agfl,              &
4059                                           surf_usm_v(l)%ground_level(m) )
4060                 ind_emis_win     = MERGE( ind_emis_win_gfl,     ind_emis_win_agfl,                &
4061                                           surf_usm_v(l)%ground_level(m) )
4062                 ind_trans        = MERGE( ind_trans_gfl,       ind_trans_agfl,                    &
4063                                         surf_usm_v(l)%ground_level(m) )
4064                 ind_z0           = MERGE( ind_z0_gfl,           ind_z0_agfl,                      &
4065                                           surf_usm_v(l)%ground_level(m) )
4066                 ind_z0qh         = MERGE( ind_z0qh_gfl,         ind_z0qh_agfl,                    &
4067                                           surf_usm_v(l)%ground_level(m) )
4068!
4069!--              Store building type and its name on each surface element
4070                 surf_usm_v(l)%building_type(m)      = st
4071                 surf_usm_v(l)%building_type_name(m) = building_type_name(st)
4072!
4073!--              Initialize relatvie wall- (0), green- (1) and window (2) fractions
4074                 surf_usm_v(l)%frac(m,ind_veg_wall)  = building_pars(ind_wall_frac,st)
4075                 surf_usm_v(l)%frac(m,ind_pav_green) = building_pars(ind_green_frac_w,st)
4076                 surf_usm_v(l)%frac(m,ind_wat_win)   = building_pars(ind_win_frac,st)
4077                 surf_usm_v(l)%lai(m)                = building_pars(ind_lai_w,st)
4078
4079                 surf_usm_v(l)%rho_c_wall(nzb_wall,m)   = building_pars(ind_hc1,st)
4080                 surf_usm_v(l)%rho_c_wall(nzb_wall+1,m) = building_pars(ind_hc1,st)
4081                 surf_usm_v(l)%rho_c_wall(nzb_wall+2,m) = building_pars(ind_hc2,st)
4082                 surf_usm_v(l)%rho_c_wall(nzb_wall+3,m) = building_pars(ind_hc3,st)
4083
4084                 surf_usm_v(l)%rho_c_green(nzb_wall,m)   = rho_c_soil !building_pars(ind_hc1,st)
4085                 surf_usm_v(l)%rho_c_green(nzb_wall+1,m) = rho_c_soil !building_pars(ind_hc1,st)
4086                 surf_usm_v(l)%rho_c_green(nzb_wall+2,m) = rho_c_soil !building_pars(ind_hc2,st)
4087                 surf_usm_v(l)%rho_c_green(nzb_wall+3,m) = rho_c_soil !building_pars(ind_hc3,st)
4088
4089                 surf_usm_v(l)%rho_c_window(nzb_wall,m)   = building_pars(ind_hc1_win,st)
4090                 surf_usm_v(l)%rho_c_window(nzb_wall+1,m) = building_pars(ind_hc1_win,st)
4091                 surf_usm_v(l)%rho_c_window(nzb_wall+2,m) = building_pars(ind_hc2_win,st)
4092                 surf_usm_v(l)%rho_c_window(nzb_wall+3,m) = building_pars(ind_hc3_win,st)
4093
4094                 surf_usm_v(l)%lambda_h(nzb_wall,m)   = building_pars(ind_tc1,st)
4095                 surf_usm_v(l)%lambda_h(nzb_wall+1,m) = building_pars(ind_tc1,st)
4096                 surf_usm_v(l)%lambda_h(nzb_wall+2,m) = building_pars(ind_tc2,st)
4097                 surf_usm_v(l)%lambda_h(nzb_wall+3,m) = building_pars(ind_tc3,st)
4098
4099                 surf_usm_v(l)%lambda_h_green(nzb_wall,m)   = lambda_h_green_sm !building_pars(ind_tc1,st)
4100                 surf_usm_v(l)%lambda_h_green(nzb_wall+1,m) = lambda_h_green_sm !building_pars(ind_tc1,st)
4101                 surf_usm_v(l)%lambda_h_green(nzb_wall+2,m) = lambda_h_green_sm !building_pars(ind_tc2,st)
4102                 surf_usm_v(l)%lambda_h_green(nzb_wall+3,m) = lambda_h_green_sm !building_pars(ind_tc3,st)
4103
4104                 surf_usm_v(l)%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win,st)
4105                 surf_usm_v(l)%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win,st)
4106                 surf_usm_v(l)%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win,st)
4107                 surf_usm_v(l)%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win,st)
4108
4109                 surf_usm_v(l)%target_temp_summer(m) = building_pars(ind_indoor_target_temp_summer,st)
4110                 surf_usm_v(l)%target_temp_winter(m) = building_pars(ind_indoor_target_temp_winter,st)
4111!
4112!--              Emissivity of wall-, green- and window fraction
4113                 surf_usm_v(l)%emissivity(m,ind_veg_wall)  = building_pars(ind_emis_wall,st)
4114                 surf_usm_v(l)%emissivity(m,ind_pav_green) = building_pars(ind_emis_green,st)
4115                 surf_usm_v(l)%emissivity(m,ind_wat_win)   = building_pars(ind_emis_win,st)
4116
4117                 surf_usm_v(l)%transmissivity(m) = building_pars(ind_trans,st)
4118
4119                 surf_usm_v(l)%z0(m)  = building_pars(ind_z0,st)
4120                 surf_usm_v(l)%z0h(m) = building_pars(ind_z0qh,st)
4121                 surf_usm_v(l)%z0q(m) = building_pars(ind_z0qh,st)
4122
4123                 surf_usm_v(l)%albedo_type(m,ind_veg_wall)  = INT( building_pars(ind_alb_wall,st) )
4124                 surf_usm_v(l)%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green,st) )
4125                 surf_usm_v(l)%albedo_type(m,ind_wat_win)   = INT( building_pars(ind_alb_win,st) )
4126
4127                 surf_usm_v(l)%zw(nzb_wall,m)   = building_pars(ind_thick_1,st)
4128                 surf_usm_v(l)%zw(nzb_wall+1,m) = building_pars(ind_thick_2,st)
4129                 surf_usm_v(l)%zw(nzb_wall+2,m) = building_pars(ind_thick_3,st)
4130                 surf_usm_v(l)%zw(nzb_wall+3,m) = building_pars(ind_thick_4,st)
4131
4132                 surf_usm_v(l)%zw_green(nzb_wall,m)   = building_pars(ind_thick_1,st)
4133                 surf_usm_v(l)%zw_green(nzb_wall+1,m) = building_pars(ind_thick_2,st)
4134                 surf_usm_v(l)%zw_green(nzb_wall+2,m) = building_pars(ind_thick_3,st)
4135                 surf_usm_v(l)%zw_green(nzb_wall+3,m) = building_pars(ind_thick_4,st)
4136
4137                 surf_usm_v(l)%zw_window(nzb_wall,m)   = building_pars(ind_thick_1_win,st)
4138                 surf_usm_v(l)%zw_window(nzb_wall+1,m) = building_pars(ind_thick_2_win,st)
4139                 surf_usm_v(l)%zw_window(nzb_wall+2,m) = building_pars(ind_thick_3_win,st)
4140                 surf_usm_v(l)%zw_window(nzb_wall+3,m) = building_pars(ind_thick_4_win,st)
4141
4142              ENDIF
4143           ENDDO
4144        ENDDO
4145     ENDIF
4146
4147!
4148!--  Level 3 - initialization via building_pars read from file. Note, only variables that are also
4149!--  defined in the input-standard can be initialized via file. Other variables will be initialized
4150!--  on level 1 or 2.
4151     IF ( building_pars_f%from_file )  THEN
4152        DO  m = 1, surf_usm_h%ns
4153           i = surf_usm_h%i(m)
4154           j = surf_usm_h%j(m)
4155
4156!
4157!--        In order to distinguish between ground floor level and above-ground-floor level surfaces,
4158!--        set input indices.
4159           ind_wall_frac    = MERGE( ind_wall_frac_gfl, ind_wall_frac_agfl,                        &
4160                                     surf_usm_h%ground_level(m) )
4161           ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,                  &
4162                                     surf_usm_h%ground_level(m) )
4163           ind_win_frac     = MERGE( ind_win_frac_gfl, ind_win_frac_agfl,                          &
4164                                     surf_usm_h%ground_level(m) )
4165           ind_lai_r        = MERGE( ind_lai_r_gfl, ind_lai_r_agfl, surf_usm_h%ground_level(m) )
4166           ind_z0           = MERGE( ind_z0_gfl, ind_z0_agfl, surf_usm_h%ground_level(m) )
4167           ind_z0qh         = MERGE( ind_z0qh_gfl, ind_z0qh_agfl, surf_usm_h%ground_level(m) )
4168           ind_hc1          = MERGE( ind_hc1_gfl, ind_hc1_agfl, surf_usm_h%ground_level(m) )
4169           ind_hc2          = MERGE( ind_hc2_gfl, ind_hc2_agfl, surf_usm_h%ground_level(m) )
4170           ind_hc3          = MERGE( ind_hc3_gfl, ind_hc3_agfl, surf_usm_h%ground_level(m) )
4171           ind_tc1          = MERGE( ind_tc1_gfl, ind_tc1_agfl, surf_usm_h%ground_level(m) )
4172           ind_tc2          = MERGE( ind_tc2_gfl, ind_tc2_agfl, surf_usm_h%ground_level(m) )
4173           ind_tc3          = MERGE( ind_tc3_gfl, ind_tc3_agfl, surf_usm_h%ground_level(m) )
4174           ind_emis_wall    = MERGE( ind_emis_wall_gfl, ind_emis_wall_agfl,                        &
4175                                     surf_usm_h%ground_level(m) )
4176           ind_emis_green   = MERGE( ind_emis_green_gfl, ind_emis_green_agfl,                      &
4177                                     surf_usm_h%ground_level(m) )
4178           ind_emis_win     = MERGE( ind_emis_win_gfl, ind_emis_win_agfl,                          &
4179                                     surf_usm_h%ground_level(m) )
4180           ind_trans        = MERGE( ind_trans_gfl, ind_trans_agfl, surf_usm_h%ground_level(m) )
4181
4182!
4183!--        Initialize relatvie wall- (0), green- (1) and window (2) fractions
4184           IF ( building_pars_f%pars_xy(ind_wall_frac,j,i) /= building_pars_f%fill )               &
4185              surf_usm_h%frac(m,ind_veg_wall) = building_pars_f%pars_xy(ind_wall_frac,j,i)
4186
4187           IF ( building_pars_f%pars_xy(ind_green_frac_r,j,i) /= building_pars_f%fill )            &
4188              surf_usm_h%frac(m,ind_pav_green) = building_pars_f%pars_xy(ind_green_frac_r,j,i)
4189
4190           IF ( building_pars_f%pars_xy(ind_win_frac,j,i) /= building_pars_f%fill )                &
4191              surf_usm_h%frac(m,ind_wat_win) = building_pars_f%pars_xy(ind_win_frac,j,i)
4192
4193           IF ( building_pars_f%pars_xy(ind_lai_r,j,i) /= building_pars_f%fill )                   &
4194              surf_usm_h%lai(m) = building_pars_f%pars_xy(ind_lai_r,j,i)
4195
4196           IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
4197              surf_usm_h%rho_c_wall(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4198              surf_usm_h%rho_c_wall(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4199           ENDIF
4200
4201
4202           IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )                     &
4203              surf_usm_h%rho_c_wall(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
4204
4205           IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )                     &
4206              surf_usm_h%rho_c_wall(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
4207
4208           IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
4209              surf_usm_h%rho_c_green(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4210              surf_usm_h%rho_c_green(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4211           ENDIF
4212           IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )                     &
4213              surf_usm_h%rho_c_green(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
4214
4215           IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )                     &
4216              surf_usm_h%rho_c_green(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
4217
4218           IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
4219              surf_usm_h%rho_c_window(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4220              surf_usm_h%rho_c_window(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4221           ENDIF
4222           IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )                     &
4223              surf_usm_h%rho_c_window(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
4224
4225           IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )                     &
4226              surf_usm_h%rho_c_window(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
4227
4228           IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
4229              surf_usm_h%lambda_h(nzb_wall,m)   = building_pars_f%pars_xy(ind_tc1,j,i)
4230              surf_usm_h%lambda_h(nzb_wall+1,m) = building_pars_f%pars_xy(ind_tc1,j,i)
4231           ENDIF
4232           IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )                     &
4233              surf_usm_h%lambda_h(nzb_wall+2,m) = building_pars_f%pars_xy(ind_tc2,j,i)
4234
4235           IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )                     &
4236              surf_usm_h%lambda_h(nzb_wall+3,m) = building_pars_f%pars_xy(ind_tc3,j,i)
4237
4238           IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
4239              surf_usm_h%lambda_h_green(nzb_wall,m) = building_pars_f%pars_xy(ind_tc1,j,i)
4240              surf_usm_h%lambda_h_green(nzb_wall+1,m) = building_pars_f%pars_xy(ind_tc1,j,i)
4241           ENDIF
4242           IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )                     &
4243              surf_usm_h%lambda_h_green(nzb_wall+2,m) = building_pars_f%pars_xy(ind_tc2,j,i)
4244
4245           IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )                     &
4246              surf_usm_h%lambda_h_green(nzb_wall+3,m) = building_pars_f%pars_xy(ind_tc3,j,i)
4247
4248           IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
4249              surf_usm_h%lambda_h_window(nzb_wall,m) = building_pars_f%pars_xy(ind_tc1,j,i)
4250              surf_usm_h%lambda_h_window(nzb_wall+1,m) = building_pars_f%pars_xy(ind_tc1,j,i)
4251           ENDIF
4252           IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )                     &
4253              surf_usm_h%lambda_h_window(nzb_wall+2,m) = building_pars_f%pars_xy(ind_tc2,j,i)
4254
4255           IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )                     &
4256              surf_usm_h%lambda_h_window(nzb_wall+3,m) = building_pars_f%pars_xy(ind_tc3,j,i)
4257
4258           IF ( building_pars_f%pars_xy(ind_indoor_target_temp_summer,j,i) /=                      &
4259                building_pars_f%fill )                                                             &
4260              surf_usm_h%target_temp_summer(m) =                                                   &
4261              building_pars_f%pars_xy(ind_indoor_target_temp_summer,j,i)
4262
4263           IF ( building_pars_f%pars_xy(ind_indoor_target_temp_winter,j,i) /=                      &
4264                building_pars_f%fill )                                                             &
4265              surf_usm_h%target_temp_winter(m) =                                                   &
4266              building_pars_f%pars_xy(ind_indoor_target_temp_winter,j,i)
4267
4268           IF ( building_pars_f%pars_xy(ind_emis_wall,j,i) /= building_pars_f%fill )               &
4269              surf_usm_h%emissivity(m,ind_veg_wall) = building_pars_f%pars_xy(ind_emis_wall,j,i)
4270
4271           IF ( building_pars_f%pars_xy(ind_emis_green,j,i) /= building_pars_f%fill )              &
4272              surf_usm_h%emissivity(m,ind_pav_green) = building_pars_f%pars_xy(ind_emis_green,j,i)
4273
4274           IF ( building_pars_f%pars_xy(ind_emis_win,j,i) /= building_pars_f%fill )                &
4275              surf_usm_h%emissivity(m,ind_wat_win) = building_pars_f%pars_xy(ind_emis_win,j,i)
4276
4277           IF ( building_pars_f%pars_xy(ind_trans,j,i) /= building_pars_f%fill )                   &
4278              surf_usm_h%transmissivity(m) = building_pars_f%pars_xy(ind_trans,j,i)
4279
4280           IF ( building_pars_f%pars_xy(ind_z0,j,i) /= building_pars_f%fill )                      &
4281              surf_usm_h%z0(m) = building_pars_f%pars_xy(ind_z0,j,i)
4282
4283           IF ( building_pars_f%pars_xy(ind_z0qh,j,i) /= building_pars_f%fill )                    &
4284              surf_usm_h%z0h(m) = building_pars_f%pars_xy(ind_z0qh,j,i)
4285
4286           IF ( building_pars_f%pars_xy(ind_z0qh,j,i) /= building_pars_f%fill )                    &
4287              surf_usm_h%z0q(m) = building_pars_f%pars_xy(ind_z0qh,j,i)
4288
4289           IF ( building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) /= building_pars_f%fill )           &
4290              surf_usm_h%albedo_type(m,ind_veg_wall)  =                                            &
4291              building_pars_f%pars_xy(ind_alb_wall_agfl,j,i)
4292
4293           IF ( building_pars_f%pars_xy(ind_alb_green_agfl,j,i) /= building_pars_f%fill )          &
4294              surf_usm_h%albedo_type(m,ind_pav_green) =                                            &
4295              building_pars_f%pars_xy(ind_alb_green_agfl,j,i)
4296
4297           IF ( building_pars_f%pars_xy(ind_alb_win_agfl,j,i) /= building_pars_f%fill )            &
4298              surf_usm_h%albedo_type(m,ind_wat_win)   =                                            &
4299              building_pars_f%pars_xy(ind_alb_win_agfl,j,i)
4300
4301           IF ( building_pars_f%pars_xy(ind_thick_1_agfl,j,i) /= building_pars_f%fill )            &
4302              surf_usm_h%zw(nzb_wall,m) = building_pars_f%pars_xy(ind_thick_1_agfl,j,i)
4303
4304           IF ( building_pars_f%pars_xy(ind_thick_2_agfl,j,i) /= building_pars_f%fill )            &
4305              surf_usm_h%zw(nzb_wall+1,m) = building_pars_f%pars_xy(ind_thick_2_agfl,j,i)
4306
4307           IF ( building_pars_f%pars_xy(ind_thick_3_agfl,j,i) /= building_pars_f%fill )            &
4308              surf_usm_h%zw(nzb_wall+2,m) = building_pars_f%pars_xy(ind_thick_3_agfl,j,i)
4309
4310           IF ( building_pars_f%pars_xy(ind_thick_4_agfl,j,i) /= building_pars_f%fill )            &
4311              surf_usm_h%zw(nzb_wall+3,m) = building_pars_f%pars_xy(ind_thick_4_agfl,j,i)
4312
4313           IF ( building_pars_f%pars_xy(ind_thick_1_agfl,j,i) /= building_pars_f%fill )            &
4314              surf_usm_h%zw_green(nzb_wall,m) = building_pars_f%pars_xy(ind_thick_1_agfl,j,i)
4315
4316           IF ( building_pars_f%pars_xy(ind_thick_2_agfl,j,i) /= building_pars_f%fill )            &
4317              surf_usm_h%zw_green(nzb_wall+1,m) = building_pars_f%pars_xy(ind_thick_2_agfl,j,i)
4318
4319           IF ( building_pars_f%pars_xy(ind_thick_3_agfl,j,i) /= building_pars_f%fill )            &
4320              surf_usm_h%zw_green(nzb_wall+2,m) = building_pars_f%pars_xy(ind_thick_3_agfl,j,i)
4321
4322           IF ( building_pars_f%pars_xy(ind_thick_4_agfl,j,i) /= building_pars_f%fill )            &
4323              surf_usm_h%zw_green(nzb_wall+3,m) = building_pars_f%pars_xy(ind_thick_4_agfl,j,i)
4324        ENDDO
4325
4326        DO  l = 0, 3
4327           DO  m = 1, surf_usm_v(l)%ns
4328              i = surf_usm_v(l)%i(m) + surf_usm_v(l)%ioff
4329              j = surf_usm_v(l)%j(m) + surf_usm_v(l)%joff
4330
4331!
4332!--              In order to distinguish between ground floor level and above-ground-floor level
4333!--              surfaces, set input indices.
4334                 ind_wall_frac    = MERGE( ind_wall_frac_gfl, ind_wall_frac_agfl,                  &
4335                                           surf_usm_v(l)%ground_level(m) )
4336                 ind_green_frac_w = MERGE( ind_green_frac_w_gfl, ind_green_frac_w_agfl,            &
4337                                           surf_usm_v(l)%ground_level(m) )
4338                 ind_win_frac     = MERGE( ind_win_frac_gfl, ind_win_frac_agfl,                    &
4339                                           surf_usm_v(l)%ground_level(m) )
4340                 ind_lai_w        = MERGE( ind_lai_w_gfl, ind_lai_w_agfl,                          &
4341                                           surf_usm_v(l)%ground_level(m) )
4342                 ind_z0           = MERGE( ind_z0_gfl, ind_z0_agfl,                                &
4343                                           surf_usm_v(l)%ground_level(m) )
4344                 ind_z0qh         = MERGE( ind_z0qh_gfl, ind_z0qh_agfl,                            &
4345                                           surf_usm_v(l)%ground_level(m) )
4346                 ind_hc1          = MERGE( ind_hc1_gfl, ind_hc1_agfl,                              &
4347                                           surf_usm_v(l)%ground_level(m) )
4348                 ind_hc2          = MERGE( ind_hc2_gfl, ind_hc2_agfl,                              &
4349                                           surf_usm_v(l)%ground_level(m) )
4350                 ind_hc3          = MERGE( ind_hc3_gfl, ind_hc3_agfl,                              &
4351                                           surf_usm_v(l)%ground_level(m) )
4352                 ind_tc1          = MERGE( ind_tc1_gfl, ind_tc1_agfl,                              &
4353                                           surf_usm_v(l)%ground_level(m) )
4354                 ind_tc2          = MERGE( ind_tc2_gfl, ind_tc2_agfl,                              &
4355                                           surf_usm_v(l)%ground_level(m) )
4356                 ind_tc3          = MERGE( ind_tc3_gfl, ind_tc3_agfl,                              &
4357                                           surf_usm_v(l)%ground_level(m) )
4358                 ind_emis_wall    = MERGE( ind_emis_wall_gfl, ind_emis_wall_agfl,                  &
4359                                           surf_usm_v(l)%ground_level(m) )
4360                 ind_emis_green   = MERGE( ind_emis_green_gfl, ind_emis_green_agfl,                &
4361                                           surf_usm_v(l)%ground_level(m) )
4362                 ind_emis_win     = MERGE( ind_emis_win_gfl, ind_emis_win_agfl,                    &
4363                                           surf_usm_v(l)%ground_level(m) )
4364                 ind_trans        = MERGE( ind_trans_gfl, ind_trans_agfl,                          &
4365                                           surf_usm_v(l)%ground_level(m) )
4366
4367!
4368!--              Initialize relatvie wall- (0), green- (1) and window (2) fractions
4369                 IF ( building_pars_f%pars_xy(ind_wall_frac,j,i) /= building_pars_f%fill )         &
4370                    surf_usm_v(l)%frac(m,ind_veg_wall) = building_pars_f%pars_xy(ind_wall_frac,j,i)
4371
4372                 IF ( building_pars_f%pars_xy(ind_green_frac_w,j,i) /= building_pars_f%fill )      &
4373                    surf_usm_v(l)%frac(m,ind_pav_green) =                                          &
4374                    building_pars_f%pars_xy(ind_green_frac_w,j,i)
4375
4376                 IF ( building_pars_f%pars_xy(ind_win_frac,j,i) /= building_pars_f%fill )          &
4377                    surf_usm_v(l)%frac(m,ind_wat_win) = building_pars_f%pars_xy(ind_win_frac,j,i)
4378
4379                 IF ( building_pars_f%pars_xy(ind_lai_w,j,i) /= building_pars_f%fill )             &
4380                    surf_usm_v(l)%lai(m) = building_pars_f%pars_xy(ind_lai_w,j,i)
4381
4382                 IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
4383                    surf_usm_v(l)%rho_c_wall(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4384                    surf_usm_v(l)%rho_c_wall(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4385                 ENDIF
4386
4387
4388                 IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )               &
4389                    surf_usm_v(l)%rho_c_wall(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
4390
4391                 IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )               &
4392                    surf_usm_v(l)%rho_c_wall(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
4393
4394                 IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
4395                    surf_usm_v(l)%rho_c_green(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4396                    surf_usm_v(l)%rho_c_green(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4397                 ENDIF
4398                 IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )               &
4399                    surf_usm_v(l)%rho_c_green(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
4400
4401                 IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )               &
4402                    surf_usm_v(l)%rho_c_green(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
4403
4404                 IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
4405                    surf_usm_v(l)%rho_c_window(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4406                    surf_usm_v(l)%rho_c_window(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
4407                 ENDIF
4408                 IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )               &
4409                    surf_usm_v(l)%rho_c_window(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
4410
4411                 IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )               &
4412                    surf_usm_v(l)%rho_c_window(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
4413
4414                 IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
4415                    surf_usm_v(l)%lambda_h(nzb_wall,m) = building_pars_f%pars_xy(ind_tc1,j,i)
4416                    surf_usm_v(l)%lambda_h(nzb_wall+1,m) = building_pars_f%pars_xy(ind_tc1,j,i)
4417                 ENDIF
4418                 IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )               &
4419                    surf_usm_v(l)%lambda_h(nzb_wall+2,m) = building_pars_f%pars_xy(ind_tc2,j,i)
4420
4421                 IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )               &
4422                    surf_usm_v(l)%lambda_h(nzb_wall+3,m) = building_pars_f%pars_xy(ind_tc3,j,i)
4423
4424                 IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
4425                    surf_usm_v(l)%lambda_h_green(nzb_wall,m) = building_pars_f%pars_xy(ind_tc1,j,i)
4426                    surf_usm_v(l)%lambda_h_green(nzb_wall+1,m) =                                   &
4427                    building_pars_f%pars_xy(ind_tc1,j,i)
4428                 ENDIF
4429                 IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )               &
4430                    surf_usm_v(l)%lambda_h_green(nzb_wall+2,m) =                                   &
4431                    building_pars_f%pars_xy(ind_tc2,j,i)
4432
4433                 IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )               &
4434                    surf_usm_v(l)%lambda_h_green(nzb_wall+3,m) =                                   &
4435                    building_pars_f%pars_xy(ind_tc3,j,i)
4436
4437                 IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
4438                    surf_usm_v(l)%lambda_h_window(nzb_wall,m) = building_pars_f%pars_xy(ind_tc1,j,i)
4439                    surf_usm_v(l)%lambda_h_window(nzb_wall+1,m) =                                  &
4440                    building_pars_f%pars_xy(ind_tc1,j,i)
4441                 ENDIF
4442