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

Last change on this file since 4780 was 4780, checked in by suehring, 20 months ago

Urban-surface model and indoor model: Default building parameters updated and extended; revision of summer- and wintertime-dependent indoor parameters (responsible S. Rissmann); extension of albedo parameters to different building facades and roofs; first and second wall layer initialized with individual building properties rather than with with the same properties (heat capacity and conductivity)

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