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

Last change on this file since 4535 was 4535, checked in by raasch, 13 months ago

bugfix for restart data format query

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