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

Last change on this file since 4258 was 4258, checked in by suehring, 5 years ago

Land-surface model: Revise limitation for soil moisture in case it exceeds its saturation value; Revise initialization of soil moisture and temperature in a nested run in case dynamic input information is available. This case, the soil within the child domains can be initialized separately; As part of this revision, migrate the netcdf input of soil temperature / moisture to this module, as well as the routine to inter/extrapolate soil profiles between different grids.; Plant-canopy: Check if any LAD is prescribed when plant-canopy model is applied, in order to avoid crashes in the radiation transfer model; Surface-layer fluxes: Initialization of Obukhov length also at vertical surfaces (if allocated); Urban-surface model: Add checks to ensure that relative fractions of walls, windowns and green surfaces sum-u to one; Revise message calls dealing with local checks

  • Property svn:keywords set to Id
File size: 563.0 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
6! terms of the GNU General Public License as published by the Free Software
7! Foundation, either version 3 of the License, or (at your option) any later
8! version.
9!
10! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
11! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13!
14! You should have received a copy of the GNU General Public License along with
15! PALM. If not, see <http://www.gnu.org/licenses/>.
16!
17! Copyright 2015-2019 Czech Technical University in Prague
18! Copyright 2015-2019 Institute of Computer Science of the
19!                     Czech Academy of Sciences, Prague
20! Copyright 1997-2019 Leibniz Universitaet Hannover
21!------------------------------------------------------------------------------!
22!
23! Current revisions:
24! ------------------
25!
26!
27! Former revisions:
28! -----------------
29! $Id: urban_surface_mod.f90 4258 2019-10-07 13:29:08Z suehring $
30! - Add checks to ensure that relative fractions of walls, windowns and green
31!   surfaces sum-up to one.
32! - Revise message calls dealing with local checks.
33!
34! 4245 2019-09-30 08:40:37Z pavelkrc
35! Initialize explicit per-surface parameters from building_surface_pars
36!
37! 4238 2019-09-25 16:06:01Z suehring
38! Indoor-model parameters for some building types adjusted in order to avoid
39! unrealistically high indoor temperatures (S. Rissmann)
40!
41! 4230 2019-09-11 13:58:14Z suehring
42! Bugfix, initialize canopy resistance. Even if no green fraction is set,
43! r_canopy must be initialized for output purposes.
44!
45! 4227 2019-09-10 18:04:34Z gronemeier
46! implement new palm_date_time_mod
47!
48! 4214 2019-09-02 15:57:02Z suehring
49! Bugfix, missing initialization and clearing of soil-moisture tendency
50! (J.Resler)
51!
52! 4182 2019-08-22 15:20:23Z scharf
53! Corrected "Former revisions" section
54!
55! 4168 2019-08-16 13:50:17Z suehring
56! Replace function get_topography_top_index by topo_top_ind
57!
58! 4148 2019-08-08 11:26:00Z suehring
59! - Add anthropogenic heat output factors for heating and cooling to building
60!   data base
61! - Move definition of building_pars to usm_init_arrays since it is already
62!   required in the indoor model
63!
64! 4127 2019-07-30 14:47:10Z suehring
65! Do not add anthopogenic energy during wall/soil spin-up
66! (merge from branch resler)
67!
68! 4077 2019-07-09 13:27:11Z gronemeier
69! Set roughness length z0 and z0h/q at ground-floor level to same value as
70! those above ground-floor level
71!
72! 4051 2019-06-24 13:58:30Z suehring
73! Remove work-around for green surface fraction on buildings
74! (do not set it zero)
75!
76! 4050 2019-06-24 13:57:27Z suehring
77! In order to avoid confusion with global control parameter, rename the
78! USM-internal flag spinup into during_spinup.
79!
80! 3987 2019-05-22 09:52:13Z kanani
81! Introduce alternative switch for debug output during timestepping
82!
83! 3943 2019-05-02 09:50:41Z maronga
84! Removed qsws_eb. Bugfix in calculation of qsws.
85!
86! 3933 2019-04-25 12:33:20Z kanani
87! Remove allocation of pt_2m, this is done in surface_mod now (surfaces%pt_2m)
88!
89! 3921 2019-04-18 14:21:10Z suehring
90! Undo accidentally commented initialization 
91!
92! 3918 2019-04-18 13:33:11Z suehring
93! Set green fraction to zero also at vertical surfaces
94!
95! 3914 2019-04-17 16:02:02Z suehring
96! In order to obtain correct surface temperature during spinup set window
97! fraction to zero (only during spinup) instead of just disabling
98! time-integration of window-surface temperature.
99!
100! 3901 2019-04-16 16:17:02Z suehring
101! Workaround - set green fraction to zero ( green-heat model crashes ).
102!
103! 3896 2019-04-15 10:10:17Z suehring
104!
105!
106! 3896 2019-04-15 10:10:17Z suehring
107! Bugfix, wrong index used for accessing building_pars from PIDS
108!
109! 3885 2019-04-11 11:29:34Z kanani
110! Changes related to global restructuring of location messages and introduction
111! of additional debug messages
112!
113! 3882 2019-04-10 11:08:06Z suehring
114! Avoid different type kinds
115! Move definition of building-surface properties from declaration block
116! to an extra routine
117!
118! 3881 2019-04-10 09:31:22Z suehring
119! Revise determination of local ground-floor level height.
120! Make level 3 initalization conform with Palm-input-data standard
121! Move output of albedo and emissivity to radiation module
122!
123! 3832 2019-03-28 13:16:58Z raasch
124! instrumented with openmp directives
125!
126! 3824 2019-03-27 15:56:16Z pavelkrc
127! Remove unused imports
128!
129!
130! 3814 2019-03-26 08:40:31Z pavelkrc
131! unused subroutine commented out
132!
133! 3769 2019-02-28 10:16:49Z moh.hefny
134! removed unused variables
135!
136! 3767 2019-02-27 08:18:02Z raasch
137! unused variables removed from rrd-subroutines parameter list
138!
139! 3748 2019-02-18 10:38:31Z suehring
140! Revise conversion of waste-heat flux (do not divide by air density, will
141! be done in diffusion_s)
142!
143! 3745 2019-02-15 18:57:56Z suehring
144! - Remove internal flag indoor_model (is a global control parameter)
145! - add waste heat from buildings to the kinmatic heat flux
146! - consider waste heat in restart data
147! - remove unused USE statements
148!
149! 3744 2019-02-15 18:38:58Z suehring
150! fixed surface heat capacity in the building parameters
151! convert the file back to unix format
152!
153! 3730 2019-02-11 11:26:47Z moh.hefny
154! Formatting and clean-up (rvtils)
155!
156! 3710 2019-01-30 18:11:19Z suehring
157! Check if building type is set within a valid range.
158!
159! 3705 2019-01-29 19:56:39Z suehring
160! make nzb_wall public, required for virtual-measurements
161!
162! 3704 2019-01-29 19:51:41Z suehring
163! Some interface calls moved to module_interface + cleanup
164!
165! 3655 2019-01-07 16:51:22Z knoop
166! Implementation of the PALM module interface
167!
168! 2007 2016-08-24 15:47:17Z kanani
169! Initial revision
170!
171!
172! Description:
173! ------------
174! 2016/6/9 - Initial version of the USM (Urban Surface Model)
175!            authors: Jaroslav Resler, Pavel Krc
176!                     (Czech Technical University in Prague and Institute of
177!                      Computer Science of the Czech Academy of Sciences, Prague)
178!            with contributions: Michal Belda, Nina Benesova, Ondrej Vlcek
179!            partly inspired by PALM LSM (B. Maronga)
180!            parameterizations of Ra checked with TUF3D (E. S. Krayenhoff)
181!> Module for Urban Surface Model (USM)
182!> The module includes:
183!>    1. radiation model with direct/diffuse radiation, shading, reflections
184!>       and integration with plant canopy
185!>    2. wall and wall surface model
186!>    3. surface layer energy balance
187!>    4. anthropogenic heat (only from transportation so far)
188!>    5. necessary auxiliary subroutines (reading inputs, writing outputs,
189!>       restart simulations, ...)
190!> It also make use of standard radiation and integrates it into
191!> urban surface model.
192!>
193!> Further work:
194!> -------------
195!> 1. Remove global arrays surfouts, surfoutl and only keep track of radiosity
196!>    from surfaces that are visible from local surfaces (i.e. there is a SVF
197!>    where target is local). To do that, radiosity will be exchanged after each
198!>    reflection step using MPI_Alltoall instead of current MPI_Allgather.
199!>
200!> 2. Temporarily large values of surface heat flux can be observed, up to
201!>    1.2 Km/s, which seem to be not realistic.
202!>
203!> @todo Output of _av variables in case of restarts
204!> @todo Revise flux conversion in energy-balance solver
205!> @todo Check optimizations for RMA operations
206!> @todo Alternatives for MPI_WIN_ALLOCATE? (causes problems with openmpi)
207!> @todo Check for load imbalances in CPU measures, e.g. for exchange_horiz_prog
208!>       factor 3 between min and max time
209!> @todo Check divisions in wtend (etc.) calculations for possible division
210!>       by zero, e.g. in case fraq(0,m) + fraq(1,m) = 0?!
211!> @todo Use unit 90 for OPEN/CLOSE of input files (FK)
212!> @todo Move plant canopy stuff into plant canopy code
213!------------------------------------------------------------------------------!
214 MODULE urban_surface_mod
215
216    USE arrays_3d,                                                             &
217        ONLY:  hyp, zu, pt, p, u, v, w, tend, exner, hyrho, prr, q, ql, vpt
218
219    USE calc_mean_profile_mod,                                                 &
220        ONLY:  calc_mean_profile
221
222    USE basic_constants_and_equations_mod,                                     &
223        ONLY:  c_p, g, kappa, pi, r_d, rho_l, l_v, sigma_sb
224
225    USE control_parameters,                                                    &
226        ONLY:  coupling_start_time, topography,                                &
227               debug_output, debug_output_timestep, debug_string,              &
228               dt_3d, humidity, indoor_model,                                  &
229               intermediate_timestep_count, initializing_actions,              &
230               intermediate_timestep_count_max, simulated_time, end_time,      &
231               timestep_scheme, tsc, coupling_char, io_blocks, io_group,       &
232               message_string, time_since_reference_point, surface_pressure,   &
233               pt_surface, large_scale_forcing, lsf_surf,                      &
234               spinup_pt_mean, spinup_time, time_do3d, dt_do3d,                &
235               average_count_3d, varnamelength, urban_surface, dz
236
237    USE bulk_cloud_model_mod,                                                  &
238        ONLY: bulk_cloud_model, precipitation
239               
240    USE cpulog,                                                                &
241        ONLY:  cpu_log, log_point, log_point_s
242
243    USE grid_variables,                                                        &
244        ONLY:  dx, dy, ddx, ddy, ddx2, ddy2
245
246    USE indices,                                                               &
247        ONLY:  nx, ny, nnx, nny, nnz, nxl, nxlg, nxr, nxrg, nyn, nyng, nys,    &
248               nysg, nzb, nzt, nbgp, topo_top_ind, wall_flags_0
249
250    USE, INTRINSIC :: iso_c_binding 
251
252    USE kinds
253             
254    USE palm_date_time_mod,                                                    &
255        ONLY:  get_date_time, seconds_per_hour
256
257    USE pegrid
258       
259    USE radiation_model_mod,                                                   &
260        ONLY:  albedo_type, radiation_interaction,                             &
261               radiation, rad_sw_in, rad_lw_in, rad_sw_out, rad_lw_out,        &
262               force_radiation_call, iup_u, inorth_u, isouth_u, ieast_u,       &
263               iwest_u, iup_l, inorth_l, isouth_l, ieast_l, iwest_l, id,       &
264               iz, iy, ix,  nsurf, idsvf, ndsvf,                               &
265               idcsf, ndcsf, kdcsf, pct,                                       &
266               nz_urban_b, nz_urban_t, unscheduled_radiation_calls
267
268    USE statistics,                                                            &
269        ONLY:  hom, statistic_regions
270
271    USE surface_mod,                                                           &
272        ONLY:  ind_pav_green, ind_veg_wall, ind_wat_win, surf_usm_h,           &
273               surf_usm_v, surface_restore_elements
274
275
276    IMPLICIT NONE
277
278!
279!-- USM model constants
280
281    REAL(wp), PARAMETER ::                     &
282              b_ch               = 6.04_wp,    &  !< Clapp & Hornberger exponent
283              lambda_h_green_dry = 0.19_wp,    &  !< heat conductivity for dry soil   
284              lambda_h_green_sm  = 3.44_wp,    &  !< heat conductivity of the soil matrix
285              lambda_h_water     = 0.57_wp,    &  !< heat conductivity of water
286              psi_sat            = -0.388_wp,  &  !< soil matrix potential at saturation
287              rho_c_soil         = 2.19E6_wp,  &  !< volumetric heat capacity of soil
288              rho_c_water        = 4.20E6_wp      !< volumetric heat capacity of water
289!               m_max_depth        = 0.0002_wp     ! Maximum capacity of the water reservoir (m)
290
291!
292!-- Soil parameters I           alpha_vg,      l_vg_green,    n_vg, gamma_w_green_sat
293    REAL(wp), DIMENSION(0:3,1:7), PARAMETER :: soil_pars = RESHAPE( (/     &
294                                 3.83_wp,  1.250_wp, 1.38_wp,  6.94E-6_wp, &  !< soil 1
295                                 3.14_wp, -2.342_wp, 1.28_wp,  1.16E-6_wp, &  !< soil 2
296                                 0.83_wp, -0.588_wp, 1.25_wp,  0.26E-6_wp, &  !< soil 3
297                                 3.67_wp, -1.977_wp, 1.10_wp,  2.87E-6_wp, &  !< soil 4
298                                 2.65_wp,  2.500_wp, 1.10_wp,  1.74E-6_wp, &  !< soil 5
299                                 1.30_wp,  0.400_wp, 1.20_wp,  0.93E-6_wp, &  !< soil 6
300                                 0.00_wp,  0.00_wp,  0.00_wp,  0.57E-6_wp  &  !< soil 7
301                                 /), (/ 4, 7 /) )
302
303!
304!-- Soil parameters II              swc_sat,     fc,   wilt,    swc_res 
305    REAL(wp), DIMENSION(0:3,1:7), PARAMETER :: m_soil_pars = RESHAPE( (/ &
306                                 0.403_wp, 0.244_wp, 0.059_wp, 0.025_wp, &  !< soil 1
307                                 0.439_wp, 0.347_wp, 0.151_wp, 0.010_wp, &  !< soil 2
308                                 0.430_wp, 0.383_wp, 0.133_wp, 0.010_wp, &  !< soil 3
309                                 0.520_wp, 0.448_wp, 0.279_wp, 0.010_wp, &  !< soil 4
310                                 0.614_wp, 0.541_wp, 0.335_wp, 0.010_wp, &  !< soil 5
311                                 0.766_wp, 0.663_wp, 0.267_wp, 0.010_wp, &  !< soil 6
312                                 0.472_wp, 0.323_wp, 0.171_wp, 0.000_wp  &  !< soil 7
313                                 /), (/ 4, 7 /) )
314!
315!-- value 9999999.9_wp -> generic available or user-defined value must be set
316!-- otherwise -> no generic variable and user setting is optional
317    REAL(wp) :: alpha_vangenuchten = 9999999.9_wp,      &  !< NAMELIST alpha_vg
318                field_capacity = 9999999.9_wp,          &  !< NAMELIST fc
319                hydraulic_conductivity = 9999999.9_wp,  &  !< NAMELIST gamma_w_green_sat
320                l_vangenuchten = 9999999.9_wp,          &  !< NAMELIST l_vg
321                n_vangenuchten = 9999999.9_wp,          &  !< NAMELIST n_vg
322                residual_moisture = 9999999.9_wp,       &  !< NAMELIST m_res
323                saturation_moisture = 9999999.9_wp,     &  !< NAMELIST m_sat
324                wilting_point = 9999999.9_wp               !< NAMELIST m_wilt
325   
326!
327!-- configuration parameters (they can be setup in PALM config)
328    LOGICAL ::  usm_material_model = .TRUE.        !< flag parameter indicating wheather the  model of heat in materials is used
329    LOGICAL ::  usm_anthropogenic_heat = .FALSE.   !< flag parameter indicating wheather the anthropogenic heat sources
330                                                   !< (e.g.transportation) are used
331    LOGICAL ::  force_radiation_call_l = .FALSE.   !< flag parameter for unscheduled radiation model calls
332    LOGICAL ::  read_wall_temp_3d = .FALSE.
333    LOGICAL ::  usm_wall_mod = .FALSE.             !< reduces conductivity of the first 2 wall layers by factor 0.1
334
335
336    INTEGER(iwp) ::  building_type = 1               !< default building type (preleminary setting)
337    INTEGER(iwp) ::  land_category = 2               !< default category for land surface
338    INTEGER(iwp) ::  wall_category = 2               !< default category for wall surface over pedestrian zone
339    INTEGER(iwp) ::  pedestrian_category = 2         !< default category for wall surface in pedestrian zone
340    INTEGER(iwp) ::  roof_category = 2               !< default category for root surface
341    REAL(wp)     ::  roughness_concrete = 0.001_wp   !< roughness length of average concrete surface
342!
343!-- Indices of input attributes in building_pars for (above) ground floor level
344    INTEGER(iwp) ::  ind_alb_wall_agfl     = 38   !< index in input list for albedo_type of wall above ground floor level
345    INTEGER(iwp) ::  ind_alb_wall_gfl      = 66   !< index in input list for albedo_type of wall ground floor level
346    INTEGER(iwp) ::  ind_alb_wall_r        = 101  !< index in input list for albedo_type of wall roof
347    INTEGER(iwp) ::  ind_alb_green_agfl    = 39   !< index in input list for albedo_type of green above ground floor level
348    INTEGER(iwp) ::  ind_alb_green_gfl     = 78   !< index in input list for albedo_type of green ground floor level
349    INTEGER(iwp) ::  ind_alb_green_r       = 117  !< index in input list for albedo_type of green roof
350    INTEGER(iwp) ::  ind_alb_win_agfl      = 40   !< index in input list for albedo_type of window fraction above ground floor level
351    INTEGER(iwp) ::  ind_alb_win_gfl       = 77   !< index in input list for albedo_type of window fraction ground floor level
352    INTEGER(iwp) ::  ind_alb_win_r         = 115  !< index in input list for albedo_type of window fraction roof
353    INTEGER(iwp) ::  ind_c_surface         = 45   !< index in input list for heat capacity wall surface
354    INTEGER(iwp) ::  ind_c_surface_green   = 48   !< index in input list for heat capacity green surface
355    INTEGER(iwp) ::  ind_c_surface_win     = 47   !< index in input list for heat capacity window surface
356    INTEGER(iwp) ::  ind_emis_wall_agfl    = 14   !< index in input list for wall emissivity, above ground floor level
357    INTEGER(iwp) ::  ind_emis_wall_gfl     = 32   !< index in input list for wall emissivity, ground floor level
358    INTEGER(iwp) ::  ind_emis_wall_r       = 100  !< index in input list for wall emissivity, roof
359    INTEGER(iwp) ::  ind_emis_green_agfl   = 15   !< index in input list for green emissivity, above ground floor level
360    INTEGER(iwp) ::  ind_emis_green_gfl    = 34   !< index in input list for green emissivity, ground floor level
361    INTEGER(iwp) ::  ind_emis_green_r      = 116  !< index in input list for green emissivity, roof
362    INTEGER(iwp) ::  ind_emis_win_agfl     = 16   !< index in input list for window emissivity, above ground floor level
363    INTEGER(iwp) ::  ind_emis_win_gfl      = 33   !< index in input list for window emissivity, ground floor level
364    INTEGER(iwp) ::  ind_emis_win_r        = 113  !< index in input list for window emissivity, roof
365    INTEGER(iwp) ::  ind_gflh              = 20   !< index in input list for ground floor level height
366    INTEGER(iwp) ::  ind_green_frac_w_agfl = 2    !< index in input list for green fraction on wall, above ground floor level
367    INTEGER(iwp) ::  ind_green_frac_w_gfl  = 23   !< index in input list for green fraction on wall, ground floor level
368    INTEGER(iwp) ::  ind_green_frac_r_agfl = 3    !< index in input list for green fraction on roof, above ground floor level
369    INTEGER(iwp) ::  ind_green_frac_r_gfl  = 24   !< index in input list for green fraction on roof, ground floor level
370    INTEGER(iwp) ::  ind_hc1_agfl          = 6    !< index in input list for heat capacity at first wall layer,
371                                                  !< above ground floor level
372    INTEGER(iwp) ::  ind_hc1_gfl           = 26   !< index in input list for heat capacity at first wall layer, ground floor level
373    INTEGER(iwp) ::  ind_hc1_wall_r        = 94   !< index in input list for heat capacity at first wall layer, roof
374    INTEGER(iwp) ::  ind_hc1_win_agfl      = 83   !< index in input list for heat capacity at first window layer,
375                                                  !< above ground floor level
376    INTEGER(iwp) ::  ind_hc1_win_gfl       = 71   !< index in input list for heat capacity at first window layer,
377                                                  !< ground floor level
378    INTEGER(iwp) ::  ind_hc1_win_r         = 107  !< index in input list for heat capacity at first window layer, roof
379    INTEGER(iwp) ::  ind_hc2_agfl          = 7    !< index in input list for heat capacity at second wall layer,
380                                                  !< above ground floor level
381    INTEGER(iwp) ::  ind_hc2_gfl           = 27   !< index in input list for heat capacity at second wall layer, ground floor level
382    INTEGER(iwp) ::  ind_hc2_wall_r        = 95   !< index in input list for heat capacity at second wall layer, roof
383    INTEGER(iwp) ::  ind_hc2_win_agfl      = 84   !< index in input list for heat capacity at second window layer,
384                                                  !< above ground floor level
385    INTEGER(iwp) ::  ind_hc2_win_gfl       = 72   !< index in input list for heat capacity at second window layer,
386                                                  !< ground floor level
387    INTEGER(iwp) ::  ind_hc2_win_r         = 108  !< index in input list for heat capacity at second window layer, roof
388    INTEGER(iwp) ::  ind_hc3_agfl          = 8    !< index in input list for heat capacity at third wall layer,
389                                                  !< above ground floor level
390    INTEGER(iwp) ::  ind_hc3_gfl           = 28   !< index in input list for heat capacity at third wall layer, ground floor level
391    INTEGER(iwp) ::  ind_hc3_wall_r        = 96   !< index in input list for heat capacity at third wall layer, roof
392    INTEGER(iwp) ::  ind_hc3_win_agfl      = 85   !< index in input list for heat capacity at third window layer,
393                                                  !< above ground floor level
394    INTEGER(iwp) ::  ind_hc3_win_gfl       = 73   !< index in input list for heat capacity at third window layer,
395                                                  !< ground floor level
396    INTEGER(iwp) ::  ind_hc3_win_r         = 109  !< index in input list for heat capacity at third window layer, roof
397    INTEGER(iwp) ::  ind_indoor_target_temp_summer = 12
398    INTEGER(iwp) ::  ind_indoor_target_temp_winter = 13
399    INTEGER(iwp) ::  ind_lai_r_agfl        = 4    !< index in input list for LAI on roof, above ground floor level
400    INTEGER(iwp) ::  ind_lai_r_gfl         = 4  !< index in input list for LAI on roof, ground floor level
401    INTEGER(iwp) ::  ind_lai_w_agfl        = 5    !< index in input list for LAI on wall, above ground floor level
402    INTEGER(iwp) ::  ind_lai_w_gfl         = 25   !< index in input list for LAI on wall, ground floor level
403    INTEGER(iwp) ::  ind_lambda_surf       = 46   !< index in input list for thermal conductivity of wall surface
404    INTEGER(iwp) ::  ind_lambda_surf_green = 50   !< index in input list for thermal conductivity of green surface
405    INTEGER(iwp) ::  ind_lambda_surf_win   = 49   !< index in input list for thermal conductivity of window surface
406    INTEGER(iwp) ::  ind_tc1_agfl          = 9    !< index in input list for thermal conductivity at first wall layer,
407                                                  !< above ground floor level
408    INTEGER(iwp) ::  ind_tc1_gfl           = 29   !< index in input list for thermal conductivity at first wall layer,
409                                                  !< ground floor level
410    INTEGER(iwp) ::  ind_tc1_wall_r        = 97   !< index in input list for thermal conductivity at first wall layer, roof
411    INTEGER(iwp) ::  ind_tc1_win_agfl      = 86   !< index in input list for thermal conductivity at first window layer,
412                                                  !< above ground floor level
413    INTEGER(iwp) ::  ind_tc1_win_gfl       = 74   !< index in input list for thermal conductivity at first window layer,
414                                                  !< ground floor level
415    INTEGER(iwp) ::  ind_tc1_win_r         = 110  !< index in input list for thermal conductivity at first window layer, roof
416    INTEGER(iwp) ::  ind_tc2_agfl          = 10   !< index in input list for thermal conductivity at second wall layer,
417                                                  !< above ground floor level
418    INTEGER(iwp) ::  ind_tc2_gfl           = 30   !< index in input list for thermal conductivity at second wall layer,
419                                                  !< ground floor level
420    INTEGER(iwp) ::  ind_tc2_wall_r        = 98   !< index in input list for thermal conductivity at second wall layer, roof
421    INTEGER(iwp) ::  ind_tc2_win_agfl      = 87   !< index in input list for thermal conductivity at second window layer,
422                                                  !< above ground floor level
423    INTEGER(iwp) ::  ind_tc2_win_gfl       = 75   !< index in input list for thermal conductivity at second window layer,
424                                                  !< ground floor level
425    INTEGER(iwp) ::  ind_tc2_win_r         = 111  !< index in input list for thermal conductivity at second window layer,
426                                                  !< ground floor level
427    INTEGER(iwp) ::  ind_tc3_agfl          = 11   !< index in input list for thermal conductivity at third wall layer,
428                                                  !< above ground floor level
429    INTEGER(iwp) ::  ind_tc3_gfl           = 31   !< index in input list for thermal conductivity at third wall layer,
430                                                  !< ground floor level
431    INTEGER(iwp) ::  ind_tc3_wall_r        = 99   !< index in input list for thermal conductivity at third wall layer, roof
432    INTEGER(iwp) ::  ind_tc3_win_agfl      = 88   !< index in input list for thermal conductivity at third window layer,
433                                                  !< above ground floor level
434    INTEGER(iwp) ::  ind_tc3_win_gfl       = 76   !< index in input list for thermal conductivity at third window layer,
435                                                  !< ground floor level
436    INTEGER(iwp) ::  ind_tc3_win_r         = 112  !< index in input list for thermal conductivity at third window layer, roof
437    INTEGER(iwp) ::  ind_thick_1_agfl      = 41   !< index for wall layer thickness - 1st layer above ground floor level
438    INTEGER(iwp) ::  ind_thick_1_gfl       = 62   !< index for wall layer thickness - 1st layer ground floor level
439    INTEGER(iwp) ::  ind_thick_1_wall_r    = 90   !< index for wall layer thickness - 1st layer roof
440    INTEGER(iwp) ::  ind_thick_1_win_agfl  = 79   !< index for window layer thickness - 1st layer above ground floor level
441    INTEGER(iwp) ::  ind_thick_1_win_gfl   = 67   !< index for window layer thickness - 1st layer ground floor level
442    INTEGER(iwp) ::  ind_thick_1_win_r     = 103  !< index for window layer thickness - 1st layer roof
443    INTEGER(iwp) ::  ind_thick_2_agfl      = 42   !< index for wall layer thickness - 2nd layer above ground floor level
444    INTEGER(iwp) ::  ind_thick_2_gfl       = 63   !< index for wall layer thickness - 2nd layer ground floor level
445    INTEGER(iwp) ::  ind_thick_2_wall_r    = 91   !< index for wall layer thickness - 2nd layer roof
446    INTEGER(iwp) ::  ind_thick_2_win_agfl  = 80   !< index for window layer thickness - 2nd layer above ground floor level
447    INTEGER(iwp) ::  ind_thick_2_win_gfl   = 68   !< index for window layer thickness - 2nd layer ground floor level
448    INTEGER(iwp) ::  ind_thick_2_win_r     = 104  !< index for window layer thickness - 2nd layer roof
449    INTEGER(iwp) ::  ind_thick_3_agfl      = 43   !< index for wall layer thickness - 3rd layer above ground floor level
450    INTEGER(iwp) ::  ind_thick_3_gfl       = 64   !< index for wall layer thickness - 3rd layer ground floor level
451    INTEGER(iwp) ::  ind_thick_3_wall_r    = 92   !< index for wall layer thickness - 3rd layer roof
452    INTEGER(iwp) ::  ind_thick_3_win_agfl  = 81   !< index for window layer thickness - 3rd layer above ground floor level
453    INTEGER(iwp) ::  ind_thick_3_win_gfl   = 69   !< index for window layer thickness - 3rd layer ground floor level 
454    INTEGER(iwp) ::  ind_thick_3_win_r     = 105  !< index for window layer thickness - 3rd layer roof
455    INTEGER(iwp) ::  ind_thick_4_agfl      = 44   !< index for wall layer thickness - 4th layer above ground floor level
456    INTEGER(iwp) ::  ind_thick_4_gfl       = 65   !< index for wall layer thickness - 4th layer ground floor level
457    INTEGER(iwp) ::  ind_thick_4_wall_r    = 93   !< index for wall layer thickness - 4st layer roof
458    INTEGER(iwp) ::  ind_thick_4_win_agfl  = 82   !< index for window layer thickness - 4th layer above ground floor level
459    INTEGER(iwp) ::  ind_thick_4_win_gfl   = 70   !< index for window layer thickness - 4th layer ground floor level
460    INTEGER(iwp) ::  ind_thick_4_win_r     = 106  !< index for window layer thickness - 4th layer roof
461    INTEGER(iwp) ::  ind_trans_agfl        = 17   !< index in input list for window transmissivity, above ground floor level
462    INTEGER(iwp) ::  ind_trans_gfl         = 35   !< index in input list for window transmissivity, ground floor level
463    INTEGER(iwp) ::  ind_trans_r           = 114  !< index in input list for window transmissivity, roof
464    INTEGER(iwp) ::  ind_wall_frac_agfl    = 0    !< index in input list for wall fraction, above ground floor level
465    INTEGER(iwp) ::  ind_wall_frac_gfl     = 21   !< index in input list for wall fraction, ground floor level
466    INTEGER(iwp) ::  ind_wall_frac_r       = 89   !< index in input list for wall fraction, roof
467    INTEGER(iwp) ::  ind_win_frac_agfl     = 1    !< index in input list for window fraction, above ground floor level
468    INTEGER(iwp) ::  ind_win_frac_gfl      = 22   !< index in input list for window fraction, ground floor level
469    INTEGER(iwp) ::  ind_win_frac_r        = 102  !< index in input list for window fraction, roof
470    INTEGER(iwp) ::  ind_z0_agfl           = 18   !< index in input list for z0, above ground floor level
471    INTEGER(iwp) ::  ind_z0_gfl            = 36   !< index in input list for z0, ground floor level
472    INTEGER(iwp) ::  ind_z0qh_agfl         = 19   !< index in input list for z0h / z0q, above ground floor level
473    INTEGER(iwp) ::  ind_z0qh_gfl          = 37   !< index in input list for z0h / z0q, ground floor level
474    INTEGER(iwp) ::  ind_green_type_roof   = 118  !< index in input list for type of green roof
475!
476!-- Indices of input attributes in building_surface_pars (except for
477!-- radiation-related, which are in radiation_model_mod)
478    INTEGER(iwp) ::  ind_s_wall_frac                 = 0  !< index for wall fraction (0-1)
479    INTEGER(iwp) ::  ind_s_win_frac                  = 1  !< index for window fraction (0-1)
480    INTEGER(iwp) ::  ind_s_green_frac_w              = 2  !< index for green fraction on wall (0-1)
481    INTEGER(iwp) ::  ind_s_green_frac_r              = 3  !< index for green fraction on roof (0-1)
482    INTEGER(iwp) ::  ind_s_lai_r                     = 4  !< index for leaf area index of green fraction
483    INTEGER(iwp) ::  ind_s_hc1                       = 5  !< index for heat capacity of wall layer 1
484    INTEGER(iwp) ::  ind_s_hc2                       = 6  !< index for heat capacity of wall layer 2
485    INTEGER(iwp) ::  ind_s_hc3                       = 7  !< index for heat capacity of wall layer 3
486    INTEGER(iwp) ::  ind_s_tc1                       = 8  !< index for thermal conducivity of wall layer 1
487    INTEGER(iwp) ::  ind_s_tc2                       = 9  !< index for thermal conducivity of wall layer 2
488    INTEGER(iwp) ::  ind_s_tc3                       = 10 !< index for thermal conducivity of wall layer 3
489    INTEGER(iwp) ::  ind_s_indoor_target_temp_summer = 11 !< index for indoor target summer temperature
490    INTEGER(iwp) ::  ind_s_indoor_target_temp_winter = 12 !< index for indoor target winter temperature
491    INTEGER(iwp) ::  ind_s_emis_wall                 = 13 !< index for emissivity of wall fraction (0-1)
492    INTEGER(iwp) ::  ind_s_emis_green                = 14 !< index for emissivity of green fraction (0-1)
493    INTEGER(iwp) ::  ind_s_emis_win                  = 15 !< index for emissivity o f window fraction (0-1)
494    INTEGER(iwp) ::  ind_s_trans                     = 16 !< index for transmissivity of window fraction (0-1)
495    INTEGER(iwp) ::  ind_s_z0                        = 17 !< index for roughness length for momentum (m)
496    INTEGER(iwp) ::  ind_s_z0qh                      = 18 !< index for roughness length for heat (m)
497
498    REAL(wp)  ::  roof_height_limit = 4.0_wp         !< height for distinguish between land surfaces and roofs
499    REAL(wp)  ::  ground_floor_level = 4.0_wp        !< default ground floor level
500
501
502    CHARACTER(37), DIMENSION(0:7), PARAMETER :: building_type_name = (/     &
503                                   'user-defined                         ', &  !< type 0
504                                   'residential - 1950                   ', &  !< type  1
505                                   'residential 1951 - 2000              ', &  !< type  2
506                                   'residential 2001 -                   ', &  !< type  3
507                                   'office - 1950                        ', &  !< type  4
508                                   'office 1951 - 2000                   ', &  !< type  5
509                                   'office 2001 -                        ', &  !< type  6
510                                   'bridges                              '  &  !< type  7
511                                                                     /)
512
513
514!
515!-- Building facade/wall/green/window properties (partly according to PIDS).
516!-- Initialization of building_pars is outsourced to usm_init_pars. This is
517!-- needed because of the huge number of attributes given in building_pars
518!-- (>700), while intel and gfortran compiler have hard limit of continuation
519!-- lines of 511.
520    REAL(wp), DIMENSION(0:135,1:7) ::  building_pars
521!
522!-- Type for surface temperatures at vertical walls. Is not necessary for horizontal walls.
523    TYPE t_surf_vertical
524       REAL(wp), DIMENSION(:), ALLOCATABLE         :: t
525    END TYPE t_surf_vertical
526!
527!-- Type for wall temperatures at vertical walls. Is not necessary for horizontal walls.
528    TYPE t_wall_vertical
529       REAL(wp), DIMENSION(:,:), ALLOCATABLE       :: t
530    END TYPE t_wall_vertical
531
532    TYPE surf_type_usm
533       REAL(wp), DIMENSION(:),   ALLOCATABLE ::  var_usm_1d  !< 1D prognostic variable
534       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  var_usm_2d  !< 2D prognostic variable
535    END TYPE surf_type_usm
536   
537    TYPE(surf_type_usm), POINTER  ::  m_liq_usm_h,        &  !< liquid water reservoir (m), horizontal surface elements
538                                      m_liq_usm_h_p          !< progn. liquid water reservoir (m), horizontal surface elements
539
540    TYPE(surf_type_usm), TARGET   ::  m_liq_usm_h_1,      &  !<
541                                      m_liq_usm_h_2          !<
542
543    TYPE(surf_type_usm), DIMENSION(:), POINTER  ::        &
544                                      m_liq_usm_v,        &  !< liquid water reservoir (m), vertical surface elements
545                                      m_liq_usm_v_p          !< progn. liquid water reservoir (m), vertical surface elements
546
547    TYPE(surf_type_usm), DIMENSION(0:3), TARGET   ::      &
548                                      m_liq_usm_v_1,      &  !<
549                                      m_liq_usm_v_2          !<
550
551    TYPE(surf_type_usm), TARGET ::  tm_liq_usm_h_m      !< liquid water reservoir tendency (m), horizontal surface elements
552    TYPE(surf_type_usm), DIMENSION(0:3), TARGET ::  tm_liq_usm_v_m      !< liquid water reservoir tendency (m),
553                                                                        !< vertical surface elements
554
555!
556!-- anthropogenic heat sources
557    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE        ::  aheat             !< daily average of anthropogenic heat (W/m2)
558    REAL(wp), DIMENSION(:,:), ALLOCATABLE          ::  aheatprof         !< diurnal profiles of anthropogenic heat
559                                                                         !< for particular layers
560    INTEGER(iwp)                                   ::  naheatlayers = 1  !< number of layers of anthropogenic heat
561
562!
563!-- wall surface model
564!-- wall surface model constants
565    INTEGER(iwp), PARAMETER                        :: nzb_wall = 0       !< inner side of the wall model (to be switched)
566    INTEGER(iwp), PARAMETER                        :: nzt_wall = 3       !< outer side of the wall model (to be switched)
567    INTEGER(iwp), PARAMETER                        :: nzw = 4            !< number of wall layers (fixed for now)
568
569    REAL(wp), DIMENSION(nzb_wall:nzt_wall)         :: zwn_default        = (/0.0242_wp, 0.0969_wp, 0.346_wp, 1.0_wp /)
570    REAL(wp), DIMENSION(nzb_wall:nzt_wall)         :: zwn_default_window = (/0.25_wp,   0.5_wp,    0.75_wp,  1.0_wp /)
571    REAL(wp), DIMENSION(nzb_wall:nzt_wall)         :: zwn_default_green  = (/0.25_wp,   0.5_wp,    0.75_wp,  1.0_wp /)
572                                                                         !< normalized soil, wall and roof, window and
573                                                                         !<green layer depths (m/m)
574
575    REAL(wp)                                       :: wall_inner_temperature   = 295.0_wp    !< temperature of the inner wall
576                                                                                             !< surface (~22 degrees C) (K)
577    REAL(wp)                                       :: roof_inner_temperature   = 295.0_wp    !< temperature of the inner roof
578                                                                                             !< surface (~22 degrees C) (K)
579    REAL(wp)                                       :: soil_inner_temperature   = 288.0_wp    !< temperature of the deep soil
580                                                                                             !< (~15 degrees C) (K)
581    REAL(wp)                                       :: window_inner_temperature = 295.0_wp    !< temperature of the inner window
582                                                                                             !< surface (~22 degrees C) (K)
583
584    REAL(wp)                                       :: m_total = 0.0_wp  !< weighted total water content of the soil (m3/m3)
585    INTEGER(iwp)                                   :: soil_type
586
587!
588!-- surface and material model variables for walls, ground, roofs
589    REAL(wp), DIMENSION(:), ALLOCATABLE            :: zwn                !< normalized wall layer depths (m)
590    REAL(wp), DIMENSION(:), ALLOCATABLE            :: zwn_window         !< normalized window layer depths (m)
591    REAL(wp), DIMENSION(:), ALLOCATABLE            :: zwn_green          !< normalized green layer depths (m)
592
593    REAL(wp), DIMENSION(:), POINTER                :: t_surf_wall_h
594    REAL(wp), DIMENSION(:), POINTER                :: t_surf_wall_h_p 
595    REAL(wp), DIMENSION(:), POINTER                :: t_surf_window_h
596    REAL(wp), DIMENSION(:), POINTER                :: t_surf_window_h_p 
597    REAL(wp), DIMENSION(:), POINTER                :: t_surf_green_h
598    REAL(wp), DIMENSION(:), POINTER                :: t_surf_green_h_p 
599
600    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    :: t_surf_wall_h_1
601    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    :: t_surf_wall_h_2
602    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    :: t_surf_window_h_1
603    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    :: t_surf_window_h_2
604    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    :: t_surf_green_h_1
605    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    :: t_surf_green_h_2
606
607    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_wall_v
608    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_wall_v_p
609    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_window_v
610    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_window_v_p
611    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_green_v
612    TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_green_v_p
613
614    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  :: t_surf_wall_v_1
615    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  :: t_surf_wall_v_2
616    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  :: t_surf_window_v_1
617    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  :: t_surf_window_v_2
618    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  :: t_surf_green_v_1
619    TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  :: t_surf_green_v_2
620
621!
622!-- Energy balance variables
623!-- parameters of the land, roof and wall surfaces
624
625    REAL(wp), DIMENSION(:,:), POINTER                :: t_wall_h, t_wall_h_p
626    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    :: t_wall_h_1, t_wall_h_2
627    REAL(wp), DIMENSION(:,:), POINTER                :: t_window_h, t_window_h_p
628    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    :: t_window_h_1, t_window_h_2
629    REAL(wp), DIMENSION(:,:), POINTER                :: t_green_h, t_green_h_p
630    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    :: t_green_h_1, t_green_h_2
631    REAL(wp), DIMENSION(:,:), POINTER                :: swc_h, rootfr_h, wilt_h, fc_h, swc_sat_h, swc_h_p, swc_res_h
632    REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    :: swc_h_1, rootfr_h_1, &
633                                                        wilt_h_1, fc_h_1, swc_sat_h_1, swc_h_2, swc_res_h_1
634   
635
636    TYPE(t_wall_vertical), DIMENSION(:), POINTER   :: t_wall_v, t_wall_v_p
637    TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  :: t_wall_v_1, t_wall_v_2
638    TYPE(t_wall_vertical), DIMENSION(:), POINTER   :: t_window_v, t_window_v_p
639    TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  :: t_window_v_1, t_window_v_2
640    TYPE(t_wall_vertical), DIMENSION(:), POINTER   :: t_green_v, t_green_v_p
641    TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  :: t_green_v_1, t_green_v_2
642    TYPE(t_wall_vertical), DIMENSION(:), POINTER   :: swc_v, swc_v_p
643    TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  :: swc_v_1, swc_v_2
644
645!
646!-- Surface and material parameters classes (surface_type)
647!-- albedo, emissivity, lambda_surf, roughness, thickness, volumetric heat capacity, thermal conductivity
648    INTEGER(iwp)                                   :: n_surface_types       !< number of the wall type categories
649    INTEGER(iwp), PARAMETER                        :: n_surface_params = 9  !< number of parameters for each type of the wall
650    INTEGER(iwp), PARAMETER                        :: ialbedo  = 1          !< albedo of the surface
651    INTEGER(iwp), PARAMETER                        :: iemiss   = 2          !< emissivity of the surface
652    INTEGER(iwp), PARAMETER                        :: ilambdas = 3          !< heat conductivity lambda S between surface
653                                                                            !< and material ( W m-2 K-1 )
654    INTEGER(iwp), PARAMETER                        :: irough   = 4          !< roughness length z0 for movements
655    INTEGER(iwp), PARAMETER                        :: iroughh  = 5          !< roughness length z0h for scalars
656                                                                            !< (heat, humidity,...)
657    INTEGER(iwp), PARAMETER                        :: icsurf   = 6          !< Surface skin layer heat capacity (J m-2 K-1 )
658    INTEGER(iwp), PARAMETER                        :: ithick   = 7          !< thickness of the surface (wall, roof, land)  ( m )
659    INTEGER(iwp), PARAMETER                        :: irhoC    = 8          !< volumetric heat capacity rho*C of
660                                                                            !< the material ( J m-3 K-1 )
661    INTEGER(iwp), PARAMETER                        :: ilambdah = 9          !< thermal conductivity lambda H
662                                                                            !< of the wall (W m-1 K-1 )
663    CHARACTER(12), DIMENSION(:), ALLOCATABLE       :: surface_type_names    !< names of wall types (used only for reports)
664    INTEGER(iwp), DIMENSION(:), ALLOCATABLE        :: surface_type_codes    !< codes of wall types
665    REAL(wp), DIMENSION(:,:), ALLOCATABLE          :: surface_params        !< parameters of wall types
666
667!
668!-- interfaces of subroutines accessed from outside of this module
669    INTERFACE usm_3d_data_averaging
670       MODULE PROCEDURE usm_3d_data_averaging
671    END INTERFACE usm_3d_data_averaging
672
673    INTERFACE usm_boundary_condition
674       MODULE PROCEDURE usm_boundary_condition
675    END INTERFACE usm_boundary_condition
676
677    INTERFACE usm_check_data_output
678       MODULE PROCEDURE usm_check_data_output
679    END INTERFACE usm_check_data_output
680   
681    INTERFACE usm_check_parameters
682       MODULE PROCEDURE usm_check_parameters
683    END INTERFACE usm_check_parameters
684   
685    INTERFACE usm_data_output_3d
686       MODULE PROCEDURE usm_data_output_3d
687    END INTERFACE usm_data_output_3d
688   
689    INTERFACE usm_define_netcdf_grid
690       MODULE PROCEDURE usm_define_netcdf_grid
691    END INTERFACE usm_define_netcdf_grid
692
693    INTERFACE usm_init
694       MODULE PROCEDURE usm_init
695    END INTERFACE usm_init
696
697    INTERFACE usm_init_arrays
698       MODULE PROCEDURE usm_init_arrays
699    END INTERFACE usm_init_arrays
700
701    INTERFACE usm_material_heat_model
702       MODULE PROCEDURE usm_material_heat_model
703    END INTERFACE usm_material_heat_model
704   
705    INTERFACE usm_green_heat_model
706       MODULE PROCEDURE usm_green_heat_model
707    END INTERFACE usm_green_heat_model
708   
709    INTERFACE usm_parin
710       MODULE PROCEDURE usm_parin
711    END INTERFACE usm_parin
712
713    INTERFACE usm_rrd_local 
714       MODULE PROCEDURE usm_rrd_local
715    END INTERFACE usm_rrd_local
716
717    INTERFACE usm_surface_energy_balance
718       MODULE PROCEDURE usm_surface_energy_balance
719    END INTERFACE usm_surface_energy_balance
720   
721    INTERFACE usm_swap_timelevel
722       MODULE PROCEDURE usm_swap_timelevel
723    END INTERFACE usm_swap_timelevel
724       
725    INTERFACE usm_wrd_local
726       MODULE PROCEDURE usm_wrd_local
727    END INTERFACE usm_wrd_local
728
729   
730    SAVE
731
732    PRIVATE 
733
734!
735!-- Public functions
736    PUBLIC usm_boundary_condition, usm_check_parameters, usm_init,               &
737           usm_rrd_local,                                                        & 
738           usm_surface_energy_balance, usm_material_heat_model,                  &
739           usm_swap_timelevel, usm_check_data_output, usm_3d_data_averaging,     &
740           usm_data_output_3d, usm_define_netcdf_grid, usm_parin,                &
741           usm_wrd_local, usm_init_arrays
742
743!
744!-- Public parameters, constants and initial values
745    PUBLIC usm_anthropogenic_heat, usm_material_model, usm_wall_mod, &
746           usm_green_heat_model, building_pars,                      &
747           nzb_wall, nzt_wall, t_wall_h, t_wall_v,                   &
748           t_window_h, t_window_v, building_type
749
750
751
752 CONTAINS
753
754!------------------------------------------------------------------------------!
755! Description:
756! ------------
757!> This subroutine creates the necessary indices of the urban surfaces
758!> and plant canopy and it allocates the needed arrays for USM
759!------------------------------------------------------------------------------!
760    SUBROUTINE usm_init_arrays
761   
762        IMPLICIT NONE
763       
764        INTEGER(iwp) ::  l
765
766        IF ( debug_output )  CALL debug_message( 'usm_init_arrays', 'start' )
767
768!
769!--     Allocate radiation arrays which are part of the new data type.
770!--     For horizontal surfaces.
771        ALLOCATE ( surf_usm_h%surfhf(1:surf_usm_h%ns)    )
772        ALLOCATE ( surf_usm_h%rad_net_l(1:surf_usm_h%ns) )
773!
774!--     For vertical surfaces
775        DO  l = 0, 3
776           ALLOCATE ( surf_usm_v(l)%surfhf(1:surf_usm_v(l)%ns)    )
777           ALLOCATE ( surf_usm_v(l)%rad_net_l(1:surf_usm_v(l)%ns) )
778        ENDDO
779
780!
781!--     Wall surface model
782!--     allocate arrays for wall surface model and define pointers
783!--     allocate array of wall types and wall parameters
784        ALLOCATE ( surf_usm_h%surface_types(1:surf_usm_h%ns)      )
785        ALLOCATE ( surf_usm_h%building_type(1:surf_usm_h%ns)      )
786        ALLOCATE ( surf_usm_h%building_type_name(1:surf_usm_h%ns) )
787        surf_usm_h%building_type      = 0
788        surf_usm_h%building_type_name = 'none'
789        DO  l = 0, 3
790           ALLOCATE ( surf_usm_v(l)%surface_types(1:surf_usm_v(l)%ns)      )
791           ALLOCATE ( surf_usm_v(l)%building_type(1:surf_usm_v(l)%ns)      )
792           ALLOCATE ( surf_usm_v(l)%building_type_name(1:surf_usm_v(l)%ns) )
793           surf_usm_v(l)%building_type      = 0
794           surf_usm_v(l)%building_type_name = 'none'
795        ENDDO
796!
797!--     Allocate albedo_type and albedo. Each surface element
798!--     has 3 values, 0: wall fraction, 1: green fraction, 2: window fraction.
799        ALLOCATE ( surf_usm_h%albedo_type(0:2,1:surf_usm_h%ns) )
800        ALLOCATE ( surf_usm_h%albedo(0:2,1:surf_usm_h%ns)      )
801        surf_usm_h%albedo_type = albedo_type
802        DO  l = 0, 3
803           ALLOCATE ( surf_usm_v(l)%albedo_type(0:2,1:surf_usm_v(l)%ns) )
804           ALLOCATE ( surf_usm_v(l)%albedo(0:2,1:surf_usm_v(l)%ns)      )
805           surf_usm_v(l)%albedo_type = albedo_type
806        ENDDO       
807
808!
809!--     Allocate indoor target temperature for summer and winter
810        ALLOCATE ( surf_usm_h%target_temp_summer(1:surf_usm_h%ns) )
811        ALLOCATE ( surf_usm_h%target_temp_winter(1:surf_usm_h%ns) )
812        DO  l = 0, 3
813           ALLOCATE ( surf_usm_v(l)%target_temp_summer(1:surf_usm_v(l)%ns) )
814           ALLOCATE ( surf_usm_v(l)%target_temp_winter(1:surf_usm_v(l)%ns) )
815        ENDDO
816!
817!--     In case the indoor model is applied, allocate memory for waste heat
818!--     and indoor temperature.
819        IF ( indoor_model )  THEN
820           ALLOCATE ( surf_usm_h%waste_heat(1:surf_usm_h%ns) )
821           surf_usm_h%waste_heat = 0.0_wp
822           DO  l = 0, 3
823              ALLOCATE ( surf_usm_v(l)%waste_heat(1:surf_usm_v(l)%ns) )
824              surf_usm_v(l)%waste_heat = 0.0_wp
825           ENDDO
826        ENDIF
827!
828!--     Allocate flag indicating ground floor level surface elements
829        ALLOCATE ( surf_usm_h%ground_level(1:surf_usm_h%ns) ) 
830        DO  l = 0, 3
831           ALLOCATE ( surf_usm_v(l)%ground_level(1:surf_usm_v(l)%ns) )
832        ENDDO   
833!
834!--      Allocate arrays for relative surface fraction.
835!--      0 - wall fraction, 1 - green fraction, 2 - window fraction
836         ALLOCATE ( surf_usm_h%frac(0:2,1:surf_usm_h%ns) )
837         surf_usm_h%frac = 0.0_wp
838         DO  l = 0, 3
839            ALLOCATE ( surf_usm_v(l)%frac(0:2,1:surf_usm_v(l)%ns) )
840            surf_usm_v(l)%frac = 0.0_wp
841         ENDDO
842
843!
844!--     wall and roof surface parameters. First for horizontal surfaces
845        ALLOCATE ( surf_usm_h%isroof_surf(1:surf_usm_h%ns)        )
846        ALLOCATE ( surf_usm_h%lambda_surf(1:surf_usm_h%ns)        )
847        ALLOCATE ( surf_usm_h%lambda_surf_window(1:surf_usm_h%ns) )
848        ALLOCATE ( surf_usm_h%lambda_surf_green(1:surf_usm_h%ns)  )
849        ALLOCATE ( surf_usm_h%c_surface(1:surf_usm_h%ns)          )
850        ALLOCATE ( surf_usm_h%c_surface_window(1:surf_usm_h%ns)   )
851        ALLOCATE ( surf_usm_h%c_surface_green(1:surf_usm_h%ns)    )
852        ALLOCATE ( surf_usm_h%transmissivity(1:surf_usm_h%ns)     )
853        ALLOCATE ( surf_usm_h%lai(1:surf_usm_h%ns)                )
854        ALLOCATE ( surf_usm_h%emissivity(0:2,1:surf_usm_h%ns)     )
855        ALLOCATE ( surf_usm_h%r_a(1:surf_usm_h%ns)                )
856        ALLOCATE ( surf_usm_h%r_a_green(1:surf_usm_h%ns)          )
857        ALLOCATE ( surf_usm_h%r_a_window(1:surf_usm_h%ns)         )
858        ALLOCATE ( surf_usm_h%green_type_roof(1:surf_usm_h%ns)    )
859        ALLOCATE ( surf_usm_h%r_s(1:surf_usm_h%ns)                )
860       
861!
862!--     For vertical surfaces.
863        DO  l = 0, 3
864           ALLOCATE ( surf_usm_v(l)%lambda_surf(1:surf_usm_v(l)%ns)        )
865           ALLOCATE ( surf_usm_v(l)%c_surface(1:surf_usm_v(l)%ns)          )
866           ALLOCATE ( surf_usm_v(l)%lambda_surf_window(1:surf_usm_v(l)%ns) )
867           ALLOCATE ( surf_usm_v(l)%c_surface_window(1:surf_usm_v(l)%ns)   )
868           ALLOCATE ( surf_usm_v(l)%lambda_surf_green(1:surf_usm_v(l)%ns)  )
869           ALLOCATE ( surf_usm_v(l)%c_surface_green(1:surf_usm_v(l)%ns)    )
870           ALLOCATE ( surf_usm_v(l)%transmissivity(1:surf_usm_v(l)%ns)     )
871           ALLOCATE ( surf_usm_v(l)%lai(1:surf_usm_v(l)%ns)                )
872           ALLOCATE ( surf_usm_v(l)%emissivity(0:2,1:surf_usm_v(l)%ns)     )
873           ALLOCATE ( surf_usm_v(l)%r_a(1:surf_usm_v(l)%ns)                )
874           ALLOCATE ( surf_usm_v(l)%r_a_green(1:surf_usm_v(l)%ns)          )
875           ALLOCATE ( surf_usm_v(l)%r_a_window(1:surf_usm_v(l)%ns)         )           
876           ALLOCATE ( surf_usm_v(l)%r_s(1:surf_usm_v(l)%ns)                )
877        ENDDO
878
879!       
880!--     allocate wall and roof material parameters. First for horizontal surfaces
881        ALLOCATE ( surf_usm_h%thickness_wall(1:surf_usm_h%ns)                    )
882        ALLOCATE ( surf_usm_h%thickness_window(1:surf_usm_h%ns)                  )
883        ALLOCATE ( surf_usm_h%thickness_green(1:surf_usm_h%ns)                   )
884        ALLOCATE ( surf_usm_h%lambda_h(nzb_wall:nzt_wall,1:surf_usm_h%ns)        )
885        ALLOCATE ( surf_usm_h%rho_c_wall(nzb_wall:nzt_wall,1:surf_usm_h%ns)      )
886        ALLOCATE ( surf_usm_h%lambda_h_window(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
887        ALLOCATE ( surf_usm_h%rho_c_window(nzb_wall:nzt_wall,1:surf_usm_h%ns)    )
888        ALLOCATE ( surf_usm_h%lambda_h_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)  )
889        ALLOCATE ( surf_usm_h%rho_c_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)     )
890
891        ALLOCATE ( surf_usm_h%rho_c_total_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)    )
892        ALLOCATE ( surf_usm_h%n_vg_green(1:surf_usm_h%ns)                             )
893        ALLOCATE ( surf_usm_h%alpha_vg_green(1:surf_usm_h%ns)                         )
894        ALLOCATE ( surf_usm_h%l_vg_green(1:surf_usm_h%ns)                             )
895        ALLOCATE ( surf_usm_h%gamma_w_green_sat(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)  )
896        ALLOCATE ( surf_usm_h%lambda_w_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)       )
897        ALLOCATE ( surf_usm_h%gamma_w_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)        )
898        ALLOCATE ( surf_usm_h%tswc_h_m(nzb_wall:nzt_wall,1:surf_usm_h%ns)             )
899
900!
901!--     For vertical surfaces.
902        DO  l = 0, 3
903           ALLOCATE ( surf_usm_v(l)%thickness_wall(1:surf_usm_v(l)%ns)                    )
904           ALLOCATE ( surf_usm_v(l)%thickness_window(1:surf_usm_v(l)%ns)                  )
905           ALLOCATE ( surf_usm_v(l)%thickness_green(1:surf_usm_v(l)%ns)                   )
906           ALLOCATE ( surf_usm_v(l)%lambda_h(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)        )
907           ALLOCATE ( surf_usm_v(l)%rho_c_wall(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)      )
908           ALLOCATE ( surf_usm_v(l)%lambda_h_window(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
909           ALLOCATE ( surf_usm_v(l)%rho_c_window(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)    )
910           ALLOCATE ( surf_usm_v(l)%lambda_h_green(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)  )
911           ALLOCATE ( surf_usm_v(l)%rho_c_green(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)     )
912        ENDDO
913
914!
915!--     allocate green wall and roof vegetation and soil parameters. First horizontal surfaces
916        ALLOCATE ( surf_usm_h%g_d(1:surf_usm_h%ns)              )
917        ALLOCATE ( surf_usm_h%c_liq(1:surf_usm_h%ns)            )
918        ALLOCATE ( surf_usm_h%qsws_liq(1:surf_usm_h%ns)         )
919        ALLOCATE ( surf_usm_h%qsws_veg(1:surf_usm_h%ns)         )
920        ALLOCATE ( surf_usm_h%r_canopy(1:surf_usm_h%ns)         )
921        ALLOCATE ( surf_usm_h%r_canopy_min(1:surf_usm_h%ns)     )
922        ALLOCATE ( surf_usm_h%pt_10cm(1:surf_usm_h%ns)          ) 
923
924!
925!--     For vertical surfaces.
926        DO  l = 0, 3
927          ALLOCATE ( surf_usm_v(l)%g_d(1:surf_usm_v(l)%ns)              )
928          ALLOCATE ( surf_usm_v(l)%c_liq(1:surf_usm_v(l)%ns)            )
929          ALLOCATE ( surf_usm_v(l)%qsws_liq(1:surf_usm_v(l)%ns)         )
930          ALLOCATE ( surf_usm_v(l)%qsws_veg(1:surf_usm_v(l)%ns)         )
931          ALLOCATE ( surf_usm_v(l)%r_canopy(1:surf_usm_v(l)%ns)         )
932          ALLOCATE ( surf_usm_v(l)%r_canopy_min(1:surf_usm_v(l)%ns)     )
933          ALLOCATE ( surf_usm_v(l)%pt_10cm(1:surf_usm_v(l)%ns)          )
934        ENDDO
935
936!
937!--     allocate wall and roof layers sizes. For horizontal surfaces.
938        ALLOCATE ( zwn(nzb_wall:nzt_wall)                                        )
939        ALLOCATE ( surf_usm_h%dz_wall(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)       )
940        ALLOCATE ( zwn_window(nzb_wall:nzt_wall)                                 )
941        ALLOCATE ( surf_usm_h%dz_window(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)     )
942        ALLOCATE ( zwn_green(nzb_wall:nzt_wall)                                  )
943        ALLOCATE ( surf_usm_h%dz_green(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)      )
944        ALLOCATE ( surf_usm_h%ddz_wall(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)      )
945        ALLOCATE ( surf_usm_h%dz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)    )
946        ALLOCATE ( surf_usm_h%ddz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)   )
947        ALLOCATE ( surf_usm_h%zw(nzb_wall:nzt_wall,1:surf_usm_h%ns)              )
948        ALLOCATE ( surf_usm_h%ddz_window(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)    )
949        ALLOCATE ( surf_usm_h%dz_window_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)  )
950        ALLOCATE ( surf_usm_h%ddz_window_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
951        ALLOCATE ( surf_usm_h%zw_window(nzb_wall:nzt_wall,1:surf_usm_h%ns)       )
952        ALLOCATE ( surf_usm_h%ddz_green(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)     )
953        ALLOCATE ( surf_usm_h%dz_green_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)   )
954        ALLOCATE ( surf_usm_h%ddz_green_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)  )
955        ALLOCATE ( surf_usm_h%zw_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)        )
956
957!
958!--     For vertical surfaces.
959        DO  l = 0, 3
960           ALLOCATE ( surf_usm_v(l)%dz_wall(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)       )
961           ALLOCATE ( surf_usm_v(l)%dz_window(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)     )
962           ALLOCATE ( surf_usm_v(l)%dz_green(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)      )
963           ALLOCATE ( surf_usm_v(l)%ddz_wall(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)      )
964           ALLOCATE ( surf_usm_v(l)%dz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)    )
965           ALLOCATE ( surf_usm_v(l)%ddz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)   )
966           ALLOCATE ( surf_usm_v(l)%zw(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)              )
967           ALLOCATE ( surf_usm_v(l)%ddz_window(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)    )
968           ALLOCATE ( surf_usm_v(l)%dz_window_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)  )
969           ALLOCATE ( surf_usm_v(l)%ddz_window_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
970           ALLOCATE ( surf_usm_v(l)%zw_window(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)       )
971           ALLOCATE ( surf_usm_v(l)%ddz_green(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)     )
972           ALLOCATE ( surf_usm_v(l)%dz_green_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)   )
973           ALLOCATE ( surf_usm_v(l)%ddz_green_stag(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)  )
974           ALLOCATE ( surf_usm_v(l)%zw_green(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns)        )
975        ENDDO
976
977!
978!--     allocate wall and roof temperature arrays, for horizontal walls
979!
980!--     Allocate if required. Note, in case of restarts, some of these arrays
981!--     might be already allocated.
982        IF ( .NOT. ALLOCATED( t_surf_wall_h_1 ) )                              &
983           ALLOCATE ( t_surf_wall_h_1(1:surf_usm_h%ns) )
984        IF ( .NOT. ALLOCATED( t_surf_wall_h_2 ) )                              &
985           ALLOCATE ( t_surf_wall_h_2(1:surf_usm_h%ns) )
986        IF ( .NOT. ALLOCATED( t_wall_h_1 ) )                                   &           
987           ALLOCATE ( t_wall_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) ) 
988        IF ( .NOT. ALLOCATED( t_wall_h_2 ) )                                   &           
989           ALLOCATE ( t_wall_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )         
990        IF ( .NOT. ALLOCATED( t_surf_window_h_1 ) )                            &
991           ALLOCATE ( t_surf_window_h_1(1:surf_usm_h%ns) )
992        IF ( .NOT. ALLOCATED( t_surf_window_h_2 ) )                            &
993           ALLOCATE ( t_surf_window_h_2(1:surf_usm_h%ns) )
994        IF ( .NOT. ALLOCATED( t_window_h_1 ) )                                 &           
995           ALLOCATE ( t_window_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) ) 
996        IF ( .NOT. ALLOCATED( t_window_h_2 ) )                                 &           
997           ALLOCATE ( t_window_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )         
998        IF ( .NOT. ALLOCATED( t_surf_green_h_1 ) )                             &
999           ALLOCATE ( t_surf_green_h_1(1:surf_usm_h%ns) )
1000        IF ( .NOT. ALLOCATED( t_surf_green_h_2 ) )                             &
1001           ALLOCATE ( t_surf_green_h_2(1:surf_usm_h%ns) )
1002        IF ( .NOT. ALLOCATED( t_green_h_1 ) )                                  &           
1003           ALLOCATE ( t_green_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) ) 
1004        IF ( .NOT. ALLOCATED( t_green_h_2 ) )                                  &           
1005           ALLOCATE ( t_green_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )         
1006        IF ( .NOT. ALLOCATED( swc_h_1 ) )                                      &           
1007           ALLOCATE ( swc_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) ) 
1008        IF ( .NOT. ALLOCATED( swc_sat_h_1 ) )                                  &           
1009           ALLOCATE ( swc_sat_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) ) 
1010        IF ( .NOT. ALLOCATED( swc_res_h_1 ) )                                  &           
1011           ALLOCATE ( swc_res_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) ) 
1012        IF ( .NOT. ALLOCATED( swc_h_2 ) )                                      &           
1013           ALLOCATE ( swc_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1014        IF ( .NOT. ALLOCATED( rootfr_h_1 ) )                                   &           
1015           ALLOCATE ( rootfr_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) ) 
1016        IF ( .NOT. ALLOCATED( wilt_h_1 ) )                                     &           
1017           ALLOCATE ( wilt_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) ) 
1018        IF ( .NOT. ALLOCATED( fc_h_1 ) )                                       &           
1019           ALLOCATE ( fc_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) ) 
1020
1021        IF ( .NOT. ALLOCATED( m_liq_usm_h_1%var_usm_1d ) )                     &
1022           ALLOCATE ( m_liq_usm_h_1%var_usm_1d(1:surf_usm_h%ns) )
1023        IF ( .NOT. ALLOCATED( m_liq_usm_h_2%var_usm_1d ) )                     &
1024           ALLOCATE ( m_liq_usm_h_2%var_usm_1d(1:surf_usm_h%ns) )
1025           
1026!           
1027!--     initial assignment of the pointers
1028        t_wall_h    => t_wall_h_1;   t_wall_h_p   => t_wall_h_2
1029        t_window_h  => t_window_h_1; t_window_h_p => t_window_h_2
1030        t_green_h   => t_green_h_1;  t_green_h_p  => t_green_h_2
1031        t_surf_wall_h   => t_surf_wall_h_1;   t_surf_wall_h_p   => t_surf_wall_h_2           
1032        t_surf_window_h => t_surf_window_h_1; t_surf_window_h_p => t_surf_window_h_2 
1033        t_surf_green_h  => t_surf_green_h_1;  t_surf_green_h_p  => t_surf_green_h_2           
1034        m_liq_usm_h     => m_liq_usm_h_1;     m_liq_usm_h_p     => m_liq_usm_h_2
1035        swc_h     => swc_h_1; swc_h_p => swc_h_2
1036        swc_sat_h => swc_sat_h_1
1037        swc_res_h => swc_res_h_1
1038        rootfr_h  => rootfr_h_1
1039        wilt_h    => wilt_h_1
1040        fc_h      => fc_h_1
1041
1042!
1043!--     allocate wall and roof temperature arrays, for vertical walls if required
1044!
1045!--     Allocate if required. Note, in case of restarts, some of these arrays
1046!--     might be already allocated.
1047        DO  l = 0, 3
1048           IF ( .NOT. ALLOCATED( t_surf_wall_v_1(l)%t ) )                      &
1049              ALLOCATE ( t_surf_wall_v_1(l)%t(1:surf_usm_v(l)%ns) )
1050           IF ( .NOT. ALLOCATED( t_surf_wall_v_2(l)%t ) )                      &
1051              ALLOCATE ( t_surf_wall_v_2(l)%t(1:surf_usm_v(l)%ns) )
1052           IF ( .NOT. ALLOCATED( t_wall_v_1(l)%t ) )                           &           
1053              ALLOCATE ( t_wall_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) ) 
1054           IF ( .NOT. ALLOCATED( t_wall_v_2(l)%t ) )                           &           
1055              ALLOCATE ( t_wall_v_2(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) ) 
1056           IF ( .NOT. ALLOCATED( t_surf_window_v_1(l)%t ) )                    &
1057              ALLOCATE ( t_surf_window_v_1(l)%t(1:surf_usm_v(l)%ns) )
1058           IF ( .NOT. ALLOCATED( t_surf_window_v_2(l)%t ) )                    &
1059              ALLOCATE ( t_surf_window_v_2(l)%t(1:surf_usm_v(l)%ns) )
1060           IF ( .NOT. ALLOCATED( t_window_v_1(l)%t ) )                         &           
1061              ALLOCATE ( t_window_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) ) 
1062           IF ( .NOT. ALLOCATED( t_window_v_2(l)%t ) )                         &           
1063              ALLOCATE ( t_window_v_2(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) ) 
1064           IF ( .NOT. ALLOCATED( t_surf_green_v_1(l)%t ) )                     &
1065              ALLOCATE ( t_surf_green_v_1(l)%t(1:surf_usm_v(l)%ns) )
1066           IF ( .NOT. ALLOCATED( t_surf_green_v_2(l)%t ) )                     &
1067              ALLOCATE ( t_surf_green_v_2(l)%t(1:surf_usm_v(l)%ns) )
1068           IF ( .NOT. ALLOCATED( t_green_v_1(l)%t ) )                          &           
1069              ALLOCATE ( t_green_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) ) 
1070           IF ( .NOT. ALLOCATED( t_green_v_2(l)%t ) )                          &           
1071              ALLOCATE ( t_green_v_2(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) ) 
1072           IF ( .NOT. ALLOCATED( m_liq_usm_v_1(l)%var_usm_1d ) )               &
1073              ALLOCATE ( m_liq_usm_v_1(l)%var_usm_1d(1:surf_usm_v(l)%ns) )
1074           IF ( .NOT. ALLOCATED( m_liq_usm_v_2(l)%var_usm_1d ) )               &
1075              ALLOCATE ( m_liq_usm_v_2(l)%var_usm_1d(1:surf_usm_v(l)%ns) )
1076           IF ( .NOT. ALLOCATED( swc_v_1(l)%t ) )                              &           
1077              ALLOCATE ( swc_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) ) 
1078           IF ( .NOT. ALLOCATED( swc_v_2(l)%t ) )                              &           
1079              ALLOCATE ( swc_v_2(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) ) 
1080        ENDDO
1081!
1082!--     initial assignment of the pointers
1083        t_wall_v        => t_wall_v_1;        t_wall_v_p        => t_wall_v_2
1084        t_surf_wall_v   => t_surf_wall_v_1;   t_surf_wall_v_p   => t_surf_wall_v_2
1085        t_window_v      => t_window_v_1;      t_window_v_p      => t_window_v_2
1086        t_green_v       => t_green_v_1;       t_green_v_p       => t_green_v_2
1087        t_surf_window_v => t_surf_window_v_1; t_surf_window_v_p => t_surf_window_v_2
1088        t_surf_green_v  => t_surf_green_v_1;  t_surf_green_v_p  => t_surf_green_v_2
1089        m_liq_usm_v     => m_liq_usm_v_1;     m_liq_usm_v_p     => m_liq_usm_v_2
1090        swc_v           => swc_v_1;           swc_v_p           => swc_v_2
1091
1092!
1093!--     Allocate intermediate timestep arrays. For horizontal surfaces.
1094        ALLOCATE ( surf_usm_h%tt_surface_wall_m(1:surf_usm_h%ns)               )
1095        ALLOCATE ( surf_usm_h%tt_wall_m(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)   )
1096        ALLOCATE ( surf_usm_h%tt_surface_window_m(1:surf_usm_h%ns)             )
1097        ALLOCATE ( surf_usm_h%tt_window_m(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
1098        ALLOCATE ( surf_usm_h%tt_green_m(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)  )
1099        ALLOCATE ( surf_usm_h%tt_surface_green_m(1:surf_usm_h%ns)              )
1100
1101!
1102!--    Allocate intermediate timestep arrays
1103!--    Horizontal surfaces
1104       ALLOCATE ( tm_liq_usm_h_m%var_usm_1d(1:surf_usm_h%ns)                   )
1105!
1106!--    Horizontal surfaces
1107       DO  l = 0, 3
1108          ALLOCATE ( tm_liq_usm_v_m(l)%var_usm_1d(1:surf_usm_v(l)%ns)          )
1109       ENDDO 
1110       
1111!
1112!--     Set inital values for prognostic quantities
1113        IF ( ALLOCATED( surf_usm_h%tt_surface_wall_m )   )  surf_usm_h%tt_surface_wall_m   = 0.0_wp
1114        IF ( ALLOCATED( surf_usm_h%tt_wall_m )           )  surf_usm_h%tt_wall_m           = 0.0_wp
1115        IF ( ALLOCATED( surf_usm_h%tt_surface_window_m ) )  surf_usm_h%tt_surface_window_m = 0.0_wp
1116        IF ( ALLOCATED( surf_usm_h%tt_window_m    )      )  surf_usm_h%tt_window_m         = 0.0_wp
1117        IF ( ALLOCATED( surf_usm_h%tt_green_m    )       )  surf_usm_h%tt_green_m          = 0.0_wp
1118        IF ( ALLOCATED( surf_usm_h%tt_surface_green_m )  )  surf_usm_h%tt_surface_green_m  = 0.0_wp
1119!
1120!--     Now, for vertical surfaces
1121        DO  l = 0, 3
1122           ALLOCATE ( surf_usm_v(l)%tt_surface_wall_m(1:surf_usm_v(l)%ns)               )
1123           ALLOCATE ( surf_usm_v(l)%tt_wall_m(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)   )
1124           IF ( ALLOCATED( surf_usm_v(l)%tt_surface_wall_m ) )  surf_usm_v(l)%tt_surface_wall_m = 0.0_wp
1125           IF ( ALLOCATED( surf_usm_v(l)%tt_wall_m    ) )  surf_usm_v(l)%tt_wall_m    = 0.0_wp
1126           ALLOCATE ( surf_usm_v(l)%tt_surface_window_m(1:surf_usm_v(l)%ns)             )
1127           ALLOCATE ( surf_usm_v(l)%tt_window_m(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
1128           IF ( ALLOCATED( surf_usm_v(l)%tt_surface_window_m ) )  surf_usm_v(l)%tt_surface_window_m = 0.0_wp
1129           IF ( ALLOCATED( surf_usm_v(l)%tt_window_m  ) )  surf_usm_v(l)%tt_window_m    = 0.0_wp
1130           ALLOCATE ( surf_usm_v(l)%tt_surface_green_m(1:surf_usm_v(l)%ns)              )
1131           IF ( ALLOCATED( surf_usm_v(l)%tt_surface_green_m ) )  surf_usm_v(l)%tt_surface_green_m = 0.0_wp
1132           ALLOCATE ( surf_usm_v(l)%tt_green_m(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns)  )
1133           IF ( ALLOCATED( surf_usm_v(l)%tt_green_m   ) )  surf_usm_v(l)%tt_green_m    = 0.0_wp
1134        ENDDO
1135!
1136!--     allocate wall heat flux output array and set initial values. For horizontal surfaces
1137!        ALLOCATE ( surf_usm_h%wshf(1:surf_usm_h%ns)    )  !can be removed
1138        ALLOCATE ( surf_usm_h%wshf_eb(1:surf_usm_h%ns) )
1139        ALLOCATE ( surf_usm_h%wghf_eb(1:surf_usm_h%ns) )
1140        ALLOCATE ( surf_usm_h%wghf_eb_window(1:surf_usm_h%ns) )
1141        ALLOCATE ( surf_usm_h%wghf_eb_green(1:surf_usm_h%ns) )
1142        ALLOCATE ( surf_usm_h%iwghf_eb(1:surf_usm_h%ns) )
1143        ALLOCATE ( surf_usm_h%iwghf_eb_window(1:surf_usm_h%ns) )
1144        IF ( ALLOCATED( surf_usm_h%wshf    ) )  surf_usm_h%wshf    = 0.0_wp
1145        IF ( ALLOCATED( surf_usm_h%wshf_eb ) )  surf_usm_h%wshf_eb = 0.0_wp
1146        IF ( ALLOCATED( surf_usm_h%wghf_eb ) )  surf_usm_h%wghf_eb = 0.0_wp
1147        IF ( ALLOCATED( surf_usm_h%wghf_eb_window ) )  surf_usm_h%wghf_eb_window = 0.0_wp
1148        IF ( ALLOCATED( surf_usm_h%wghf_eb_green ) )  surf_usm_h%wghf_eb_green = 0.0_wp
1149        IF ( ALLOCATED( surf_usm_h%iwghf_eb ) )  surf_usm_h%iwghf_eb = 0.0_wp
1150        IF ( ALLOCATED( surf_usm_h%iwghf_eb_window ) )  surf_usm_h%iwghf_eb_window = 0.0_wp
1151!
1152!--     Now, for vertical surfaces
1153        DO  l = 0, 3
1154!           ALLOCATE ( surf_usm_v(l)%wshf(1:surf_usm_v(l)%ns)    )    ! can be removed
1155           ALLOCATE ( surf_usm_v(l)%wshf_eb(1:surf_usm_v(l)%ns) )
1156           ALLOCATE ( surf_usm_v(l)%wghf_eb(1:surf_usm_v(l)%ns) )
1157           ALLOCATE ( surf_usm_v(l)%wghf_eb_window(1:surf_usm_v(l)%ns) )
1158           ALLOCATE ( surf_usm_v(l)%wghf_eb_green(1:surf_usm_v(l)%ns) )
1159           ALLOCATE ( surf_usm_v(l)%iwghf_eb(1:surf_usm_v(l)%ns) )
1160           ALLOCATE ( surf_usm_v(l)%iwghf_eb_window(1:surf_usm_v(l)%ns) )
1161           IF ( ALLOCATED( surf_usm_v(l)%wshf    ) )  surf_usm_v(l)%wshf    = 0.0_wp
1162           IF ( ALLOCATED( surf_usm_v(l)%wshf_eb ) )  surf_usm_v(l)%wshf_eb = 0.0_wp
1163           IF ( ALLOCATED( surf_usm_v(l)%wghf_eb ) )  surf_usm_v(l)%wghf_eb = 0.0_wp
1164           IF ( ALLOCATED( surf_usm_v(l)%wghf_eb_window ) )  surf_usm_v(l)%wghf_eb_window = 0.0_wp
1165           IF ( ALLOCATED( surf_usm_v(l)%wghf_eb_green ) )  surf_usm_v(l)%wghf_eb_green = 0.0_wp
1166           IF ( ALLOCATED( surf_usm_v(l)%iwghf_eb ) )  surf_usm_v(l)%iwghf_eb = 0.0_wp
1167           IF ( ALLOCATED( surf_usm_v(l)%iwghf_eb_window ) )  surf_usm_v(l)%iwghf_eb_window = 0.0_wp
1168        ENDDO
1169!
1170!--     Initialize building-surface properties, which are also required by other modules,
1171!--     e.g. the indoor model.
1172        CALL usm_define_pars
1173       
1174        IF ( debug_output )  CALL debug_message( 'usm_init_arrays', 'end' )
1175       
1176    END SUBROUTINE usm_init_arrays
1177
1178
1179!------------------------------------------------------------------------------!
1180! Description:
1181! ------------
1182!> Sum up and time-average urban surface output quantities as well as allocate
1183!> the array necessary for storing the average.
1184!------------------------------------------------------------------------------!
1185    SUBROUTINE usm_3d_data_averaging( mode, variable )
1186
1187        IMPLICIT NONE
1188
1189        CHARACTER(LEN=*), INTENT(IN) ::  mode
1190        CHARACTER(LEN=*), INTENT(IN) :: variable
1191 
1192        INTEGER(iwp)                                       :: i, j, k, l, m, ids, idsint, iwl, istat  !< runnin indices
1193        CHARACTER(LEN=varnamelength)                       :: var                                     !< trimmed variable
1194        INTEGER(iwp), PARAMETER                            :: nd = 5                                  !< number of directions
1195        CHARACTER(LEN=6), DIMENSION(0:nd-1), PARAMETER     :: dirname = (/ '_roof ', '_south', '_north', '_west ', '_east ' /)
1196        INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER         :: dirint = (/ iup_u, isouth_u, inorth_u, iwest_u, ieast_u /)
1197
1198        IF ( variable(1:4) == 'usm_' )  THEN  ! is such a check really rquired?
1199
1200!
1201!--     find the real name of the variable
1202        ids = -1
1203        l = -1
1204        var = TRIM(variable)
1205        DO i = 0, nd-1
1206            k = len(TRIM(var))
1207            j = len(TRIM(dirname(i)))
1208            IF ( TRIM(var(k-j+1:k)) == TRIM(dirname(i)) )  THEN
1209                ids = i
1210                idsint = dirint(ids)
1211                var = var(:k-j)
1212                EXIT
1213            ENDIF
1214        ENDDO
1215        l = idsint - 2  ! horisontal direction index - terible hack !
1216        IF ( l < 0 .OR. l > 3 ) THEN
1217           l = -1
1218        END IF
1219        IF ( ids == -1 )  THEN
1220            var = TRIM(variable)
1221        ENDIF
1222        IF ( var(1:11) == 'usm_t_wall_'  .AND.  len(TRIM(var)) >= 12 )  THEN
1223!
1224!--          wall layers
1225            READ(var(12:12), '(I1)', iostat=istat ) iwl
1226            IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
1227                var = var(1:10)
1228            ELSE
1229!
1230!--             wrong wall layer index
1231                RETURN
1232            ENDIF
1233        ENDIF
1234        IF ( var(1:13) == 'usm_t_window_'  .AND.  len(TRIM(var)) >= 14 )  THEN
1235!
1236!--          wall layers
1237            READ(var(14:14), '(I1)', iostat=istat ) iwl
1238            IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
1239                var = var(1:12)
1240            ELSE
1241!
1242!--             wrong window layer index
1243                RETURN
1244            ENDIF
1245        ENDIF
1246        IF ( var(1:12) == 'usm_t_green_'  .AND.  len(TRIM(var)) >= 13 )  THEN
1247!
1248!--          wall layers
1249            READ(var(13:13), '(I1)', iostat=istat ) iwl
1250            IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
1251                var = var(1:11)
1252            ELSE
1253!
1254!--             wrong green layer index
1255                RETURN
1256            ENDIF
1257        ENDIF
1258        IF ( var(1:8) == 'usm_swc_'  .AND.  len(TRIM(var)) >= 9 )  THEN
1259!
1260!--          swc layers
1261            READ(var(9:9), '(I1)', iostat=istat ) iwl
1262            IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
1263                var = var(1:7)
1264            ELSE
1265!
1266!--             wrong swc layer index
1267                RETURN
1268            ENDIF
1269        ENDIF
1270
1271        IF ( mode == 'allocate' )  THEN
1272           
1273           SELECT CASE ( TRIM( var ) )
1274
1275                CASE ( 'usm_wshf' )
1276!
1277!--                 array of sensible heat flux from surfaces
1278!--                 land surfaces
1279                    IF ( l == -1 ) THEN
1280                       IF ( .NOT.  ALLOCATED(surf_usm_h%wshf_eb_av) )  THEN
1281                          ALLOCATE ( surf_usm_h%wshf_eb_av(1:surf_usm_h%ns) )
1282                          surf_usm_h%wshf_eb_av = 0.0_wp
1283                       ENDIF
1284                    ELSE
1285                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%wshf_eb_av) )  THEN
1286                           ALLOCATE ( surf_usm_v(l)%wshf_eb_av(1:surf_usm_v(l)%ns) )
1287                           surf_usm_v(l)%wshf_eb_av = 0.0_wp
1288                       ENDIF
1289                    ENDIF
1290                   
1291                CASE ( 'usm_qsws' )
1292!
1293!--                 array of latent heat flux from surfaces
1294!--                 land surfaces
1295                    IF ( l == -1 .AND. .NOT.  ALLOCATED(surf_usm_h%qsws_av) )  THEN
1296                        ALLOCATE ( surf_usm_h%qsws_av(1:surf_usm_h%ns) )
1297                        surf_usm_h%qsws_av = 0.0_wp
1298                    ELSE
1299                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%qsws_av) )  THEN
1300                           ALLOCATE ( surf_usm_v(l)%qsws_av(1:surf_usm_v(l)%ns) )
1301                           surf_usm_v(l)%qsws_av = 0.0_wp
1302                       ENDIF
1303                    ENDIF
1304                   
1305                CASE ( 'usm_qsws_veg' )
1306!
1307!--                 array of latent heat flux from vegetation surfaces
1308!--                 land surfaces
1309                    IF ( l == -1 .AND. .NOT.  ALLOCATED(surf_usm_h%qsws_veg_av) )  THEN
1310                        ALLOCATE ( surf_usm_h%qsws_veg_av(1:surf_usm_h%ns) )
1311                        surf_usm_h%qsws_veg_av = 0.0_wp
1312                    ELSE
1313                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%qsws_veg_av) )  THEN
1314                           ALLOCATE ( surf_usm_v(l)%qsws_veg_av(1:surf_usm_v(l)%ns) )
1315                           surf_usm_v(l)%qsws_veg_av = 0.0_wp
1316                       ENDIF
1317                    ENDIF
1318                   
1319                CASE ( 'usm_qsws_liq' )
1320!
1321!--                 array of latent heat flux from surfaces with liquid
1322!--                 land surfaces
1323                    IF ( l == -1 .AND. .NOT.  ALLOCATED(surf_usm_h%qsws_liq_av) )  THEN
1324                        ALLOCATE ( surf_usm_h%qsws_liq_av(1:surf_usm_h%ns) )
1325                        surf_usm_h%qsws_liq_av = 0.0_wp
1326                    ELSE
1327                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%qsws_liq_av) )  THEN
1328                           ALLOCATE ( surf_usm_v(l)%qsws_liq_av(1:surf_usm_v(l)%ns) )
1329                           surf_usm_v(l)%qsws_liq_av = 0.0_wp
1330                       ENDIF
1331                    ENDIF
1332!
1333!--             Please note, the following output quantities belongs to the
1334!--             individual tile fractions - ground heat flux at wall-, window-,
1335!--             and green fraction. Aggregated ground-heat flux is treated
1336!--             accordingly in average_3d_data, sum_up_3d_data, etc..
1337                CASE ( 'usm_wghf' )
1338!
1339!--                 array of heat flux from ground (wall, roof, land)
1340                    IF ( l == -1 ) THEN
1341                       IF ( .NOT.  ALLOCATED(surf_usm_h%wghf_eb_av) )  THEN
1342                           ALLOCATE ( surf_usm_h%wghf_eb_av(1:surf_usm_h%ns) )
1343                           surf_usm_h%wghf_eb_av = 0.0_wp
1344                       ENDIF
1345                    ELSE
1346                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%wghf_eb_av) )  THEN
1347                           ALLOCATE ( surf_usm_v(l)%wghf_eb_av(1:surf_usm_v(l)%ns) )
1348                           surf_usm_v(l)%wghf_eb_av = 0.0_wp
1349                       ENDIF
1350                    ENDIF
1351
1352                CASE ( 'usm_wghf_window' )
1353!
1354!--                 array of heat flux from window ground (wall, roof, land)
1355                    IF ( l == -1 ) THEN
1356                       IF ( .NOT.  ALLOCATED(surf_usm_h%wghf_eb_window_av) )  THEN
1357                           ALLOCATE ( surf_usm_h%wghf_eb_window_av(1:surf_usm_h%ns) )
1358                           surf_usm_h%wghf_eb_window_av = 0.0_wp
1359                       ENDIF
1360                    ELSE
1361                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%wghf_eb_window_av) )  THEN
1362                           ALLOCATE ( surf_usm_v(l)%wghf_eb_window_av(1:surf_usm_v(l)%ns) )
1363                           surf_usm_v(l)%wghf_eb_window_av = 0.0_wp
1364                       ENDIF
1365                    ENDIF
1366
1367                CASE ( 'usm_wghf_green' )
1368!
1369!--                 array of heat flux from green ground (wall, roof, land)
1370                    IF ( l == -1 ) THEN
1371                       IF ( .NOT.  ALLOCATED(surf_usm_h%wghf_eb_green_av) )  THEN
1372                           ALLOCATE ( surf_usm_h%wghf_eb_green_av(1:surf_usm_h%ns) )
1373                           surf_usm_h%wghf_eb_green_av = 0.0_wp
1374                       ENDIF
1375                    ELSE
1376                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%wghf_eb_green_av) )  THEN
1377                           ALLOCATE ( surf_usm_v(l)%wghf_eb_green_av(1:surf_usm_v(l)%ns) )
1378                           surf_usm_v(l)%wghf_eb_green_av = 0.0_wp
1379                       ENDIF
1380                    ENDIF
1381
1382                CASE ( 'usm_iwghf' )
1383!
1384!--                 array of heat flux from indoor ground (wall, roof, land)
1385                    IF ( l == -1 ) THEN
1386                       IF ( .NOT.  ALLOCATED(surf_usm_h%iwghf_eb_av) )  THEN
1387                           ALLOCATE ( surf_usm_h%iwghf_eb_av(1:surf_usm_h%ns) )
1388                           surf_usm_h%iwghf_eb_av = 0.0_wp
1389                       ENDIF
1390                    ELSE
1391                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%iwghf_eb_av) )  THEN
1392                           ALLOCATE ( surf_usm_v(l)%iwghf_eb_av(1:surf_usm_v(l)%ns) )
1393                           surf_usm_v(l)%iwghf_eb_av = 0.0_wp
1394                       ENDIF
1395                    ENDIF
1396
1397                CASE ( 'usm_iwghf_window' )
1398!
1399!--                 array of heat flux from indoor window ground (wall, roof, land)
1400                    IF ( l == -1 ) THEN
1401                       IF ( .NOT.  ALLOCATED(surf_usm_h%iwghf_eb_window_av) )  THEN
1402                           ALLOCATE ( surf_usm_h%iwghf_eb_window_av(1:surf_usm_h%ns) )
1403                           surf_usm_h%iwghf_eb_window_av = 0.0_wp
1404                       ENDIF
1405                    ELSE
1406                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%iwghf_eb_window_av) )  THEN
1407                           ALLOCATE ( surf_usm_v(l)%iwghf_eb_window_av(1:surf_usm_v(l)%ns) )
1408                           surf_usm_v(l)%iwghf_eb_window_av = 0.0_wp
1409                       ENDIF
1410                    ENDIF
1411
1412                CASE ( 'usm_t_surf_wall' )
1413!
1414!--                 surface temperature for surfaces
1415                    IF ( l == -1 ) THEN
1416                       IF ( .NOT.  ALLOCATED(surf_usm_h%t_surf_wall_av) )  THEN
1417                           ALLOCATE ( surf_usm_h%t_surf_wall_av(1:surf_usm_h%ns) )
1418                           surf_usm_h%t_surf_wall_av = 0.0_wp
1419                       ENDIF
1420                    ELSE
1421                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%t_surf_wall_av) )  THEN
1422                           ALLOCATE ( surf_usm_v(l)%t_surf_wall_av(1:surf_usm_v(l)%ns) )
1423                           surf_usm_v(l)%t_surf_wall_av = 0.0_wp
1424                       ENDIF
1425                    ENDIF
1426
1427                CASE ( 'usm_t_surf_window' )
1428!
1429!--                 surface temperature for window surfaces
1430                    IF ( l == -1 ) THEN
1431                       IF ( .NOT.  ALLOCATED(surf_usm_h%t_surf_window_av) )  THEN
1432                           ALLOCATE ( surf_usm_h%t_surf_window_av(1:surf_usm_h%ns) )
1433                           surf_usm_h%t_surf_window_av = 0.0_wp
1434                       ENDIF
1435                    ELSE
1436                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%t_surf_window_av) )  THEN
1437                           ALLOCATE ( surf_usm_v(l)%t_surf_window_av(1:surf_usm_v(l)%ns) )
1438                           surf_usm_v(l)%t_surf_window_av = 0.0_wp
1439                       ENDIF
1440                    ENDIF
1441                   
1442                CASE ( 'usm_t_surf_green' )
1443!
1444!--                 surface temperature for green surfaces
1445                    IF ( l == -1 ) THEN
1446                       IF ( .NOT.  ALLOCATED(surf_usm_h%t_surf_green_av) )  THEN
1447                           ALLOCATE ( surf_usm_h%t_surf_green_av(1:surf_usm_h%ns) )
1448                           surf_usm_h%t_surf_green_av = 0.0_wp
1449                       ENDIF
1450                    ELSE
1451                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%t_surf_green_av) )  THEN
1452                           ALLOCATE ( surf_usm_v(l)%t_surf_green_av(1:surf_usm_v(l)%ns) )
1453                           surf_usm_v(l)%t_surf_green_av = 0.0_wp
1454                       ENDIF
1455                    ENDIF
1456               
1457                CASE ( 'usm_theta_10cm' )
1458!
1459!--                 near surface (10cm) temperature for whole surfaces
1460                    IF ( l == -1 ) THEN
1461                       IF ( .NOT.  ALLOCATED(surf_usm_h%pt_10cm_av) )  THEN
1462                           ALLOCATE ( surf_usm_h%pt_10cm_av(1:surf_usm_h%ns) )
1463                           surf_usm_h%pt_10cm_av = 0.0_wp
1464                       ENDIF
1465                    ELSE
1466                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%pt_10cm_av) )  THEN
1467                           ALLOCATE ( surf_usm_v(l)%pt_10cm_av(1:surf_usm_v(l)%ns) )
1468                           surf_usm_v(l)%pt_10cm_av = 0.0_wp
1469                       ENDIF
1470                    ENDIF
1471                 
1472                CASE ( 'usm_t_wall' )
1473!
1474!--                 wall temperature for iwl layer of walls and land
1475                    IF ( l == -1 ) THEN
1476                       IF ( .NOT.  ALLOCATED(surf_usm_h%t_wall_av) )  THEN
1477                           ALLOCATE ( surf_usm_h%t_wall_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
1478                           surf_usm_h%t_wall_av = 0.0_wp
1479                       ENDIF
1480                    ELSE
1481                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%t_wall_av) )  THEN
1482                           ALLOCATE ( surf_usm_v(l)%t_wall_av(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
1483                           surf_usm_v(l)%t_wall_av = 0.0_wp
1484                       ENDIF
1485                    ENDIF
1486
1487                CASE ( 'usm_t_window' )
1488!
1489!--                 window temperature for iwl layer of walls and land
1490                    IF ( l == -1 ) THEN
1491                       IF ( .NOT.  ALLOCATED(surf_usm_h%t_window_av) )  THEN
1492                           ALLOCATE ( surf_usm_h%t_window_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
1493                           surf_usm_h%t_window_av = 0.0_wp
1494                       ENDIF
1495                    ELSE
1496                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%t_window_av) )  THEN
1497                           ALLOCATE ( surf_usm_v(l)%t_window_av(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
1498                           surf_usm_v(l)%t_window_av = 0.0_wp
1499                       ENDIF
1500                    ENDIF
1501
1502                CASE ( 'usm_t_green' )
1503!
1504!--                 green temperature for iwl layer of walls and land
1505                    IF ( l == -1 ) THEN
1506                       IF ( .NOT.  ALLOCATED(surf_usm_h%t_green_av) )  THEN
1507                           ALLOCATE ( surf_usm_h%t_green_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
1508                           surf_usm_h%t_green_av = 0.0_wp
1509                       ENDIF
1510                    ELSE
1511                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%t_green_av) )  THEN
1512                           ALLOCATE ( surf_usm_v(l)%t_green_av(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
1513                           surf_usm_v(l)%t_green_av = 0.0_wp
1514                       ENDIF
1515                    ENDIF
1516                CASE ( 'usm_swc' )
1517!
1518!--                 soil water content for iwl layer of walls and land
1519                    IF ( l == -1 .AND. .NOT.  ALLOCATED(surf_usm_h%swc_av) )  THEN
1520                        ALLOCATE ( surf_usm_h%swc_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
1521                        surf_usm_h%swc_av = 0.0_wp
1522                    ELSE
1523                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%swc_av) )  THEN
1524                           ALLOCATE ( surf_usm_v(l)%swc_av(nzb_wall:nzt_wall,1:surf_usm_v(l)%ns) )
1525                           surf_usm_v(l)%swc_av = 0.0_wp
1526                       ENDIF
1527                    ENDIF
1528
1529               CASE DEFAULT
1530                   CONTINUE
1531
1532           END SELECT
1533
1534        ELSEIF ( mode == 'sum' )  THEN
1535           
1536           SELECT CASE ( TRIM( var ) )
1537
1538                CASE ( 'usm_wshf' )
1539!
1540!--                 array of sensible heat flux from surfaces (land, roof, wall)
1541                    IF ( l == -1 ) THEN
1542                       DO  m = 1, surf_usm_h%ns
1543                          surf_usm_h%wshf_eb_av(m) =                              &
1544                                             surf_usm_h%wshf_eb_av(m) +           &
1545                                             surf_usm_h%wshf_eb(m)
1546                       ENDDO
1547                    ELSE
1548                       DO  m = 1, surf_usm_v(l)%ns
1549                          surf_usm_v(l)%wshf_eb_av(m) =                        &
1550                                          surf_usm_v(l)%wshf_eb_av(m) +        &
1551                                          surf_usm_v(l)%wshf_eb(m)
1552                       ENDDO
1553                    ENDIF
1554                   
1555                CASE ( 'usm_qsws' )
1556!
1557!--                 array of latent heat flux from surfaces (land, roof, wall)
1558                    IF ( l == -1 ) THEN
1559                    DO  m = 1, surf_usm_h%ns
1560                       surf_usm_h%qsws_av(m) =                              &
1561                                          surf_usm_h%qsws_av(m) +           &
1562                                          surf_usm_h%qsws(m) * l_v
1563                    ENDDO
1564                    ELSE
1565                       DO  m = 1, surf_usm_v(l)%ns
1566                          surf_usm_v(l)%qsws_av(m) =                        &
1567                                          surf_usm_v(l)%qsws_av(m) +        &
1568                                          surf_usm_v(l)%qsws(m) * l_v
1569                       ENDDO
1570                    ENDIF
1571                   
1572                CASE ( 'usm_qsws_veg' )
1573!
1574!--                 array of latent heat flux from vegetation surfaces (land, roof, wall)
1575                    IF ( l == -1 ) THEN
1576                    DO  m = 1, surf_usm_h%ns
1577                       surf_usm_h%qsws_veg_av(m) =                              &
1578                                          surf_usm_h%qsws_veg_av(m) +           &
1579                                          surf_usm_h%qsws_veg(m)
1580                    ENDDO
1581                    ELSE
1582                       DO  m = 1, surf_usm_v(l)%ns
1583                          surf_usm_v(l)%qsws_veg_av(m) =                        &
1584                                          surf_usm_v(l)%qsws_veg_av(m) +        &
1585                                          surf_usm_v(l)%qsws_veg(m)
1586                       ENDDO
1587                    ENDIF
1588                   
1589                CASE ( 'usm_qsws_liq' )
1590!
1591!--                 array of latent heat flux from surfaces with liquid (land, roof, wall)
1592                    IF ( l == -1 ) THEN
1593                    DO  m = 1, surf_usm_h%ns
1594                       surf_usm_h%qsws_liq_av(m) =                              &
1595                                          surf_usm_h%qsws_liq_av(m) +           &
1596                                          surf_usm_h%qsws_liq(m)
1597                    ENDDO
1598                    ELSE
1599                       DO  m = 1, surf_usm_v(l)%ns
1600                          surf_usm_v(l)%qsws_liq_av(m) =                        &
1601                                          surf_usm_v(l)%qsws_liq_av(m) +        &
1602                                          surf_usm_v(l)%qsws_liq(m)
1603                       ENDDO
1604                    ENDIF
1605                   
1606                CASE ( 'usm_wghf' )
1607!
1608!--                 array of heat flux from ground (wall, roof, land)
1609                    IF ( l == -1 ) THEN
1610                       DO  m = 1, surf_usm_h%ns
1611                          surf_usm_h%wghf_eb_av(m) =                              &
1612                                             surf_usm_h%wghf_eb_av(m) +           &
1613                                             surf_usm_h%wghf_eb(m)
1614                       ENDDO
1615                    ELSE
1616                       DO  m = 1, surf_usm_v(l)%ns
1617                          surf_usm_v(l)%wghf_eb_av(m) =                        &
1618                                          surf_usm_v(l)%wghf_eb_av(m) +        &
1619                                          surf_usm_v(l)%wghf_eb(m)
1620                       ENDDO
1621                    ENDIF
1622                   
1623                CASE ( 'usm_wghf_window' )
1624!
1625!--                 array of heat flux from window ground (wall, roof, land)
1626                    IF ( l == -1 ) THEN
1627                       DO  m = 1, surf_usm_h%ns
1628                          surf_usm_h%wghf_eb_window_av(m) =                              &
1629                                             surf_usm_h%wghf_eb_window_av(m) +           &
1630                                             surf_usm_h%wghf_eb_window(m)
1631                       ENDDO
1632                    ELSE
1633                       DO  m = 1, surf_usm_v(l)%ns
1634                          surf_usm_v(l)%wghf_eb_window_av(m) =                        &
1635                                          surf_usm_v(l)%wghf_eb_window_av(m) +        &
1636                                          surf_usm_v(l)%wghf_eb_window(m)
1637                       ENDDO
1638                    ENDIF
1639
1640                CASE ( 'usm_wghf_green' )
1641!
1642!--                 array of heat flux from green ground (wall, roof, land)
1643                    IF ( l == -1 ) THEN
1644                       DO  m = 1, surf_usm_h%ns
1645                          surf_usm_h%wghf_eb_green_av(m) =                              &
1646                                             surf_usm_h%wghf_eb_green_av(m) +           &
1647                                             surf_usm_h%wghf_eb_green(m)
1648                       ENDDO
1649                    ELSE
1650                       DO  m = 1, surf_usm_v(l)%ns
1651                          surf_usm_v(l)%wghf_eb_green_av(m) =                        &
1652                                          surf_usm_v(l)%wghf_eb_green_av(m) +        &
1653                                          surf_usm_v(l)%wghf_eb_green(m)
1654                       ENDDO
1655                    ENDIF
1656                   
1657                CASE ( 'usm_iwghf' )
1658!
1659!--                 array of heat flux from indoor ground (wall, roof, land)
1660                    IF ( l == -1 ) THEN
1661                       DO  m = 1, surf_usm_h%ns
1662                          surf_usm_h%iwghf_eb_av(m) =                              &
1663                                             surf_usm_h%iwghf_eb_av(m) +           &
1664                                             surf_usm_h%iwghf_eb(m)
1665                       ENDDO
1666                    ELSE
1667                       DO  m = 1, surf_usm_v(l)%ns
1668                          surf_usm_v(l)%iwghf_eb_av(m) =                        &
1669                                          surf_usm_v(l)%iwghf_eb_av(m) +        &
1670                                          surf_usm_v(l)%iwghf_eb(m)
1671                       ENDDO
1672                    ENDIF
1673                   
1674                CASE ( 'usm_iwghf_window' )
1675!
1676!--                 array of heat flux from indoor window ground (wall, roof, land)
1677                    IF ( l == -1 ) THEN
1678                       DO  m = 1, surf_usm_h%ns
1679                          surf_usm_h%iwghf_eb_window_av(m) =                              &
1680                                             surf_usm_h%iwghf_eb_window_av(m) +           &
1681                                             surf_usm_h%iwghf_eb_window(m)
1682                       ENDDO
1683                    ELSE
1684                       DO  m = 1, surf_usm_v(l)%ns
1685                          surf_usm_v(l)%iwghf_eb_window_av(m) =                        &
1686                                          surf_usm_v(l)%iwghf_eb_window_av(m) +        &
1687                                          surf_usm_v(l)%iwghf_eb_window(m)
1688                       ENDDO
1689                    ENDIF
1690                   
1691                CASE ( 'usm_t_surf_wall' )
1692!
1693!--                 surface temperature for surfaces
1694                    IF ( l == -1 ) THEN
1695                       DO  m = 1, surf_usm_h%ns
1696                       surf_usm_h%t_surf_wall_av(m) =                               & 
1697                                          surf_usm_h%t_surf_wall_av(m) +            &
1698                                          t_surf_wall_h(m)
1699                       ENDDO
1700                    ELSE
1701                       DO  m = 1, surf_usm_v(l)%ns
1702                          surf_usm_v(l)%t_surf_wall_av(m) =                         &
1703                                          surf_usm_v(l)%t_surf_wall_av(m) +         &
1704                                          t_surf_wall_v(l)%t(m)
1705                       ENDDO
1706                    ENDIF
1707                   
1708                CASE ( 'usm_t_surf_window' )
1709!
1710!--                 surface temperature for window surfaces
1711                    IF ( l == -1 ) THEN
1712                       DO  m = 1, surf_usm_h%ns
1713                          surf_usm_h%t_surf_window_av(m) =                               &
1714                                             surf_usm_h%t_surf_window_av(m) +            &
1715                                             t_surf_window_h(m)
1716                       ENDDO
1717                    ELSE
1718                       DO  m = 1, surf_usm_v(l)%ns
1719                          surf_usm_v(l)%t_surf_window_av(m) =                         &
1720                                          surf_usm_v(l)%t_surf_window_av(m) +         &
1721                                          t_surf_window_v(l)%t(m)
1722                       ENDDO
1723                    ENDIF
1724                   
1725                CASE ( 'usm_t_surf_green' )
1726!
1727!--                 surface temperature for green surfaces
1728                    IF ( l == -1 ) THEN
1729                       DO  m = 1, surf_usm_h%ns
1730                          surf_usm_h%t_surf_green_av(m) =                               &
1731                                             surf_usm_h%t_surf_green_av(m) +            &
1732                                             t_surf_green_h(m)
1733                       ENDDO
1734                    ELSE
1735                       DO  m = 1, surf_usm_v(l)%ns
1736                          surf_usm_v(l)%t_surf_green_av(m) =                         &
1737                                          surf_usm_v(l)%t_surf_green_av(m) +         &
1738                                          t_surf_green_v(l)%t(m)
1739                       ENDDO
1740                    ENDIF
1741               
1742                CASE ( 'usm_theta_10cm' )
1743!
1744!--                 near surface temperature for whole surfaces
1745                    IF ( l == -1 ) THEN
1746                       DO  m = 1, surf_usm_h%ns
1747                          surf_usm_h%pt_10cm_av(m) =                               &
1748                                             surf_usm_h%pt_10cm_av(m) +            &
1749                                             surf_usm_h%pt_10cm(m)
1750                       ENDDO
1751                    ELSE
1752                       DO  m = 1, surf_usm_v(l)%ns
1753                          surf_usm_v(l)%pt_10cm_av(m) =                         &
1754                                          surf_usm_v(l)%pt_10cm_av(m) +         &
1755                                          surf_usm_v(l)%pt_10cm(m)
1756                       ENDDO
1757                    ENDIF
1758                   
1759                CASE ( 'usm_t_wall' )
1760!
1761!--                 wall temperature for  iwl layer of walls and land
1762                    IF ( l == -1 ) THEN
1763                       DO  m = 1, surf_usm_h%ns
1764                          surf_usm_h%t_wall_av(iwl,m) =                           &
1765                                             surf_usm_h%t_wall_av(iwl,m) +        &
1766                                             t_wall_h(iwl,m)
1767                       ENDDO
1768                    ELSE
1769                       DO  m = 1, surf_usm_v(l)%ns
1770                          surf_usm_v(l)%t_wall_av(iwl,m) =                     &
1771                                          surf_usm_v(l)%t_wall_av(iwl,m) +     &
1772                                          t_wall_v(l)%t(iwl,m)
1773                       ENDDO
1774                    ENDIF
1775                   
1776                CASE ( 'usm_t_window' )
1777!
1778!--                 window temperature for  iwl layer of walls and land
1779                    IF ( l == -1 ) THEN
1780                       DO  m = 1, surf_usm_h%ns
1781                          surf_usm_h%t_window_av(iwl,m) =                           &
1782                                             surf_usm_h%t_window_av(iwl,m) +        &
1783                                             t_window_h(iwl,m)
1784                       ENDDO
1785                    ELSE
1786                       DO  m = 1, surf_usm_v(l)%ns
1787                          surf_usm_v(l)%t_window_av(iwl,m) =                     &
1788                                          surf_usm_v(l)%t_window_av(iwl,m) +     &
1789                                          t_window_v(l)%t(iwl,m)
1790                       ENDDO
1791                    ENDIF
1792
1793                CASE ( 'usm_t_green' )
1794!
1795!--                 green temperature for  iwl layer of walls and land
1796                    IF ( l == -1 ) THEN
1797                       DO  m = 1, surf_usm_h%ns
1798                          surf_usm_h%t_green_av(iwl,m) =                           &
1799                                             surf_usm_h%t_green_av(iwl,m) +        &
1800                                             t_green_h(iwl,m)
1801                       ENDDO
1802                    ELSE
1803                       DO  m = 1, surf_usm_v(l)%ns
1804                          surf_usm_v(l)%t_green_av(iwl,m) =                     &
1805                                          surf_usm_v(l)%t_green_av(iwl,m) +     &
1806                                          t_green_v(l)%t(iwl,m)
1807                       ENDDO
1808                    ENDIF
1809
1810                CASE ( 'usm_swc' )
1811!
1812!--                 soil water content for  iwl layer of walls and land
1813                    IF ( l == -1 ) THEN
1814                    DO  m = 1, surf_usm_h%ns
1815                       surf_usm_h%swc_av(iwl,m) =                           &
1816                                          surf_usm_h%swc_av(iwl,m) +        &
1817                                          swc_h(iwl,m)
1818                    ENDDO
1819                    ELSE
1820                       DO  m = 1, surf_usm_v(l)%ns
1821                          surf_usm_v(l)%swc_av(iwl,m) =                     &
1822                                          surf_usm_v(l)%swc_av(iwl,m) +     &
1823                                          swc_v(l)%t(iwl,m)
1824                       ENDDO
1825                    ENDIF
1826
1827                CASE DEFAULT
1828                    CONTINUE
1829
1830           END SELECT
1831
1832        ELSEIF ( mode == 'average' )  THEN
1833           
1834           SELECT CASE ( TRIM( var ) )
1835
1836                CASE ( 'usm_wshf' )
1837!
1838!--                 array of sensible heat flux from surfaces (land, roof, wall)
1839                    IF ( l == -1 ) THEN
1840                       DO  m = 1, surf_usm_h%ns
1841                          surf_usm_h%wshf_eb_av(m) =                              &
1842                                             surf_usm_h%wshf_eb_av(m) /           &
1843                                             REAL( average_count_3d, kind=wp )
1844                       ENDDO
1845                    ELSE
1846                       DO  m = 1, surf_usm_v(l)%ns
1847                          surf_usm_v(l)%wshf_eb_av(m) =                        &
1848                                          surf_usm_v(l)%wshf_eb_av(m) /        &
1849                                          REAL( average_count_3d, kind=wp )
1850                       ENDDO
1851                    ENDIF
1852                   
1853                CASE ( 'usm_qsws' )
1854!
1855!--                 array of latent heat flux from surfaces (land, roof, wall)
1856                    IF ( l == -1 ) THEN
1857                    DO  m = 1, surf_usm_h%ns
1858                       surf_usm_h%qsws_av(m) =                              &
1859                                          surf_usm_h%qsws_av(m) /           &
1860                                          REAL( average_count_3d, kind=wp )
1861                    ENDDO
1862                    ELSE
1863                       DO  m = 1, surf_usm_v(l)%ns
1864                          surf_usm_v(l)%qsws_av(m) =                        &
1865                                          surf_usm_v(l)%qsws_av(m) /        &
1866                                          REAL( average_count_3d, kind=wp )
1867                       ENDDO
1868                    ENDIF
1869
1870                CASE ( 'usm_qsws_veg' )
1871!
1872!--                 array of latent heat flux from vegetation surfaces (land, roof, wall)
1873                    IF ( l == -1 ) THEN
1874                    DO  m = 1, surf_usm_h%ns
1875                       surf_usm_h%qsws_veg_av(m) =                              &
1876                                          surf_usm_h%qsws_veg_av(m) /           &
1877                                          REAL( average_count_3d, kind=wp )
1878                    ENDDO
1879                    ELSE
1880                       DO  m = 1, surf_usm_v(l)%ns
1881                          surf_usm_v(l)%qsws_veg_av(m) =                        &
1882                                          surf_usm_v(l)%qsws_veg_av(m) /        &
1883                                          REAL( average_count_3d, kind=wp )
1884                       ENDDO
1885                    ENDIF
1886                   
1887                CASE ( 'usm_qsws_liq' )
1888!
1889!--                 array of latent heat flux from surfaces with liquid (land, roof, wall)
1890                    IF ( l == -1 ) THEN
1891                    DO  m = 1, surf_usm_h%ns
1892                       surf_usm_h%qsws_liq_av(m) =                              &
1893                                          surf_usm_h%qsws_liq_av(m) /           &
1894                                          REAL( average_count_3d, kind=wp )
1895                    ENDDO
1896                    ELSE
1897                       DO  m = 1, surf_usm_v(l)%ns
1898                          surf_usm_v(l)%qsws_liq_av(m) =                        &
1899                                          surf_usm_v(l)%qsws_liq_av(m) /        &
1900                                          REAL( average_count_3d, kind=wp )
1901                       ENDDO
1902                    ENDIF
1903                   
1904                CASE ( 'usm_wghf' )
1905!
1906!--                 array of heat flux from ground (wall, roof, land)
1907                    IF ( l == -1 ) THEN
1908                       DO  m = 1, surf_usm_h%ns
1909                          surf_usm_h%wghf_eb_av(m) =                              &
1910                                             surf_usm_h%wghf_eb_av(m) /           &
1911                                             REAL( average_count_3d, kind=wp )
1912                       ENDDO
1913                    ELSE
1914                       DO  m = 1, surf_usm_v(l)%ns
1915                          surf_usm_v(l)%wghf_eb_av(m) =                        &
1916                                          surf_usm_v(l)%wghf_eb_av(m) /        &
1917                                          REAL( average_count_3d, kind=wp )
1918                       ENDDO
1919                    ENDIF
1920                   
1921                CASE ( 'usm_wghf_window' )
1922!
1923!--                 array of heat flux from window ground (wall, roof, land)
1924                    IF ( l == -1 ) THEN
1925                       DO  m = 1, surf_usm_h%ns
1926                          surf_usm_h%wghf_eb_window_av(m) =                              &
1927                                             surf_usm_h%wghf_eb_window_av(m) /           &
1928                                             REAL( average_count_3d, kind=wp )
1929                       ENDDO
1930                    ELSE
1931                       DO  m = 1, surf_usm_v(l)%ns
1932                          surf_usm_v(l)%wghf_eb_window_av(m) =                        &
1933                                          surf_usm_v(l)%wghf_eb_window_av(m) /        &
1934                                          REAL( average_count_3d, kind=wp )
1935                       ENDDO
1936                    ENDIF
1937
1938                CASE ( 'usm_wghf_green' )
1939!
1940!--                 array of heat flux from green ground (wall, roof, land)
1941                    IF ( l == -1 ) THEN
1942                       DO  m = 1, surf_usm_h%ns
1943                          surf_usm_h%wghf_eb_green_av(m) =                              &
1944                                             surf_usm_h%wghf_eb_green_av(m) /           &
1945                                             REAL( average_count_3d, kind=wp )
1946                       ENDDO
1947                    ELSE
1948                       DO  m = 1, surf_usm_v(l)%ns
1949                          surf_usm_v(l)%wghf_eb_green_av(m) =                        &
1950                                          surf_usm_v(l)%wghf_eb_green_av(m) /        &
1951                                          REAL( average_count_3d, kind=wp )
1952                       ENDDO
1953                    ENDIF
1954
1955                CASE ( 'usm_iwghf' )
1956!
1957!--                 array of heat flux from indoor ground (wall, roof, land)
1958                    IF ( l == -1 ) THEN
1959                       DO  m = 1, surf_usm_h%ns
1960                          surf_usm_h%iwghf_eb_av(m) =                              &
1961                                             surf_usm_h%iwghf_eb_av(m) /           &
1962                                             REAL( average_count_3d, kind=wp )
1963                       ENDDO
1964                    ELSE
1965                       DO  m = 1, surf_usm_v(l)%ns
1966                          surf_usm_v(l)%iwghf_eb_av(m) =                        &
1967                                          surf_usm_v(l)%iwghf_eb_av(m) /        &
1968                                          REAL( average_count_3d, kind=wp )
1969                       ENDDO
1970                    ENDIF
1971                   
1972                CASE ( 'usm_iwghf_window' )
1973!
1974!--                 array of heat flux from indoor window ground (wall, roof, land)
1975                    IF ( l == -1 ) THEN
1976                       DO  m = 1, surf_usm_h%ns
1977                          surf_usm_h%iwghf_eb_window_av(m) =                              &
1978                                             surf_usm_h%iwghf_eb_window_av(m) /           &
1979                                             REAL( average_count_3d, kind=wp )
1980                       ENDDO
1981                    ELSE
1982                       DO  m = 1, surf_usm_v(l)%ns
1983                          surf_usm_v(l)%iwghf_eb_window_av(m) =                        &
1984                                          surf_usm_v(l)%iwghf_eb_window_av(m) /        &
1985                                          REAL( average_count_3d, kind=wp )
1986                       ENDDO
1987                    ENDIF
1988                   
1989                CASE ( 'usm_t_surf_wall' )
1990!
1991!--                 surface temperature for surfaces
1992                    IF ( l == -1 ) THEN
1993                       DO  m = 1, surf_usm_h%ns
1994                       surf_usm_h%t_surf_wall_av(m) =                               & 
1995                                          surf_usm_h%t_surf_wall_av(m) /            &
1996                                             REAL( average_count_3d, kind=wp )
1997                       ENDDO
1998                    ELSE
1999                       DO  m = 1, surf_usm_v(l)%ns
2000                          surf_usm_v(l)%t_surf_wall_av(m) =                         &
2001                                          surf_usm_v(l)%t_surf_wall_av(m) /         &
2002                                          REAL( average_count_3d, kind=wp )
2003                       ENDDO
2004                    ENDIF
2005                   
2006                CASE ( 'usm_t_surf_window' )
2007!
2008!--                 surface temperature for window surfaces
2009                    IF ( l == -1 ) THEN
2010                       DO  m = 1, surf_usm_h%ns
2011                          surf_usm_h%t_surf_window_av(m) =                               &
2012                                             surf_usm_h%t_surf_window_av(m) /            &
2013                                             REAL( average_count_3d, kind=wp )
2014                       ENDDO
2015                    ELSE
2016                       DO  m = 1, surf_usm_v(l)%ns
2017                          surf_usm_v(l)%t_surf_window_av(m) =                         &
2018                                          surf_usm_v(l)%t_surf_window_av(m) /         &
2019                                          REAL( average_count_3d, kind=wp )
2020                       ENDDO
2021                    ENDIF
2022                   
2023                CASE ( 'usm_t_surf_green' )
2024!
2025!--                 surface temperature for green surfaces
2026                    IF ( l == -1 ) THEN
2027                       DO  m = 1, surf_usm_h%ns
2028                          surf_usm_h%t_surf_green_av(m) =                               &
2029                                             surf_usm_h%t_surf_green_av(m) /            &
2030                                             REAL( average_count_3d, kind=wp )
2031                       ENDDO
2032                    ELSE
2033                       DO  m = 1, surf_usm_v(l)%ns
2034                          surf_usm_v(l)%t_surf_green_av(m) =                         &
2035                                          surf_usm_v(l)%t_surf_green_av(m) /         &
2036                                          REAL( average_count_3d, kind=wp )
2037                       ENDDO
2038                    ENDIF
2039                   
2040                CASE ( 'usm_theta_10cm' )
2041!
2042!--                 near surface temperature for whole surfaces
2043                    IF ( l == -1 ) THEN
2044                       DO  m = 1, surf_usm_h%ns
2045                          surf_usm_h%pt_10cm_av(m) =                               &
2046                                             surf_usm_h%pt_10cm_av(m) /            &
2047                                             REAL( average_count_3d, kind=wp )
2048                       ENDDO
2049                    ELSE
2050                       DO  m = 1, surf_usm_v(l)%ns
2051                          surf_usm_v(l)%pt_10cm_av(m) =                         &
2052                                          surf_usm_v(l)%pt_10cm_av(m) /         &
2053                                          REAL( average_count_3d, kind=wp )
2054                       ENDDO
2055                    ENDIF
2056
2057                   
2058                CASE ( 'usm_t_wall' )
2059!
2060!--                 wall temperature for  iwl layer of walls and land
2061                    IF ( l == -1 ) THEN
2062                       DO  m = 1, surf_usm_h%ns
2063                          surf_usm_h%t_wall_av(iwl,m) =                           &
2064                                             surf_usm_h%t_wall_av(iwl,m) /        &
2065                                             REAL( average_count_3d, kind=wp )
2066                       ENDDO
2067                    ELSE
2068                       DO  m = 1, surf_usm_v(l)%ns
2069                          surf_usm_v(l)%t_wall_av(iwl,m) =                     &
2070                                          surf_usm_v(l)%t_wall_av(iwl,m) /     &
2071                                          REAL( average_count_3d, kind=wp )
2072                       ENDDO
2073                    ENDIF
2074
2075                CASE ( 'usm_t_window' )
2076!
2077!--                 window temperature for  iwl layer of walls and land
2078                    IF ( l == -1 ) THEN
2079                       DO  m = 1, surf_usm_h%ns
2080                          surf_usm_h%t_window_av(iwl,m) =                           &
2081                                             surf_usm_h%t_window_av(iwl,m) /        &
2082                                             REAL( average_count_3d, kind=wp )
2083                       ENDDO
2084                    ELSE
2085                       DO  m = 1, surf_usm_v(l)%ns
2086                          surf_usm_v(l)%t_window_av(iwl,m) =                     &
2087                                          surf_usm_v(l)%t_window_av(iwl,m) /     &
2088                                          REAL( average_count_3d, kind=wp )
2089                       ENDDO
2090                    ENDIF
2091
2092                CASE ( 'usm_t_green' )
2093!
2094!--                 green temperature for  iwl layer of walls and land
2095                    IF ( l == -1 ) THEN
2096                       DO  m = 1, surf_usm_h%ns
2097                          surf_usm_h%t_green_av(iwl,m) =                           &
2098                                             surf_usm_h%t_green_av(iwl,m) /        &
2099                                             REAL( average_count_3d, kind=wp )
2100                       ENDDO
2101                    ELSE
2102                       DO  m = 1, surf_usm_v(l)%ns
2103                          surf_usm_v(l)%t_green_av(iwl,m) =                     &
2104                                          surf_usm_v(l)%t_green_av(iwl,m) /     &
2105                                          REAL( average_count_3d, kind=wp )
2106                       ENDDO
2107                    ENDIF
2108                   
2109                CASE ( 'usm_swc' )
2110!
2111!--                 soil water content for  iwl layer of walls and land
2112                    IF ( l == -1 ) THEN
2113                    DO  m = 1, surf_usm_h%ns
2114                       surf_usm_h%swc_av(iwl,m) =                           &
2115                                          surf_usm_h%swc_av(iwl,m) /        &
2116                                          REAL( average_count_3d, kind=wp )
2117                    ENDDO
2118                    ELSE
2119                       DO  m = 1, surf_usm_v(l)%ns
2120                          surf_usm_v(l)%swc_av(iwl,m) =                     &
2121                                          surf_usm_v(l)%swc_av(iwl,m) /     &
2122                                          REAL( average_count_3d, kind=wp )
2123                       ENDDO
2124                    ENDIF
2125
2126
2127           END SELECT
2128
2129        ENDIF
2130
2131        ENDIF
2132
2133    END SUBROUTINE usm_3d_data_averaging
2134
2135
2136
2137!------------------------------------------------------------------------------!
2138! Description:
2139! ------------
2140!> Set internal Neumann boundary condition at outer soil grid points
2141!> for temperature and humidity.
2142!------------------------------------------------------------------------------!
2143 SUBROUTINE usm_boundary_condition
2144 
2145    IMPLICIT NONE
2146
2147    INTEGER(iwp) :: i      !< grid index x-direction
2148    INTEGER(iwp) :: ioff   !< offset index x-direction indicating location of soil grid point
2149    INTEGER(iwp) :: j      !< grid index y-direction
2150    INTEGER(iwp) :: joff   !< offset index x-direction indicating location of soil grid point
2151    INTEGER(iwp) :: k      !< grid index z-direction
2152    INTEGER(iwp) :: koff   !< offset index x-direction indicating location of soil grid point
2153    INTEGER(iwp) :: l      !< running index surface-orientation
2154    INTEGER(iwp) :: m      !< running index surface elements
2155
2156    koff = surf_usm_h%koff
2157    DO  m = 1, surf_usm_h%ns
2158       i = surf_usm_h%i(m)
2159       j = surf_usm_h%j(m)
2160       k = surf_usm_h%k(m)
2161       pt(k+koff,j,i) = pt(k,j,i)
2162    ENDDO
2163
2164    DO  l = 0, 3
2165       ioff = surf_usm_v(l)%ioff
2166       joff = surf_usm_v(l)%joff
2167       DO  m = 1, surf_usm_v(l)%ns
2168          i = surf_usm_v(l)%i(m)
2169          j = surf_usm_v(l)%j(m)
2170          k = surf_usm_v(l)%k(m)
2171          pt(k,j+joff,i+ioff) = pt(k,j,i)
2172       ENDDO
2173    ENDDO
2174
2175 END SUBROUTINE usm_boundary_condition
2176
2177
2178!------------------------------------------------------------------------------!
2179!
2180! Description:
2181! ------------
2182!> Subroutine checks variables and assigns units.
2183!> It is called out from subroutine check_parameters.
2184!------------------------------------------------------------------------------!
2185    SUBROUTINE usm_check_data_output( variable, unit )
2186
2187        IMPLICIT NONE
2188
2189        CHARACTER(LEN=*),INTENT(IN)    ::  variable   !<
2190        CHARACTER(LEN=*),INTENT(OUT)   ::  unit       !<
2191
2192        INTEGER(iwp)                                  :: i,j,l         !< index
2193        CHARACTER(LEN=2)                              :: ls
2194        CHARACTER(LEN=varnamelength)                  :: var           !< TRIM(variable)
2195        INTEGER(iwp), PARAMETER                       :: nl1 = 15      !< number of directional usm variables
2196        CHARACTER(LEN=varnamelength), DIMENSION(nl1)  :: varlist1 = &  !< list of directional usm variables
2197                  (/'usm_wshf                      ', &
2198                    'usm_wghf                      ', &
2199                    'usm_wghf_window               ', &
2200                    'usm_wghf_green                ', &
2201                    'usm_iwghf                     ', &
2202                    'usm_iwghf_window              ', &
2203                    'usm_surfz                     ', &
2204                    'usm_surfwintrans              ', &
2205                    'usm_surfcat                   ', &
2206                    'usm_t_surf_wall               ', &
2207                    'usm_t_surf_window             ', &
2208                    'usm_t_surf_green              ', &
2209                    'usm_t_green                   ', &
2210                    'usm_qsws                      ', &
2211                    'usm_theta_10cm                '/)
2212
2213        INTEGER(iwp), PARAMETER                       :: nl2 = 3       !< number of directional layer usm variables
2214        CHARACTER(LEN=varnamelength), DIMENSION(nl2)  :: varlist2 = &  !< list of directional layer usm variables
2215                  (/'usm_t_wall                    ', &
2216                    'usm_t_window                  ', &
2217                    'usm_t_green                   '/)
2218
2219        INTEGER(iwp), PARAMETER                       :: nd = 5     !< number of directions
2220        CHARACTER(LEN=6), DIMENSION(nd), PARAMETER  :: dirname = &  !< direction names
2221                  (/'_roof ','_south','_north','_west ','_east '/)
2222        LOGICAL                                       :: lfound     !< flag if the variable is found
2223
2224
2225        lfound = .FALSE.
2226
2227        var = TRIM(variable)
2228
2229!
2230!--     check if variable exists
2231!--     directional variables
2232        DO i = 1, nl1
2233           DO j = 1, nd
2234              IF ( TRIM(var) == TRIM(varlist1(i))//TRIM(dirname(j)) ) THEN
2235                 lfound = .TRUE.
2236                 EXIT
2237              ENDIF
2238              IF ( lfound ) EXIT
2239           ENDDO
2240        ENDDO
2241        IF ( lfound ) GOTO 10
2242!
2243!--     directional layer variables
2244        DO i = 1, nl2
2245           DO j = 1, nd
2246              DO l = nzb_wall, nzt_wall
2247                 WRITE(ls,'(A1,I1)') '_',l
2248                 IF ( TRIM(var) == TRIM(varlist2(i))//TRIM(ls)//TRIM(dirname(j)) ) THEN
2249                    lfound = .TRUE.
2250                    EXIT
2251                 ENDIF
2252              ENDDO
2253              IF ( lfound ) EXIT
2254           ENDDO
2255        ENDDO
2256        IF ( .NOT.  lfound ) THEN
2257           unit = 'illegal'
2258           RETURN
2259        ENDIF
226010      CONTINUE
2261
2262        IF ( var(1:9)  == 'usm_wshf_'  .OR.  var(1:9) == 'usm_wghf_' .OR.                 &
2263             var(1:16) == 'usm_wghf_window_' .OR. var(1:15) == 'usm_wghf_green_' .OR.     &
2264             var(1:10) == 'usm_iwghf_' .OR. var(1:17) == 'usm_iwghf_window_'    .OR.      &
2265             var(1:17) == 'usm_surfwintrans_' .OR.                                        &
2266             var(1:9)  == 'usm_qsws_'  .OR.  var(1:13)  == 'usm_qsws_veg_'  .OR.          &
2267             var(1:13) == 'usm_qsws_liq_' ) THEN
2268            unit = 'W/m2'
2269        ELSE IF ( var(1:15) == 'usm_t_surf_wall'   .OR.  var(1:10) == 'usm_t_wall' .OR.   &
2270                  var(1:12) == 'usm_t_window' .OR. var(1:17) == 'usm_t_surf_window' .OR.  &
2271                  var(1:16) == 'usm_t_surf_green'  .OR.                                   &
2272                  var(1:11) == 'usm_t_green' .OR.  var(1:7) == 'usm_swc' .OR.             &
2273                  var(1:14) == 'usm_theta_10cm' )  THEN
2274            unit = 'K'
2275        ELSE IF ( var(1:9) == 'usm_surfz'  .OR.  var(1:11) == 'usm_surfcat' )  THEN
2276            unit = '1'
2277        ELSE
2278            unit = 'illegal'
2279        ENDIF
2280
2281    END SUBROUTINE usm_check_data_output
2282
2283
2284!------------------------------------------------------------------------------!
2285! Description:
2286! ------------
2287!> Check parameters routine for urban surface model
2288!------------------------------------------------------------------------------!
2289    SUBROUTINE usm_check_parameters
2290
2291       USE control_parameters,                                                 &
2292           ONLY:  bc_pt_b, bc_q_b, constant_flux_layer, large_scale_forcing,   &
2293                  lsf_surf, topography
2294
2295       USE netcdf_data_input_mod,                                             &
2296            ONLY:  building_type_f
2297
2298       IMPLICIT NONE
2299
2300       INTEGER(iwp) ::  i        !< running index, x-dimension
2301       INTEGER(iwp) ::  j        !< running index, y-dimension
2302
2303!
2304!--    Dirichlet boundary conditions are required as the surface fluxes are
2305!--    calculated from the temperature/humidity gradients in the urban surface
2306!--    model
2307       IF ( bc_pt_b == 'neumann'   .OR.   bc_q_b == 'neumann' )  THEN
2308          message_string = 'urban surface model requires setting of '//        &
2309                           'bc_pt_b = "dirichlet" and '//                      &
2310                           'bc_q_b  = "dirichlet"'
2311          CALL message( 'usm_check_parameters', 'PA0590', 1, 2, 0, 6, 0 )
2312       ENDIF
2313
2314       IF ( .NOT.  constant_flux_layer )  THEN
2315          message_string = 'urban surface model requires '//                   &
2316                           'constant_flux_layer = .T.'
2317          CALL message( 'usm_check_parameters', 'PA0084', 1, 2, 0, 6, 0 )
2318       ENDIF
2319
2320       IF (  .NOT.  radiation )  THEN
2321          message_string = 'urban surface model requires '//                   &
2322                           'the radiation model to be switched on'
2323          CALL message( 'usm_check_parameters', 'PA0084', 1, 2, 0, 6, 0 )
2324       ENDIF
2325!       
2326!--    Surface forcing has to be disabled for LSF in case of enabled
2327!--    urban surface module
2328       IF ( large_scale_forcing )  THEN
2329          lsf_surf = .FALSE.
2330       ENDIF
2331!
2332!--    Topography
2333       IF ( topography == 'flat' )  THEN
2334          message_string = 'topography /= "flat" is required '//               &
2335                           'when using the urban surface model'
2336          CALL message( 'usm_check_parameters', 'PA0592', 1, 2, 0, 6, 0 )
2337       ENDIF
2338!
2339!--    naheatlayers
2340       IF ( naheatlayers > nzt )  THEN
2341          message_string = 'number of anthropogenic heat layers '//            &
2342                           '"naheatlayers" can not be larger than'//           &
2343                           ' number of domain layers "nzt"'
2344          CALL message( 'usm_check_parameters', 'PA0593', 1, 2, 0, 6, 0 )
2345       ENDIF
2346!
2347!--    Check if building types are set within a valid range.
2348       IF ( building_type < LBOUND( building_pars, 2 )  .AND.                  &
2349            building_type > UBOUND( building_pars, 2 ) )  THEN
2350          WRITE( message_string, * ) 'building_type = ', building_type,        &
2351                                     ' is out of the valid range'
2352          CALL message( 'usm_check_parameters', 'PA0529', 2, 2, 0, 6, 0 )
2353       ENDIF
2354       IF ( building_type_f%from_file )  THEN
2355          DO  i = nxl, nxr
2356             DO  j = nys, nyn
2357                IF ( building_type_f%var(j,i) /= building_type_f%fill  .AND.   &
2358              ( building_type_f%var(j,i) < LBOUND( building_pars, 2 )  .OR.    &
2359                building_type_f%var(j,i) > UBOUND( building_pars, 2 ) ) )      &
2360                THEN
2361                   WRITE( message_string, * ) 'building_type = is out of ' //  &
2362                                              'the valid range at (j,i) = ', j, i
2363                   CALL message( 'usm_check_parameters', 'PA0529', 2, 2, myid, 6, 0 )
2364                ENDIF
2365             ENDDO
2366          ENDDO
2367       ENDIF
2368    END SUBROUTINE usm_check_parameters
2369
2370
2371!------------------------------------------------------------------------------!
2372!
2373! Description:
2374! ------------
2375!> Output of the 3D-arrays in netCDF and/or AVS format
2376!> for variables of urban_surface model.
2377!> It resorts the urban surface module output quantities from surf style
2378!> indexing into temporary 3D array with indices (i,j,k).
2379!> It is called from subroutine data_output_3d.
2380!------------------------------------------------------------------------------!
2381    SUBROUTINE usm_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
2382       
2383        IMPLICIT NONE
2384
2385        INTEGER(iwp), INTENT(IN)       ::  av        !< flag if averaged
2386        CHARACTER (len=*), INTENT(IN)  ::  variable  !< variable name
2387        INTEGER(iwp), INTENT(IN)       ::  nzb_do    !< lower limit of the data output (usually 0)
2388        INTEGER(iwp), INTENT(IN)       ::  nzt_do    !< vertical upper limit of the data output (usually nz_do3d)
2389        LOGICAL, INTENT(OUT)           ::  found     !<
2390        REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf   !< sp - it has to correspond to module data_output_3d
2391        REAL(sp), DIMENSION(nzb:nzt+1,nys:nyn,nxl:nxr)     ::  temp_pf    !< temp array for urban surface output procedure
2392       
2393        CHARACTER (len=varnamelength)                      :: var     !< trimmed variable name
2394        INTEGER(iwp), PARAMETER                            :: nd = 5  !< number of directions
2395        CHARACTER(len=6), DIMENSION(0:nd-1), PARAMETER     :: dirname = (/ '_roof ', '_south', '_north', '_west ', '_east ' /)
2396        INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER         :: dirint =  (/    iup_u, isouth_u, inorth_u,  iwest_u,  ieast_u /)
2397        INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER         :: diridx =  (/       -1,        1,        0,        3,        2 /)
2398                                                                      !< index for surf_*_v: 0:3 = (North, South, East, West)
2399        INTEGER(iwp)                   :: ids,idsint,idsidx
2400        INTEGER(iwp)                   :: i,j,k,iwl,istat, l, m  !< running indices
2401
2402        found = .TRUE.
2403        temp_pf = -1._wp
2404       
2405        ids = -1
2406        var = TRIM(variable)
2407        DO i = 0, nd-1
2408            k = len(TRIM(var))
2409            j = len(TRIM(dirname(i)))
2410            IF ( TRIM(var(k-j+1:k)) == TRIM(dirname(i)) )  THEN
2411                ids = i
2412                idsint = dirint(ids)
2413                idsidx = diridx(ids)
2414                var = var(:k-j)
2415                EXIT
2416            ENDIF
2417        ENDDO
2418        IF ( ids == -1 )  THEN
2419            var = TRIM(variable)
2420        ENDIF
2421        IF ( var(1:11) == 'usm_t_wall_'  .AND.  len(TRIM(var)) >= 12 )  THEN
2422!
2423!--         wall layers
2424            READ(var(12:12), '(I1)', iostat=istat ) iwl
2425            IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
2426                var = var(1:10)
2427            ENDIF
2428        ENDIF
2429        IF ( var(1:13) == 'usm_t_window_'  .AND.  len(TRIM(var)) >= 14 )  THEN
2430!
2431!--         window layers
2432            READ(var(14:14), '(I1)', iostat=istat ) iwl
2433            IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
2434                var = var(1:12)
2435            ENDIF
2436        ENDIF
2437        IF ( var(1:12) == 'usm_t_green_'  .AND.  len(TRIM(var)) >= 13 )  THEN
2438!
2439!--         green layers
2440            READ(var(13:13), '(I1)', iostat=istat ) iwl
2441            IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
2442                var = var(1:11)
2443            ENDIF
2444        ENDIF
2445        IF ( var(1:8) == 'usm_swc_'  .AND.  len(TRIM(var)) >= 9 )  THEN
2446!
2447!--         green layers soil water content
2448            READ(var(9:9), '(I1)', iostat=istat ) iwl
2449            IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
2450                var = var(1:7)
2451            ENDIF
2452        ENDIF
2453       
2454        SELECT CASE ( TRIM(var) )
2455
2456          CASE ( 'usm_surfz' )
2457!
2458!--           array of surface height (z)
2459              IF ( idsint == iup_u )  THEN
2460                 DO  m = 1, surf_usm_h%ns
2461                    i = surf_usm_h%i(m)
2462                    j = surf_usm_h%j(m)
2463                    k = surf_usm_h%k(m)
2464                    temp_pf(0,j,i) = MAX( temp_pf(0,j,i), REAL( k, KIND = sp) )
2465                 ENDDO
2466              ELSE
2467                 l = idsidx
2468                 DO  m = 1, surf_usm_v(l)%ns
2469                    i = surf_usm_v(l)%i(m)
2470                    j = surf_usm_v(l)%j(m)
2471                    k = surf_usm_v(l)%k(m)
2472                    temp_pf(0,j,i) = MAX( temp_pf(0,j,i), REAL( k, KIND = sp) + 1.0_sp )
2473                 ENDDO
2474              ENDIF
2475
2476          CASE ( 'usm_surfcat' )
2477!
2478!--           surface category
2479              IF ( idsint == iup_u )  THEN
2480                 DO  m = 1, surf_usm_h%ns
2481                    i = surf_usm_h%i(m)
2482                    j = surf_usm_h%j(m)
2483                    k = surf_usm_h%k(m)
2484                    temp_pf(k,j,i) = surf_usm_h%surface_types(m)
2485                 ENDDO
2486              ELSE
2487                 l = idsidx
2488                 DO  m = 1, surf_usm_v(l)%ns
2489                    i = surf_usm_v(l)%i(m)
2490                    j = surf_usm_v(l)%j(m)
2491                    k = surf_usm_v(l)%k(m)
2492                    temp_pf(k,j,i) = surf_usm_v(l)%surface_types(m)
2493                 ENDDO
2494              ENDIF
2495             
2496          CASE ( 'usm_surfwintrans' )
2497!
2498!--           transmissivity window tiles
2499              IF ( idsint == iup_u )  THEN
2500                 DO  m = 1, surf_usm_h%ns
2501                    i = surf_usm_h%i(m)
2502                    j = surf_usm_h%j(m)
2503                    k = surf_usm_h%k(m)
2504                    temp_pf(k,j,i) = surf_usm_h%transmissivity(m)
2505                 ENDDO
2506              ELSE
2507                 l = idsidx
2508                 DO  m = 1, surf_usm_v(l)%ns
2509                    i = surf_usm_v(l)%i(m)
2510                    j = surf_usm_v(l)%j(m)
2511                    k = surf_usm_v(l)%k(m)
2512                    temp_pf(k,j,i) = surf_usm_v(l)%transmissivity(m)
2513                 ENDDO
2514              ENDIF
2515
2516          CASE ( 'usm_wshf' )
2517!
2518!--           array of sensible heat flux from surfaces
2519              IF ( av == 0 )  THEN
2520                 IF ( idsint == iup_u )  THEN
2521                    DO  m = 1, surf_usm_h%ns
2522                       i = surf_usm_h%i(m)
2523                       j = surf_usm_h%j(m)
2524                       k = surf_usm_h%k(m)
2525                       temp_pf(k,j,i) = surf_usm_h%wshf_eb(m)
2526                    ENDDO
2527                 ELSE
2528                    l = idsidx
2529                    DO  m = 1, surf_usm_v(l)%ns
2530                       i = surf_usm_v(l)%i(m)
2531                       j = surf_usm_v(l)%j(m)
2532                       k = surf_usm_v(l)%k(m)
2533                       temp_pf(k,j,i) = surf_usm_v(l)%wshf_eb(m)
2534                    ENDDO
2535                 ENDIF
2536              ELSE
2537                 IF ( idsint == iup_u )  THEN
2538                    DO  m = 1, surf_usm_h%ns
2539                       i = surf_usm_h%i(m)
2540                       j = surf_usm_h%j(m)
2541                       k = surf_usm_h%k(m)
2542                       temp_pf(k,j,i) = surf_usm_h%wshf_eb_av(m)
2543                    ENDDO
2544                 ELSE
2545                    l = idsidx
2546                    DO  m = 1, surf_usm_v(l)%ns
2547                       i = surf_usm_v(l)%i(m)
2548                       j = surf_usm_v(l)%j(m)
2549                       k = surf_usm_v(l)%k(m)
2550                       temp_pf(k,j,i) = surf_usm_v(l)%wshf_eb_av(m)
2551                    ENDDO
2552                 ENDIF
2553              ENDIF
2554             
2555             
2556          CASE ( 'usm_qsws' )
2557!
2558!--           array of latent heat flux from surfaces
2559              IF ( av == 0 )  THEN
2560                 IF ( idsint == iup_u )  THEN
2561                    DO  m = 1, surf_usm_h%ns
2562                       i = surf_usm_h%i(m)
2563                       j = surf_usm_h%j(m)
2564                       k = surf_usm_h%k(m)
2565                       temp_pf(k,j,i) = surf_usm_h%qsws(m) * l_v
2566                    ENDDO
2567                 ELSE
2568                    l = idsidx
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)%qsws(m) * l_v
2574                    ENDDO
2575                 ENDIF
2576              ELSE
2577                 IF ( idsint == iup_u )  THEN
2578                    DO  m = 1, surf_usm_h%ns
2579                       i = surf_usm_h%i(m)
2580                       j = surf_usm_h%j(m)
2581                       k = surf_usm_h%k(m)
2582                       temp_pf(k,j,i) = surf_usm_h%qsws_av(m)
2583                    ENDDO
2584                 ELSE
2585                    l = idsidx
2586                    DO  m = 1, surf_usm_v(l)%ns
2587                       i = surf_usm_v(l)%i(m)
2588                       j = surf_usm_v(l)%j(m)
2589                       k = surf_usm_v(l)%k(m)
2590                       temp_pf(k,j,i) = surf_usm_v(l)%qsws_av(m)
2591                    ENDDO
2592                 ENDIF
2593              ENDIF
2594             
2595          CASE ( 'usm_qsws_veg' )
2596!
2597!--           array of latent heat flux from vegetation surfaces
2598              IF ( av == 0 )  THEN
2599                 IF ( idsint == iup_u )  THEN
2600                    DO  m = 1, surf_usm_h%ns
2601                       i = surf_usm_h%i(m)
2602                       j = surf_usm_h%j(m)
2603                       k = surf_usm_h%k(m)
2604                       temp_pf(k,j,i) = surf_usm_h%qsws_veg(m)
2605                    ENDDO
2606                 ELSE
2607                    l = idsidx
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)%qsws_veg(m)
2613                    ENDDO
2614                 ENDIF
2615              ELSE
2616                 IF ( idsint == iup_u )  THEN
2617                    DO  m = 1, surf_usm_h%ns
2618                       i = surf_usm_h%i(m)
2619                       j = surf_usm_h%j(m)
2620                       k = surf_usm_h%k(m)
2621                       temp_pf(k,j,i) = surf_usm_h%qsws_veg_av(m)
2622                    ENDDO
2623                 ELSE
2624                    l = idsidx
2625                    DO  m = 1, surf_usm_v(l)%ns
2626                       i = surf_usm_v(l)%i(m)
2627                       j = surf_usm_v(l)%j(m)
2628                       k = surf_usm_v(l)%k(m)
2629                       temp_pf(k,j,i) = surf_usm_v(l)%qsws_veg_av(m)
2630                    ENDDO
2631                 ENDIF
2632              ENDIF
2633             
2634          CASE ( 'usm_qsws_liq' )
2635!
2636!--           array of latent heat flux from surfaces with liquid
2637              IF ( av == 0 )  THEN
2638                 IF ( idsint == iup_u )  THEN
2639                    DO  m = 1, surf_usm_h%ns
2640                       i = surf_usm_h%i(m)
2641                       j = surf_usm_h%j(m)
2642                       k = surf_usm_h%k(m)
2643                       temp_pf(k,j,i) = surf_usm_h%qsws_liq(m)
2644                    ENDDO
2645                 ELSE
2646                    l = idsidx
2647                    DO  m = 1, surf_usm_v(l)%ns
2648                       i = surf_usm_v(l)%i(m)
2649                       j = surf_usm_v(l)%j(m)
2650                       k = surf_usm_v(l)%k(m)
2651                       temp_pf(k,j,i) = surf_usm_v(l)%qsws_liq(m)
2652                    ENDDO
2653                 ENDIF
2654              ELSE
2655                 IF ( idsint == iup_u )  THEN
2656                    DO  m = 1, surf_usm_h%ns
2657                       i = surf_usm_h%i(m)
2658                       j = surf_usm_h%j(m)
2659                       k = surf_usm_h%k(m)
2660                       temp_pf(k,j,i) = surf_usm_h%qsws_liq_av(m)
2661                    ENDDO
2662                 ELSE
2663                    l = idsidx
2664                    DO  m = 1, surf_usm_v(l)%ns
2665                       i = surf_usm_v(l)%i(m)
2666                       j = surf_usm_v(l)%j(m)
2667                       k = surf_usm_v(l)%k(m)
2668                       temp_pf(k,j,i) = surf_usm_v(l)%qsws_liq_av(m)
2669                    ENDDO
2670                 ENDIF
2671              ENDIF
2672
2673          CASE ( 'usm_wghf' )
2674!
2675!--           array of heat flux from ground (land, wall, roof)
2676              IF ( av == 0 )  THEN
2677                 IF ( idsint == iup_u )  THEN
2678                    DO  m = 1, surf_usm_h%ns
2679                       i = surf_usm_h%i(m)
2680                       j = surf_usm_h%j(m)
2681                       k = surf_usm_h%k(m)
2682                       temp_pf(k,j,i) = surf_usm_h%wghf_eb(m)
2683                    ENDDO
2684                 ELSE
2685                    l = idsidx
2686                    DO  m = 1, surf_usm_v(l)%ns
2687                       i = surf_usm_v(l)%i(m)
2688                       j = surf_usm_v(l)%j(m)
2689                       k = surf_usm_v(l)%k(m)
2690                       temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb(m)
2691                    ENDDO
2692                 ENDIF
2693              ELSE
2694                 IF ( idsint == iup_u )  THEN
2695                    DO  m = 1, surf_usm_h%ns
2696                       i = surf_usm_h%i(m)
2697                       j = surf_usm_h%j(m)
2698                       k = surf_usm_h%k(m)
2699                       temp_pf(k,j,i) = surf_usm_h%wghf_eb_av(m)
2700                    ENDDO
2701                 ELSE
2702                    l = idsidx
2703                    DO  m = 1, surf_usm_v(l)%ns
2704                       i = surf_usm_v(l)%i(m)
2705                       j = surf_usm_v(l)%j(m)
2706                       k = surf_usm_v(l)%k(m)
2707                       temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb_av(m)
2708                    ENDDO
2709                 ENDIF
2710              ENDIF
2711
2712          CASE ( 'usm_wghf_window' )
2713!
2714!--           array of heat flux from window ground (land, wall, roof)
2715              IF ( av == 0 )  THEN
2716                 IF ( idsint == iup_u )  THEN
2717                    DO  m = 1, surf_usm_h%ns
2718                       i = surf_usm_h%i(m)
2719                       j = surf_usm_h%j(m)
2720                       k = surf_usm_h%k(m)
2721                       temp_pf(k,j,i) = surf_usm_h%wghf_eb_window(m)
2722                    ENDDO
2723                 ELSE
2724                    l = idsidx
2725                    DO  m = 1, surf_usm_v(l)%ns
2726                       i = surf_usm_v(l)%i(m)
2727                       j = surf_usm_v(l)%j(m)
2728                       k = surf_usm_v(l)%k(m)
2729                       temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb_window(m)
2730                    ENDDO
2731                 ENDIF
2732              ELSE
2733                 IF ( idsint == iup_u )  THEN
2734                    DO  m = 1, surf_usm_h%ns
2735                       i = surf_usm_h%i(m)
2736                       j = surf_usm_h%j(m)
2737                       k = surf_usm_h%k(m)
2738                       temp_pf(k,j,i) = surf_usm_h%wghf_eb_window_av(m)
2739                    ENDDO
2740                 ELSE
2741                    l = idsidx
2742                    DO  m = 1, surf_usm_v(l)%ns
2743                       i = surf_usm_v(l)%i(m)
2744                       j = surf_usm_v(l)%j(m)
2745                       k = surf_usm_v(l)%k(m)
2746                       temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb_window_av(m)
2747                    ENDDO
2748                 ENDIF
2749              ENDIF
2750
2751          CASE ( 'usm_wghf_green' )
2752!
2753!--           array of heat flux from green ground (land, wall, roof)
2754              IF ( av == 0 )  THEN
2755                 IF ( idsint == iup_u )  THEN
2756                    DO  m = 1, surf_usm_h%ns
2757                       i = surf_usm_h%i(m)
2758                       j = surf_usm_h%j(m)
2759                       k = surf_usm_h%k(m)
2760                       temp_pf(k,j,i) = surf_usm_h%wghf_eb_green(m)
2761                    ENDDO
2762                 ELSE
2763                    l = idsidx
2764                    DO  m = 1, surf_usm_v(l)%ns
2765                       i = surf_usm_v(l)%i(m)
2766                       j = surf_usm_v(l)%j(m)
2767                       k = surf_usm_v(l)%k(m)
2768                       temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb_green(m)
2769                    ENDDO
2770                 ENDIF
2771              ELSE
2772                 IF ( idsint == iup_u )  THEN
2773                    DO  m = 1, surf_usm_h%ns
2774                       i = surf_usm_h%i(m)
2775                       j = surf_usm_h%j(m)
2776                       k = surf_usm_h%k(m)
2777                       temp_pf(k,j,i) = surf_usm_h%wghf_eb_green_av(m)
2778                    ENDDO
2779                 ELSE
2780                    l = idsidx
2781                    DO  m = 1, surf_usm_v(l)%ns
2782                       i = surf_usm_v(l)%i(m)
2783                       j = surf_usm_v(l)%j(m)
2784                       k = surf_usm_v(l)%k(m)
2785                       temp_pf(k,j,i) = surf_usm_v(l)%wghf_eb_green_av(m)
2786                    ENDDO
2787                 ENDIF
2788              ENDIF
2789
2790          CASE ( 'usm_iwghf' )
2791!
2792!--           array of heat flux from indoor ground (land, wall, roof)
2793              IF ( av == 0 )  THEN
2794                 IF ( idsint == iup_u )  THEN
2795                    DO  m = 1, surf_usm_h%ns
2796                       i = surf_usm_h%i(m)
2797                       j = surf_usm_h%j(m)
2798                       k = surf_usm_h%k(m)
2799                       temp_pf(k,j,i) = surf_usm_h%iwghf_eb(m)
2800                    ENDDO
2801                 ELSE
2802                    l = idsidx
2803                    DO  m = 1, surf_usm_v(l)%ns
2804                       i = surf_usm_v(l)%i(m)
2805                       j = surf_usm_v(l)%j(m)
2806                       k = surf_usm_v(l)%k(m)
2807                       temp_pf(k,j,i) = surf_usm_v(l)%iwghf_eb(m)
2808                    ENDDO
2809                 ENDIF
2810              ELSE
2811                 IF ( idsint == iup_u )  THEN
2812                    DO  m = 1, surf_usm_h%ns
2813                       i = surf_usm_h%i(m)
2814                       j = surf_usm_h%j(m)
2815                       k = surf_usm_h%k(m)
2816                       temp_pf(k,j,i) = surf_usm_h%iwghf_eb_av(m)
2817                    ENDDO
2818                 ELSE
2819                    l = idsidx
2820                    DO  m = 1, surf_usm_v(l)%ns
2821                       i = surf_usm_v(l)%i(m)
2822                       j = surf_usm_v(l)%j(m)
2823                       k = surf_usm_v(l)%k(m)
2824                       temp_pf(k,j,i) = surf_usm_v(l)%iwghf_eb_av(m)
2825                    ENDDO
2826                 ENDIF
2827              ENDIF
2828
2829          CASE ( 'usm_iwghf_window' )
2830!
2831!--           array of heat flux from indoor window ground (land, wall, roof)
2832              IF ( av == 0 )  THEN
2833                 IF ( idsint == iup_u )  THEN
2834                    DO  m = 1, surf_usm_h%ns
2835                       i = surf_usm_h%i(m)
2836                       j = surf_usm_h%j(m)
2837                       k = surf_usm_h%k(m)
2838                       temp_pf(k,j,i) = surf_usm_h%iwghf_eb_window(m)
2839                    ENDDO
2840                 ELSE
2841                    l = idsidx
2842                    DO  m = 1, surf_usm_v(l)%ns
2843                       i = surf_usm_v(l)%i(m)
2844                       j = surf_usm_v(l)%j(m)
2845                       k = surf_usm_v(l)%k(m)
2846                       temp_pf(k,j,i) = surf_usm_v(l)%iwghf_eb_window(m)
2847                    ENDDO
2848                 ENDIF
2849              ELSE
2850                 IF ( idsint == iup_u )  THEN
2851                    DO  m = 1, surf_usm_h%ns
2852                       i = surf_usm_h%i(m)
2853                       j = surf_usm_h%j(m)
2854                       k = surf_usm_h%k(m)
2855                       temp_pf(k,j,i) = surf_usm_h%iwghf_eb_window_av(m)
2856                    ENDDO
2857                 ELSE
2858                    l = idsidx
2859                    DO  m = 1, surf_usm_v(l)%ns
2860                       i = surf_usm_v(l)%i(m)
2861                       j = surf_usm_v(l)%j(m)
2862                       k = surf_usm_v(l)%k(m)
2863                       temp_pf(k,j,i) = surf_usm_v(l)%iwghf_eb_window_av(m)
2864                    ENDDO
2865                 ENDIF
2866              ENDIF
2867             
2868          CASE ( 'usm_t_surf_wall' )
2869!
2870!--           surface temperature for surfaces
2871              IF ( av == 0 )  THEN
2872                 IF ( idsint == iup_u )  THEN
2873                    DO  m = 1, surf_usm_h%ns
2874                       i = surf_usm_h%i(m)
2875                       j = surf_usm_h%j(m)
2876                       k = surf_usm_h%k(m)
2877                       temp_pf(k,j,i) = t_surf_wall_h(m)
2878                    ENDDO
2879                 ELSE
2880                    l = idsidx
2881                    DO  m = 1, surf_usm_v(l)%ns
2882                       i = surf_usm_v(l)%i(m)
2883                       j = surf_usm_v(l)%j(m)
2884                       k = surf_usm_v(l)%k(m)
2885                       temp_pf(k,j,i) = t_surf_wall_v(l)%t(m)
2886                    ENDDO
2887                 ENDIF
2888              ELSE
2889                 IF ( idsint == iup_u )  THEN
2890                    DO  m = 1, surf_usm_h%ns
2891                       i = surf_usm_h%i(m)
2892                       j = surf_usm_h%j(m)
2893                       k = surf_usm_h%k(m)
2894                       temp_pf(k,j,i) = surf_usm_h%t_surf_wall_av(m)
2895                    ENDDO
2896                 ELSE
2897                    l = idsidx
2898                    DO  m = 1, surf_usm_v(l)%ns
2899                       i = surf_usm_v(l)%i(m)
2900                       j = surf_usm_v(l)%j(m)
2901                       k = surf_usm_v(l)%k(m)
2902                       temp_pf(k,j,i) = surf_usm_v(l)%t_surf_wall_av(m)
2903                    ENDDO
2904                 ENDIF
2905              ENDIF
2906             
2907          CASE ( 'usm_t_surf_window' )
2908!
2909!--           surface temperature for window surfaces
2910              IF ( av == 0 )  THEN
2911                 IF ( idsint == iup_u )  THEN
2912                    DO  m = 1, surf_usm_h%ns
2913                       i = surf_usm_h%i(m)
2914                       j = surf_usm_h%j(m)
2915                       k = surf_usm_h%k(m)
2916                       temp_pf(k,j,i) = t_surf_window_h(m)
2917                    ENDDO
2918                 ELSE
2919                    l = idsidx
2920                    DO  m = 1, surf_usm_v(l)%ns
2921                       i = surf_usm_v(l)%i(m)
2922                       j = surf_usm_v(l)%j(m)
2923                       k = surf_usm_v(l)%k(m)
2924                       temp_pf(k,j,i) = t_surf_window_v(l)%t(m)
2925                    ENDDO
2926                 ENDIF
2927
2928              ELSE
2929                 IF ( idsint == iup_u )  THEN
2930                    DO  m = 1, surf_usm_h%ns
2931                       i = surf_usm_h%i(m)
2932                       j = surf_usm_h%j(m)
2933                       k = surf_usm_h%k(m)
2934                       temp_pf(k,j,i) = surf_usm_h%t_surf_window_av(m)
2935                    ENDDO
2936                 ELSE
2937                    l = idsidx
2938                    DO  m = 1, surf_usm_v(l)%ns
2939                       i = surf_usm_v(l)%i(m)
2940                       j = surf_usm_v(l)%j(m)
2941                       k = surf_usm_v(l)%k(m)
2942                       temp_pf(k,j,i) = surf_usm_v(l)%t_surf_window_av(m)
2943                    ENDDO
2944
2945                 ENDIF
2946
2947              ENDIF
2948
2949          CASE ( 'usm_t_surf_green' )
2950!
2951!--           surface temperature for green surfaces
2952              IF ( av == 0 )  THEN
2953                 IF ( idsint == iup_u )  THEN
2954                    DO  m = 1, surf_usm_h%ns
2955                       i = surf_usm_h%i(m)
2956                       j = surf_usm_h%j(m)
2957                       k = surf_usm_h%k(m)
2958                       temp_pf(k,j,i) = t_surf_green_h(m)
2959                    ENDDO
2960                 ELSE
2961                    l = idsidx
2962                    DO  m = 1, surf_usm_v(l)%ns
2963                       i = surf_usm_v(l)%i(m)
2964                       j = surf_usm_v(l)%j(m)
2965                       k = surf_usm_v(l)%k(m)
2966                       temp_pf(k,j,i) = t_surf_green_v(l)%t(m)
2967                    ENDDO
2968                 ENDIF
2969
2970              ELSE
2971                 IF ( idsint == iup_u )  THEN
2972                    DO  m = 1, surf_usm_h%ns
2973                       i = surf_usm_h%i(m)
2974                       j = surf_usm_h%j(m)
2975                       k = surf_usm_h%k(m)
2976                       temp_pf(k,j,i) = surf_usm_h%t_surf_green_av(m)
2977                    ENDDO
2978                 ELSE
2979                    l = idsidx
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) = surf_usm_v(l)%t_surf_green_av(m)
2985                    ENDDO
2986
2987                 ENDIF
2988
2989              ENDIF
2990
2991          CASE ( 'usm_theta_10cm' )
2992!
2993!--           near surface temperature for whole surfaces
2994              IF ( av == 0 )  THEN
2995                 IF ( idsint == iup_u )  THEN
2996                    DO  m = 1, surf_usm_h%ns
2997                       i = surf_usm_h%i(m)
2998                       j = surf_usm_h%j(m)
2999                       k = surf_usm_h%k(m)
3000                       temp_pf(k,j,i) = surf_usm_h%pt_10cm(m)
3001                    ENDDO
3002                 ELSE
3003                    l = idsidx
3004                    DO  m = 1, surf_usm_v(l)%ns
3005                       i = surf_usm_v(l)%i(m)
3006                       j = surf_usm_v(l)%j(m)
3007                       k = surf_usm_v(l)%k(m)
3008                       temp_pf(k,j,i) = surf_usm_v(l)%pt_10cm(m)
3009                    ENDDO
3010                 ENDIF
3011             
3012             
3013              ELSE
3014                 IF ( idsint == iup_u )  THEN
3015                    DO  m = 1, surf_usm_h%ns
3016                       i = surf_usm_h%i(m)
3017                       j = surf_usm_h%j(m)
3018                       k = surf_usm_h%k(m)
3019                       temp_pf(k,j,i) = surf_usm_h%pt_10cm_av(m)
3020                    ENDDO
3021                 ELSE
3022                    l = idsidx
3023                    DO  m = 1, surf_usm_v(l)%ns
3024                       i = surf_usm_v(l)%i(m)
3025                       j = surf_usm_v(l)%j(m)
3026                       k = surf_usm_v(l)%k(m)
3027                       temp_pf(k,j,i) = surf_usm_v(l)%pt_10cm_av(m)
3028                    ENDDO
3029
3030                  ENDIF
3031              ENDIF
3032             
3033          CASE ( 'usm_t_wall' )
3034!
3035!--           wall temperature for  iwl layer of walls and land
3036              IF ( av == 0 )  THEN
3037                 IF ( idsint == iup_u )  THEN
3038                    DO  m = 1, surf_usm_h%ns
3039                       i = surf_usm_h%i(m)
3040                       j = surf_usm_h%j(m)
3041                       k = surf_usm_h%k(m)
3042                       temp_pf(k,j,i) = t_wall_h(iwl,m)
3043                    ENDDO
3044                 ELSE
3045                    l = idsidx
3046                    DO  m = 1, surf_usm_v(l)%ns
3047                       i = surf_usm_v(l)%i(m)
3048                       j = surf_usm_v(l)%j(m)
3049                       k = surf_usm_v(l)%k(m)
3050                       temp_pf(k,j,i) = t_wall_v(l)%t(iwl,m)
3051                    ENDDO
3052                 ENDIF
3053              ELSE
3054                 IF ( idsint == iup_u )  THEN
3055                    DO  m = 1, surf_usm_h%ns
3056                       i = surf_usm_h%i(m)
3057                       j = surf_usm_h%j(m)
3058                       k = surf_usm_h%k(m)
3059                       temp_pf(k,j,i) = surf_usm_h%t_wall_av(iwl,m)
3060                    ENDDO
3061                 ELSE
3062                    l = idsidx
3063                    DO  m = 1, surf_usm_v(l)%ns
3064                       i = surf_usm_v(l)%i(m)
3065                       j = surf_usm_v(l)%j(m)
3066                       k = surf_usm_v(l)%k(m)
3067                       temp_pf(k,j,i) = surf_usm_v(l)%t_wall_av(iwl,m)
3068                    ENDDO
3069                 ENDIF
3070              ENDIF
3071             
3072          CASE ( 'usm_t_window' )
3073!
3074!--           window temperature for iwl layer of walls and land
3075              IF ( av == 0 )  THEN
3076                 IF ( idsint == iup_u )  THEN
3077                    DO  m = 1, surf_usm_h%ns
3078                       i = surf_usm_h%i(m)
3079                       j = surf_usm_h%j(m)
3080                       k = surf_usm_h%k(m)
3081                       temp_pf(k,j,i) = t_window_h(iwl,m)
3082                    ENDDO
3083                 ELSE
3084                    l = idsidx
3085                    DO  m = 1, surf_usm_v(l)%ns
3086                       i = surf_usm_v(l)%i(m)
3087                       j = surf_usm_v(l)%j(m)
3088                       k = surf_usm_v(l)%k(m)
3089                       temp_pf(k,j,i) = t_window_v(l)%t(iwl,m)
3090                    ENDDO
3091                 ENDIF
3092              ELSE
3093                 IF ( idsint == iup_u )  THEN
3094                    DO  m = 1, surf_usm_h%ns
3095                       i = surf_usm_h%i(m)
3096                       j = surf_usm_h%j(m)
3097                       k = surf_usm_h%k(m)
3098                       temp_pf(k,j,i) = surf_usm_h%t_window_av(iwl,m)
3099                    ENDDO
3100                 ELSE
3101                    l = idsidx
3102                    DO  m = 1, surf_usm_v(l)%ns
3103                       i = surf_usm_v(l)%i(m)
3104                       j = surf_usm_v(l)%j(m)
3105                       k = surf_usm_v(l)%k(m)
3106                       temp_pf(k,j,i) = surf_usm_v(l)%t_window_av(iwl,m)
3107                    ENDDO
3108                 ENDIF
3109              ENDIF
3110
3111          CASE ( 'usm_t_green' )
3112!
3113!--           green temperature for  iwl layer of walls and land
3114              IF ( av == 0 )  THEN
3115                 IF ( idsint == iup_u )  THEN
3116                    DO  m = 1, surf_usm_h%ns
3117                       i = surf_usm_h%i(m)
3118                       j = surf_usm_h%j(m)
3119                       k = surf_usm_h%k(m)
3120                       temp_pf(k,j,i) = t_green_h(iwl,m)
3121                    ENDDO
3122                 ELSE
3123                    l = idsidx
3124                    DO  m = 1, surf_usm_v(l)%ns
3125                       i = surf_usm_v(l)%i(m)
3126                       j = surf_usm_v(l)%j(m)
3127                       k = surf_usm_v(l)%k(m)
3128                       temp_pf(k,j,i) = t_green_v(l)%t(iwl,m)
3129                    ENDDO
3130                 ENDIF
3131              ELSE
3132                 IF ( idsint == iup_u )  THEN
3133                    DO  m = 1, surf_usm_h%ns
3134                       i = surf_usm_h%i(m)
3135                       j = surf_usm_h%j(m)
3136                       k = surf_usm_h%k(m)
3137                       temp_pf(k,j,i) = surf_usm_h%t_green_av(iwl,m)
3138                    ENDDO
3139                 ELSE
3140                    l = idsidx
3141                    DO  m = 1, surf_usm_v(l)%ns
3142                       i = surf_usm_v(l)%i(m)
3143                       j = surf_usm_v(l)%j(m)
3144                       k = surf_usm_v(l)%k(m)
3145                       temp_pf(k,j,i) = surf_usm_v(l)%t_green_av(iwl,m)
3146                    ENDDO
3147                 ENDIF
3148              ENDIF
3149             
3150              CASE ( 'usm_swc' )
3151!
3152!--           soil water content for  iwl layer of walls and land
3153              IF ( av == 0 )  THEN
3154                 IF ( idsint == iup_u )  THEN
3155                    DO  m = 1, surf_usm_h%ns
3156                       i = surf_usm_h%i(m)
3157                       j = surf_usm_h%j(m)
3158                       k = surf_usm_h%k(m)
3159                       temp_pf(k,j,i) = swc_h(iwl,m)
3160                    ENDDO
3161                 ELSE
3162                    l = idsidx
3163                    DO  m = 1, surf_usm_v(l)%ns
3164                       i = surf_usm_v(l)%i(m)
3165                       j = surf_usm_v(l)%j(m)
3166                       k = surf_usm_v(l)%k(m)
3167                       temp_pf(k,j,i) = swc_v(l)%t(iwl,m)
3168                    ENDDO
3169                 ENDIF
3170              ELSE
3171                 IF ( idsint == iup_u )  THEN
3172                    DO  m = 1, surf_usm_h%ns
3173                       i = surf_usm_h%i(m)
3174                       j = surf_usm_h%j(m)
3175                       k = surf_usm_h%k(m)
3176                       temp_pf(k,j,i) = surf_usm_h%swc_av(iwl,m)
3177                    ENDDO
3178                 ELSE
3179                    l = idsidx
3180                    DO  m = 1, surf_usm_v(l)%ns
3181                       i = surf_usm_v(l)%i(m)
3182                       j = surf_usm_v(l)%j(m)
3183                       k = surf_usm_v(l)%k(m)
3184                       temp_pf(k,j,i) = surf_usm_v(l)%swc_av(iwl,m)
3185                    ENDDO
3186                 ENDIF
3187              ENDIF
3188
3189             
3190          CASE DEFAULT
3191              found = .FALSE.
3192              RETURN
3193        END SELECT
3194
3195!
3196!--     Rearrange dimensions for NetCDF output
3197!--     FIXME: this may generate FPE overflow upon conversion from DP to SP
3198        DO  j = nys, nyn
3199            DO  i = nxl, nxr
3200                DO  k = nzb_do, nzt_do
3201                    local_pf(i,j,k) = temp_pf(k,j,i)
3202                ENDDO
3203            ENDDO
3204        ENDDO
3205       
3206    END SUBROUTINE usm_data_output_3d
3207   
3208
3209!------------------------------------------------------------------------------!
3210!
3211! Description:
3212! ------------
3213!> Soubroutine defines appropriate grid for netcdf variables.
3214!> It is called out from subroutine netcdf.
3215!------------------------------------------------------------------------------!
3216    SUBROUTINE usm_define_netcdf_grid( variable, found, grid_x, grid_y, grid_z )
3217   
3218        IMPLICIT NONE
3219
3220        CHARACTER (len=*), INTENT(IN)  ::  variable    !<
3221        LOGICAL, INTENT(OUT)           ::  found       !<
3222        CHARACTER (len=*), INTENT(OUT) ::  grid_x      !<
3223        CHARACTER (len=*), INTENT(OUT) ::  grid_y      !<
3224        CHARACTER (len=*), INTENT(OUT) ::  grid_z      !<
3225
3226        CHARACTER (len=varnamelength)  :: var
3227
3228        var = TRIM(variable)
3229        IF ( var(1:9) == 'usm_wshf_'  .OR.  var(1:9) == 'usm_wghf_'  .OR.                   &
3230             var(1:16) == 'usm_wghf_window_'  .OR. var(1:15) == 'usm_wghf_green_' .OR.      &
3231             var(1:10) == 'usm_iwghf_'  .OR. var(1:17) == 'usm_iwghf_window_' .OR.          &
3232             var(1:9) == 'usm_qsws_'  .OR.  var(1:13) == 'usm_qsws_veg_'  .OR.              &
3233             var(1:13) == 'usm_qsws_liq_' .OR.                                              &
3234             var(1:15) == 'usm_t_surf_wall'  .OR.  var(1:10) == 'usm_t_wall'  .OR.          &
3235             var(1:17) == 'usm_t_surf_window'  .OR.  var(1:12) == 'usm_t_window'  .OR.      &
3236             var(1:16) == 'usm_t_surf_green'  .OR. var(1:11) == 'usm_t_green' .OR.          &
3237             var(1:15) == 'usm_theta_10cm' .OR.                                             &
3238             var(1:9) == 'usm_surfz'  .OR.  var(1:11) == 'usm_surfcat'  .OR.                &
3239             var(1:16) == 'usm_surfwintrans'  .OR. var(1:7) == 'usm_swc' ) THEN
3240
3241            found = .TRUE.
3242            grid_x = 'x'
3243            grid_y = 'y'
3244            grid_z = 'zu'
3245        ELSE
3246            found  = .FALSE.
3247            grid_x = 'none'
3248            grid_y = 'none'
3249            grid_z = 'none'
3250        ENDIF
3251
3252    END SUBROUTINE usm_define_netcdf_grid
3253   
3254
3255!------------------------------------------------------------------------------!
3256! Description:
3257! ------------
3258!> Initialization of the wall surface model
3259!------------------------------------------------------------------------------!
3260    SUBROUTINE usm_init_material_model
3261
3262        IMPLICIT NONE
3263
3264        INTEGER(iwp) ::  k, l, m            !< running indices
3265       
3266        IF ( debug_output )  CALL debug_message( 'usm_init_material_model', 'start' )
3267
3268!
3269!--     Calculate wall grid spacings.
3270!--     Temperature is defined at the center of the wall layers,
3271!--     whereas gradients/fluxes are defined at the edges (_stag)     
3272!--     apply for all particular surface grids. First for horizontal surfaces
3273        DO  m = 1, surf_usm_h%ns
3274
3275           surf_usm_h%dz_wall(nzb_wall,m) = surf_usm_h%zw(nzb_wall,m)
3276           DO k = nzb_wall+1, nzt_wall
3277               surf_usm_h%dz_wall(k,m) = surf_usm_h%zw(k,m) -                  &
3278                                         surf_usm_h%zw(k-1,m)
3279           ENDDO
3280           surf_usm_h%dz_window(nzb_wall,m) = surf_usm_h%zw_window(nzb_wall,m)
3281           DO k = nzb_wall+1, nzt_wall
3282               surf_usm_h%dz_window(k,m) = surf_usm_h%zw_window(k,m) -         &
3283                                         surf_usm_h%zw_window(k-1,m)
3284           ENDDO
3285           
3286           surf_usm_h%dz_wall(nzt_wall+1,m) = surf_usm_h%dz_wall(nzt_wall,m)
3287
3288           DO k = nzb_wall, nzt_wall-1
3289               surf_usm_h%dz_wall_stag(k,m) = 0.5 * (                          &
3290                           surf_usm_h%dz_wall(k+1,m) + surf_usm_h%dz_wall(k,m) )
3291           ENDDO
3292           surf_usm_h%dz_wall_stag(nzt_wall,m) = surf_usm_h%dz_wall(nzt_wall,m)
3293           
3294           surf_usm_h%dz_window(nzt_wall+1,m) = surf_usm_h%dz_window(nzt_wall,m)
3295
3296           DO k = nzb_wall, nzt_wall-1
3297               surf_usm_h%dz_window_stag(k,m) = 0.5 * (                        &
3298                           surf_usm_h%dz_window(k+1,m) + surf_usm_h%dz_window(k,m) )
3299           ENDDO
3300           surf_usm_h%dz_window_stag(nzt_wall,m) = surf_usm_h%dz_window(nzt_wall,m)
3301
3302           IF (surf_usm_h%green_type_roof(m) == 2.0_wp ) THEN
3303!
3304!-- extensive green roof
3305!-- set ratio of substrate layer thickness, soil-type and LAI
3306              soil_type = 3
3307              surf_usm_h%lai(m) = 2.0_wp
3308             
3309              surf_usm_h%zw_green(nzb_wall,m)   = 0.05_wp
3310              surf_usm_h%zw_green(nzb_wall+1,m) = 0.10_wp
3311              surf_usm_h%zw_green(nzb_wall+2,m) = 0.15_wp
3312              surf_usm_h%zw_green(nzb_wall+3,m) = 0.20_wp
3313           ELSE
3314!
3315!-- intensiv green roof
3316!-- set ratio of substrate layer thickness, soil-type and LAI
3317              soil_type = 6
3318              surf_usm_h%lai(m) = 4.0_wp
3319             
3320              surf_usm_h%zw_green(nzb_wall,m)   = 0.05_wp
3321              surf_usm_h%zw_green(nzb_wall+1,m) = 0.10_wp
3322              surf_usm_h%zw_green(nzb_wall+2,m) = 0.40_wp
3323              surf_usm_h%zw_green(nzb_wall+3,m) = 0.80_wp
3324           ENDIF
3325           
3326           surf_usm_h%dz_green(nzb_wall,m) = surf_usm_h%zw_green(nzb_wall,m)
3327           DO k = nzb_wall+1, nzt_wall
3328               surf_usm_h%dz_green(k,m) = surf_usm_h%zw_green(k,m) -           &
3329                                         surf_usm_h%zw_green(k-1,m)
3330           ENDDO
3331           surf_usm_h%dz_green(nzt_wall+1,m) = surf_usm_h%dz_green(nzt_wall,m)
3332
3333           DO k = nzb_wall, nzt_wall-1
3334               surf_usm_h%dz_green_stag(k,m) = 0.5 * (                         &
3335                           surf_usm_h%dz_green(k+1,m) + surf_usm_h%dz_green(k,m) )
3336           ENDDO
3337           surf_usm_h%dz_green_stag(nzt_wall,m) = surf_usm_h%dz_green(nzt_wall,m)
3338           
3339          IF ( alpha_vangenuchten == 9999999.9_wp )  THEN
3340             alpha_vangenuchten = soil_pars(0,soil_type)
3341          ENDIF
3342
3343          IF ( l_vangenuchten == 9999999.9_wp )  THEN
3344             l_vangenuchten = soil_pars(1,soil_type)
3345          ENDIF
3346
3347          IF ( n_vangenuchten == 9999999.9_wp )  THEN
3348             n_vangenuchten = soil_pars(2,soil_type)           
3349          ENDIF
3350
3351          IF ( hydraulic_conductivity == 9999999.9_wp )  THEN
3352             hydraulic_conductivity = soil_pars(3,soil_type)           
3353          ENDIF
3354
3355          IF ( saturation_moisture == 9999999.9_wp )  THEN
3356             saturation_moisture = m_soil_pars(0,soil_type)           
3357          ENDIF
3358
3359          IF ( field_capacity == 9999999.9_wp )  THEN
3360             field_capacity = m_soil_pars(1,soil_type)           
3361          ENDIF
3362
3363          IF ( wilting_point == 9999999.9_wp )  THEN
3364             wilting_point = m_soil_pars(2,soil_type)           
3365          ENDIF
3366
3367          IF ( residual_moisture == 9999999.9_wp )  THEN
3368             residual_moisture = m_soil_pars(3,soil_type)       
3369          ENDIF
3370         
3371          DO k = nzb_wall, nzt_wall+1
3372             swc_h(k,m) = field_capacity
3373             rootfr_h(k,m) = 0.5_wp
3374             surf_usm_h%alpha_vg_green(m)      = alpha_vangenuchten
3375             surf_usm_h%l_vg_green(m)          = l_vangenuchten
3376             surf_usm_h%n_vg_green(m)          = n_vangenuchten 
3377             surf_usm_h%gamma_w_green_sat(k,m) = hydraulic_conductivity
3378             swc_sat_h(k,m)                    = saturation_moisture
3379             fc_h(k,m)                         = field_capacity
3380             wilt_h(k,m)                       = wilting_point
3381             swc_res_h(k,m)                    = residual_moisture
3382          ENDDO
3383
3384        ENDDO
3385
3386        surf_usm_h%ddz_wall        = 1.0_wp / surf_usm_h%dz_wall
3387        surf_usm_h%ddz_wall_stag   = 1.0_wp / surf_usm_h%dz_wall_stag
3388        surf_usm_h%ddz_window      = 1.0_wp / surf_usm_h%dz_window
3389        surf_usm_h%ddz_window_stag = 1.0_wp / surf_usm_h%dz_window_stag
3390        surf_usm_h%ddz_green       = 1.0_wp / surf_usm_h%dz_green
3391        surf_usm_h%ddz_green_stag  = 1.0_wp / surf_usm_h%dz_green_stag
3392!       
3393!--     For vertical surfaces
3394        DO  l = 0, 3
3395           DO  m = 1, surf_usm_v(l)%ns
3396              surf_usm_v(l)%dz_wall(nzb_wall,m) = surf_usm_v(l)%zw(nzb_wall,m)
3397              DO k = nzb_wall+1, nzt_wall
3398                  surf_usm_v(l)%dz_wall(k,m) = surf_usm_v(l)%zw(k,m) -         &
3399                                               surf_usm_v(l)%zw(k-1,m)
3400              ENDDO
3401              surf_usm_v(l)%dz_window(nzb_wall,m) = surf_usm_v(l)%zw_window(nzb_wall,m)
3402              DO k = nzb_wall+1, nzt_wall
3403                  surf_usm_v(l)%dz_window(k,m) = surf_usm_v(l)%zw_window(k,m) - &
3404                                               surf_usm_v(l)%zw_window(k-1,m)
3405              ENDDO
3406              surf_usm_v(l)%dz_green(nzb_wall,m) = surf_usm_v(l)%zw_green(nzb_wall,m)
3407              DO k = nzb_wall+1, nzt_wall
3408                  surf_usm_v(l)%dz_green(k,m) = surf_usm_v(l)%zw_green(k,m) - &
3409                                               surf_usm_v(l)%zw_green(k-1,m)
3410              ENDDO
3411           
3412              surf_usm_v(l)%dz_wall(nzt_wall+1,m) =                            &
3413                                              surf_usm_v(l)%dz_wall(nzt_wall,m)
3414
3415              DO k = nzb_wall, nzt_wall-1
3416                  surf_usm_v(l)%dz_wall_stag(k,m) = 0.5 * (                    &
3417                                                surf_usm_v(l)%dz_wall(k+1,m) + &
3418                                                surf_usm_v(l)%dz_wall(k,m) )
3419              ENDDO
3420              surf_usm_v(l)%dz_wall_stag(nzt_wall,m) =                         &
3421                                              surf_usm_v(l)%dz_wall(nzt_wall,m)
3422              surf_usm_v(l)%dz_window(nzt_wall+1,m) =                          &
3423                                              surf_usm_v(l)%dz_window(nzt_wall,m)
3424
3425              DO k = nzb_wall, nzt_wall-1
3426                  surf_usm_v(l)%dz_window_stag(k,m) = 0.5 * (                    &
3427                                                surf_usm_v(l)%dz_window(k+1,m) + &
3428                                                surf_usm_v(l)%dz_window(k,m) )
3429              ENDDO
3430              surf_usm_v(l)%dz_window_stag(nzt_wall,m) =                         &
3431                                              surf_usm_v(l)%dz_window(nzt_wall,m)
3432              surf_usm_v(l)%dz_green(nzt_wall+1,m) =                             &
3433                                              surf_usm_v(l)%dz_green(nzt_wall,m)
3434
3435              DO k = nzb_wall, nzt_wall-1
3436                  surf_usm_v(l)%dz_green_stag(k,m) = 0.5 * (                    &
3437                                                surf_usm_v(l)%dz_green(k+1,m) + &
3438                                                surf_usm_v(l)%dz_green(k,m) )
3439              ENDDO
3440              surf_usm_v(l)%dz_green_stag(nzt_wall,m) =                         &
3441                                              surf_usm_v(l)%dz_green(nzt_wall,m)
3442           ENDDO
3443           surf_usm_v(l)%ddz_wall        = 1.0_wp / surf_usm_v(l)%dz_wall
3444           surf_usm_v(l)%ddz_wall_stag   = 1.0_wp / surf_usm_v(l)%dz_wall_stag
3445           surf_usm_v(l)%ddz_window      = 1.0_wp / surf_usm_v(l)%dz_window
3446           surf_usm_v(l)%ddz_window_stag = 1.0_wp / surf_usm_v(l)%dz_window_stag
3447           surf_usm_v(l)%ddz_green       = 1.0_wp / surf_usm_v(l)%dz_green
3448           surf_usm_v(l)%ddz_green_stag  = 1.0_wp / surf_usm_v(l)%dz_green_stag
3449        ENDDO     
3450
3451       
3452        IF ( debug_output )  CALL debug_message( 'usm_init_material_model', 'end' )
3453
3454    END SUBROUTINE usm_init_material_model
3455
3456 
3457!------------------------------------------------------------------------------!
3458! Description:
3459! ------------
3460!> Initialization of the urban surface model
3461!------------------------------------------------------------------------------!
3462    SUBROUTINE usm_init
3463
3464        USE arrays_3d,                                                         &
3465            ONLY:  zw
3466
3467        USE netcdf_data_input_mod,                                             &
3468            ONLY:  building_pars_f, building_surface_pars_f, building_type_f,  &
3469                   terrain_height_f
3470   
3471        IMPLICIT NONE
3472
3473        INTEGER(iwp) ::  i                   !< loop index x-dirction
3474        INTEGER(iwp) ::  ind_alb_green       !< index in input list for green albedo
3475        INTEGER(iwp) ::  ind_alb_wall        !< index in input list for wall albedo
3476        INTEGER(iwp) ::  ind_alb_win         !< index in input list for window albedo
3477        INTEGER(iwp) ::  ind_emis_wall       !< index in input list for wall emissivity
3478        INTEGER(iwp) ::  ind_emis_green      !< index in input list for green emissivity
3479        INTEGER(iwp) ::  ind_emis_win        !< index in input list for window emissivity
3480        INTEGER(iwp) ::  ind_green_frac_w    !< index in input list for green fraction on wall
3481        INTEGER(iwp) ::  ind_green_frac_r    !< index in input list for green fraction on roof
3482        INTEGER(iwp) ::  ind_hc1             !< index in input list for heat capacity at first wall layer
3483        INTEGER(iwp) ::  ind_hc1_win         !< index in input list for heat capacity at first window layer
3484        INTEGER(iwp) ::  ind_hc2             !< index in input list for heat capacity at second wall layer
3485        INTEGER(iwp) ::  ind_hc2_win         !< index in input list for heat capacity at second window layer
3486        INTEGER(iwp) ::  ind_hc3             !< index in input list for heat capacity at third wall layer
3487        INTEGER(iwp) ::  ind_hc3_win         !< index in input list for heat capacity at third window layer
3488        INTEGER(iwp) ::  ind_lai_r           !< index in input list for LAI on roof
3489        INTEGER(iwp) ::  ind_lai_w           !< index in input list for LAI on wall
3490        INTEGER(iwp) ::  ind_tc1             !< index in input list for thermal conductivity at first wall layer
3491        INTEGER(iwp) ::  ind_tc1_win         !< index in input list for thermal conductivity at first window layer
3492        INTEGER(iwp) ::  ind_tc2             !< index in input list for thermal conductivity at second wall layer
3493        INTEGER(iwp) ::  ind_tc2_win         !< index in input list for thermal conductivity at second window layer
3494        INTEGER(iwp) ::  ind_tc3             !< index in input list for thermal conductivity at third wall layer
3495        INTEGER(iwp) ::  ind_tc3_win         !< index in input list for thermal conductivity at third window layer
3496        INTEGER(iwp) ::  ind_thick_1         !< index in input list for thickness of first wall layer
3497        INTEGER(iwp) ::  ind_thick_1_win     !< index in input list for thickness of first window layer
3498        INTEGER(iwp) ::  ind_thick_2         !< index in input list for thickness of second wall layer
3499        INTEGER(iwp) ::  ind_thick_2_win     !< index in input list for thickness of second window layer
3500        INTEGER(iwp) ::  ind_thick_3         !< index in input list for thickness of third wall layer
3501        INTEGER(iwp) ::  ind_thick_3_win     !< index in input list for thickness of third window layer
3502        INTEGER(iwp) ::  ind_thick_4         !< index in input list for thickness of fourth wall layer
3503        INTEGER(iwp) ::  ind_thick_4_win     !< index in input list for thickness of fourth window layer
3504        INTEGER(iwp) ::  ind_trans           !< index in input list for window transmissivity
3505        INTEGER(iwp) ::  ind_wall_frac       !< index in input list for wall fraction
3506        INTEGER(iwp) ::  ind_win_frac        !< index in input list for window fraction
3507        INTEGER(iwp) ::  ind_z0              !< index in input list for z0
3508        INTEGER(iwp) ::  ind_z0qh            !< index in input list for z0h / z0q
3509        INTEGER(iwp) ::  is                  !< loop index input surface element
3510        INTEGER(iwp) ::  j                   !< loop index y-dirction
3511        INTEGER(iwp) ::  k                   !< loop index z-dirction
3512        INTEGER(iwp) ::  l                   !< loop index surface orientation
3513        INTEGER(iwp) ::  m                   !< loop index surface element
3514        INTEGER(iwp) ::  st                  !< dummy 
3515
3516        REAL(wp)     ::  c, tin, twin
3517        REAL(wp)     ::  ground_floor_level_l         !< local height of ground floor level
3518        REAL(wp)     ::  z_agl                        !< height above ground
3519
3520        IF ( debug_output )  CALL debug_message( 'usm_init', 'start' )
3521
3522        CALL cpu_log( log_point_s(78), 'usm_init', 'start' )
3523!
3524!--     surface forcing have to be disabled for LSF
3525!--     in case of enabled urban surface module
3526        IF ( large_scale_forcing )  THEN
3527            lsf_surf = .FALSE.
3528        ENDIF
3529!
3530!--     Flag surface elements belonging to the ground floor level. Therefore,
3531!--     use terrain height array from file, if available. This flag is later used
3532!--     to control initialization of surface attributes.
3533!--     Todo: for the moment disable initialization of building roofs with
3534!--     ground-floor-level properties.
3535        surf_usm_h%ground_level = .FALSE. 
3536
3537        DO  l = 0, 3
3538           surf_usm_v(l)%ground_level = .FALSE.
3539           DO  m = 1, surf_usm_v(l)%ns
3540              i = surf_usm_v(l)%i(m) + surf_usm_v(l)%ioff
3541              j = surf_usm_v(l)%j(m) + surf_usm_v(l)%joff
3542              k = surf_usm_v(l)%k(m)
3543!
3544!--           Determine local ground level. Level 1 - default value,
3545!--           level 2 - initialization according to building type,
3546!--           level 3 - initialization from value read from file.
3547              ground_floor_level_l = ground_floor_level
3548             
3549              IF ( building_type_f%from_file )  THEN
3550                  ground_floor_level_l =                                       &
3551                              building_pars(ind_gflh,building_type_f%var(j,i))
3552              ENDIF
3553             
3554              IF ( building_pars_f%from_file )  THEN
3555                 IF ( building_pars_f%pars_xy(ind_gflh,j,i) /=                 &
3556                      building_pars_f%fill )                                   &
3557                    ground_floor_level_l = building_pars_f%pars_xy(ind_gflh,j,i)
3558              ENDIF
3559!
3560!--           Determine height of surface element above ground level. Please
3561!--           note, height of surface element is determined with respect to
3562!--           its height above ground of the reference grid point in atmosphere,
3563!--           Therefore, substract the offset values when assessing the terrain
3564!--           height.
3565              IF ( terrain_height_f%from_file )  THEN
3566                 z_agl = zw(k) - terrain_height_f%var(j-surf_usm_v(l)%joff,    &
3567                                                      i-surf_usm_v(l)%ioff)
3568              ELSE
3569                 z_agl = zw(k)
3570              ENDIF
3571!
3572!--           Set flag for ground level
3573              IF ( z_agl <= ground_floor_level_l )                             &
3574                 surf_usm_v(l)%ground_level(m) = .TRUE.
3575
3576           ENDDO
3577        ENDDO
3578!
3579!--     Initialization of resistances.
3580        DO  m = 1, surf_usm_h%ns
3581           surf_usm_h%r_a(m)        = 50.0_wp
3582           surf_usm_h%r_a_green(m)  = 50.0_wp
3583           surf_usm_h%r_a_window(m) = 50.0_wp
3584        ENDDO
3585        DO  l = 0, 3
3586           DO  m = 1, surf_usm_v(l)%ns
3587              surf_usm_v(l)%r_a(m)        = 50.0_wp
3588              surf_usm_v(l)%r_a_green(m)  = 50.0_wp
3589              surf_usm_v(l)%r_a_window(m) = 50.0_wp
3590           ENDDO
3591        ENDDO
3592       
3593!
3594!--    Map values onto horizontal elemements
3595       DO  m = 1, surf_usm_h%ns
3596          surf_usm_h%r_canopy(m)     = 200.0_wp !< canopy_resistance
3597          surf_usm_h%r_canopy_min(m) = 200.0_wp !< min_canopy_resistance
3598          surf_usm_h%g_d(m)          = 0.0_wp   !< canopy_resistance_coefficient
3599       ENDDO
3600!
3601!--    Map values onto vertical elements, even though this does not make
3602!--    much sense.
3603       DO  l = 0, 3
3604          DO  m = 1, surf_usm_v(l)%ns
3605             surf_usm_v(l)%r_canopy(m)     = 200.0_wp !< canopy_resistance
3606             surf_usm_v(l)%r_canopy_min(m) = 200.0_wp !< min_canopy_resistance
3607             surf_usm_v(l)%g_d(m)          = 0.0_wp   !< canopy_resistance_coefficient
3608          ENDDO
3609       ENDDO
3610
3611!
3612!--     Initialize urban-type surface attribute. According to initialization in
3613!--     land-surface model, follow a 3-level approach.
3614!--     Level 1 - initialization via default attributes
3615        DO  m = 1, surf_usm_h%ns
3616!
3617!--        Now, all horizontal surfaces are roof surfaces (?)
3618           surf_usm_h%isroof_surf(m)   = .TRUE.
3619           surf_usm_h%surface_types(m) = roof_category         !< default category for root surface
3620!
3621!--        In order to distinguish between ground floor level and
3622!--        above-ground-floor level surfaces, set input indices.
3623
3624           ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl, &
3625                                     surf_usm_h%ground_level(m) )
3626           ind_lai_r        = MERGE( ind_lai_r_gfl,        ind_lai_r_agfl,        &
3627                                     surf_usm_h%ground_level(m) )
3628           ind_z0           = MERGE( ind_z0_gfl,           ind_z0_agfl,           &
3629                                     surf_usm_h%ground_level(m) )
3630           ind_z0qh         = MERGE( ind_z0qh_gfl,         ind_z0qh_agfl,         &
3631                                     surf_usm_h%ground_level(m) )
3632!
3633!--        Store building type and its name on each surface element
3634           surf_usm_h%building_type(m)      = building_type
3635           surf_usm_h%building_type_name(m) = building_type_name(building_type)
3636!
3637!--        Initialize relatvie wall- (0), green- (1) and window (2) fractions
3638           surf_usm_h%frac(ind_veg_wall,m)  = building_pars(ind_wall_frac_r,building_type)   
3639           surf_usm_h%frac(ind_pav_green,m) = building_pars(ind_green_frac_r,building_type) 
3640           surf_usm_h%frac(ind_wat_win,m)   = building_pars(ind_win_frac_r,building_type) 
3641           surf_usm_h%lai(m)                = building_pars(ind_lai_r,building_type) 
3642
3643           surf_usm_h%rho_c_wall(nzb_wall,m)   = building_pars(ind_hc1_wall_r,building_type) 
3644           surf_usm_h%rho_c_wall(nzb_wall+1,m) = building_pars(ind_hc1_wall_r,building_type)
3645           surf_usm_h%rho_c_wall(nzb_wall+2,m) = building_pars(ind_hc2_wall_r,building_type)
3646           surf_usm_h%rho_c_wall(nzb_wall+3,m) = building_pars(ind_hc3_wall_r,building_type)   
3647           surf_usm_h%lambda_h(nzb_wall,m)   = building_pars(ind_tc1_wall_r,building_type) 
3648           surf_usm_h%lambda_h(nzb_wall+1,m) = building_pars(ind_tc1_wall_r,building_type) 
3649           surf_usm_h%lambda_h(nzb_wall+2,m) = building_pars(ind_tc2_wall_r,building_type)
3650           surf_usm_h%lambda_h(nzb_wall+3,m) = building_pars(ind_tc3_wall_r,building_type)   
3651           surf_usm_h%rho_c_green(nzb_wall,m)   = rho_c_soil !building_pars(ind_hc1_wall_r,building_type) 
3652           surf_usm_h%rho_c_green(nzb_wall+1,m) = rho_c_soil !building_pars(ind_hc1_wall_r,building_type)
3653           surf_usm_h%rho_c_green(nzb_wall+2,m) = rho_c_soil !building_pars(ind_hc2_wall_r,building_type)
3654           surf_usm_h%rho_c_green(nzb_wall+3,m) = rho_c_soil !building_pars(ind_hc3_wall_r,building_type)   
3655           surf_usm_h%lambda_h_green(nzb_wall,m)   = lambda_h_green_sm !building_pars(ind_tc1_wall_r,building_type) 
3656           surf_usm_h%lambda_h_green(nzb_wall+1,m) = lambda_h_green_sm !building_pars(ind_tc1_wall_r,building_type)
3657           surf_usm_h%lambda_h_green(nzb_wall+2,m) = lambda_h_green_sm !building_pars(ind_tc2_wall_r,building_type)
3658           surf_usm_h%lambda_h_green(nzb_wall+3,m) = lambda_h_green_sm !building_pars(ind_tc3_wall_r,building_type)
3659           surf_usm_h%rho_c_window(nzb_wall,m)   = building_pars(ind_hc1_win_r,building_type) 
3660           surf_usm_h%rho_c_window(nzb_wall+1,m) = building_pars(ind_hc1_win_r,building_type)
3661           surf_usm_h%rho_c_window(nzb_wall+2,m) = building_pars(ind_hc2_win_r,building_type)
3662           surf_usm_h%rho_c_window(nzb_wall+3,m) = building_pars(ind_hc3_win_r,building_type)   
3663           surf_usm_h%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win_r,building_type) 
3664           surf_usm_h%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win_r,building_type) 
3665           surf_usm_h%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win_r,building_type)
3666           surf_usm_h%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win_r,building_type)   
3667
3668           surf_usm_h%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,building_type)   
3669           surf_usm_h%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,building_type)   
3670!
3671!--        emissivity of wall-, green- and window fraction
3672           surf_usm_h%emissivity(ind_veg_wall,m)  = building_pars(ind_emis_wall_r,building_type)
3673           surf_usm_h%emissivity(ind_pav_green,m) = building_pars(ind_emis_green_r,building_type)
3674           surf_usm_h%emissivity(ind_wat_win,m)   = building_pars(ind_emis_win_r,building_type)
3675
3676           surf_usm_h%transmissivity(m)      = building_pars(ind_trans_r,building_type)
3677
3678           surf_usm_h%z0(m)                  = building_pars(ind_z0,building_type)
3679           surf_usm_h%z0h(m)                 = building_pars(ind_z0qh,building_type)
3680           surf_usm_h%z0q(m)                 = building_pars(ind_z0qh,building_type)
3681!
3682!--        albedo type for wall fraction, green fraction, window fraction
3683           surf_usm_h%albedo_type(ind_veg_wall,m)  = INT( building_pars(ind_alb_wall_r,building_type)  )
3684           surf_usm_h%albedo_type(ind_pav_green,m) = INT( building_pars(ind_alb_green_r,building_type) )
3685           surf_usm_h%albedo_type(ind_wat_win,m)   = INT( building_pars(ind_alb_win_r,building_type)   )
3686
3687           surf_usm_h%zw(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,building_type)
3688           surf_usm_h%zw(nzb_wall+1,m)       = building_pars(ind_thick_2_wall_r,building_type)
3689           surf_usm_h%zw(nzb_wall+2,m)       = building_pars(ind_thick_3_wall_r,building_type)
3690           surf_usm_h%zw(nzb_wall+3,m)       = building_pars(ind_thick_4_wall_r,building_type)
3691           
3692           surf_usm_h%zw_green(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,building_type)
3693           surf_usm_h%zw_green(nzb_wall+1,m)       = building_pars(ind_thick_2_wall_r,building_type)
3694           surf_usm_h%zw_green(nzb_wall+2,m)       = building_pars(ind_thick_3_wall_r,building_type)
3695           surf_usm_h%zw_green(nzb_wall+3,m)       = building_pars(ind_thick_4_wall_r,building_type)
3696           
3697           surf_usm_h%zw_window(nzb_wall,m)         = building_pars(ind_thick_1_win_r,building_type)
3698           surf_usm_h%zw_window(nzb_wall+1,m)       = building_pars(ind_thick_2_win_r,building_type)
3699           surf_usm_h%zw_window(nzb_wall+2,m)       = building_pars(ind_thick_3_win_r,building_type)
3700           surf_usm_h%zw_window(nzb_wall+3,m)       = building_pars(ind_thick_4_win_r,building_type)
3701
3702           surf_usm_h%c_surface(m)           = building_pars(ind_c_surface,building_type) 
3703           surf_usm_h%lambda_surf(m)         = building_pars(ind_lambda_surf,building_type) 
3704           surf_usm_h%c_surface_green(m)     = building_pars(ind_c_surface_green,building_type) 
3705           surf_usm_h%lambda_surf_green(m)   = building_pars(ind_lambda_surf_green,building_type) 
3706           surf_usm_h%c_surface_window(m)    = building_pars(ind_c_surface_win,building_type) 
3707           surf_usm_h%lambda_surf_window(m)  = building_pars(ind_lambda_surf_win,building_type) 
3708           
3709           surf_usm_h%green_type_roof(m)     = building_pars(ind_green_type_roof,building_type)
3710
3711        ENDDO
3712
3713        DO  l = 0, 3
3714           DO  m = 1, surf_usm_v(l)%ns
3715
3716              surf_usm_v(l)%surface_types(m) = wall_category         !< default category for root surface
3717!
3718!--           In order to distinguish between ground floor level and
3719!--           above-ground-floor level surfaces, set input indices.
3720              ind_alb_green    = MERGE( ind_alb_green_gfl,    ind_alb_green_agfl,    &
3721                                        surf_usm_v(l)%ground_level(m) )
3722              ind_alb_wall     = MERGE( ind_alb_wall_gfl,     ind_alb_wall_agfl,     &
3723                                        surf_usm_v(l)%ground_level(m) )
3724              ind_alb_win      = MERGE( ind_alb_win_gfl,      ind_alb_win_agfl,      &
3725                                        surf_usm_v(l)%ground_level(m) )
3726              ind_wall_frac    = MERGE( ind_wall_frac_gfl,    ind_wall_frac_agfl,    &
3727                                        surf_usm_v(l)%ground_level(m) )
3728              ind_win_frac     = MERGE( ind_win_frac_gfl,     ind_win_frac_agfl,     &
3729                                        surf_usm_v(l)%ground_level(m) )
3730              ind_green_frac_w = MERGE( ind_green_frac_w_gfl, ind_green_frac_w_agfl, &
3731                                        surf_usm_v(l)%ground_level(m) )
3732              ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl, &
3733                                        surf_usm_v(l)%ground_level(m) )
3734              ind_lai_r        = MERGE( ind_lai_r_gfl,        ind_lai_r_agfl,        &
3735                                        surf_usm_v(l)%ground_level(m) )
3736              ind_lai_w        = MERGE( ind_lai_w_gfl,        ind_lai_w_agfl,        &
3737                                        surf_usm_v(l)%ground_level(m) )
3738              ind_hc1          = MERGE( ind_hc1_gfl,          ind_hc1_agfl,          &
3739                                        surf_usm_v(l)%ground_level(m) )
3740              ind_hc1_win      = MERGE( ind_hc1_win_gfl,      ind_hc1_win_agfl,      &
3741                                        surf_usm_v(l)%ground_level(m) )
3742              ind_hc2          = MERGE( ind_hc2_gfl,          ind_hc2_agfl,          &
3743                                        surf_usm_v(l)%ground_level(m) )
3744              ind_hc2_win      = MERGE( ind_hc2_win_gfl,      ind_hc2_win_agfl,      &
3745                                        surf_usm_v(l)%ground_level(m) )
3746              ind_hc3          = MERGE( ind_hc3_gfl,          ind_hc3_agfl,          &
3747                                        surf_usm_v(l)%ground_level(m) )
3748              ind_hc3_win      = MERGE( ind_hc3_win_gfl,      ind_hc3_win_agfl,      &
3749                                        surf_usm_v(l)%ground_level(m) )
3750              ind_tc1          = MERGE( ind_tc1_gfl,          ind_tc1_agfl,          &
3751                                        surf_usm_v(l)%ground_level(m) )
3752              ind_tc1_win      = MERGE( ind_tc1_win_gfl,      ind_tc1_win_agfl,      &
3753                                        surf_usm_v(l)%ground_level(m) )
3754              ind_tc2          = MERGE( ind_tc2_gfl,          ind_tc2_agfl,          &
3755                                        surf_usm_v(l)%ground_level(m) )
3756              ind_tc2_win      = MERGE( ind_tc2_win_gfl,      ind_tc2_win_agfl,      &
3757                                        surf_usm_v(l)%ground_level(m) )
3758              ind_tc3          = MERGE( ind_tc3_gfl,          ind_tc3_agfl,          &
3759                                        surf_usm_v(l)%ground_level(m) )
3760              ind_tc3_win      = MERGE( ind_tc3_win_gfl,      ind_tc3_win_agfl,      &
3761                                        surf_usm_v(l)%ground_level(m) )
3762              ind_thick_1      = MERGE( ind_thick_1_gfl,      ind_thick_1_agfl,      &
3763                                        surf_usm_v(l)%ground_level(m) )
3764              ind_thick_1_win  = MERGE( ind_thick_1_win_gfl,  ind_thick_1_win_agfl,  &
3765                                        surf_usm_v(l)%ground_level(m) )
3766              ind_thick_2      = MERGE( ind_thick_2_gfl,      ind_thick_2_agfl,      &
3767                                        surf_usm_v(l)%ground_level(m) )
3768              ind_thick_2_win  = MERGE( ind_thick_2_win_gfl,  ind_thick_2_win_agfl,  &
3769                                        surf_usm_v(l)%ground_level(m) )
3770              ind_thick_3      = MERGE( ind_thick_3_gfl,      ind_thick_3_agfl,      &
3771                                        surf_usm_v(l)%ground_level(m) )
3772              ind_thick_3_win  = MERGE( ind_thick_3_win_gfl,  ind_thick_3_win_agfl,  &
3773                                        surf_usm_v(l)%ground_level(m) )
3774              ind_thick_4      = MERGE( ind_thick_4_gfl,      ind_thick_4_agfl,      &
3775                                        surf_usm_v(l)%ground_level(m) )
3776              ind_thick_4_win  = MERGE( ind_thick_4_win_gfl,  ind_thick_4_win_agfl,  &
3777                                        surf_usm_v(l)%ground_level(m) )
3778              ind_emis_wall    = MERGE( ind_emis_wall_gfl,    ind_emis_wall_agfl,    &
3779                                        surf_usm_v(l)%ground_level(m) )
3780              ind_emis_green   = MERGE( ind_emis_green_gfl,   ind_emis_green_agfl,   &
3781                                        surf_usm_v(l)%ground_level(m) )
3782              ind_emis_win     = MERGE( ind_emis_win_gfl,     ind_emis_win_agfl,     &
3783                                        surf_usm_v(l)%ground_level(m) )
3784              ind_trans        = MERGE( ind_trans_gfl,       ind_trans_agfl,         &
3785                                        surf_usm_v(l)%ground_level(m) )
3786              ind_z0           = MERGE( ind_z0_gfl,           ind_z0_agfl,           &
3787                                        surf_usm_v(l)%ground_level(m) )
3788              ind_z0qh         = MERGE( ind_z0qh_gfl,         ind_z0qh_agfl,         &
3789                                        surf_usm_v(l)%ground_level(m) )
3790!
3791!--           Store building type and its name on each surface element
3792              surf_usm_v(l)%building_type(m)      = building_type
3793              surf_usm_v(l)%building_type_name(m) = building_type_name(building_type)
3794!
3795!--           Initialize relatvie wall- (0), green- (1) and window (2) fractions
3796              surf_usm_v(l)%frac(ind_veg_wall,m)   = building_pars(ind_wall_frac,building_type)   
3797              surf_usm_v(l)%frac(ind_pav_green,m)  = building_pars(ind_green_frac_w,building_type) 
3798              surf_usm_v(l)%frac(ind_wat_win,m)    = building_pars(ind_win_frac,building_type) 
3799              surf_usm_v(l)%lai(m)                 = building_pars(ind_lai_w,building_type) 
3800
3801              surf_usm_v(l)%rho_c_wall(nzb_wall,m)   = building_pars(ind_hc1,building_type) 
3802              surf_usm_v(l)%rho_c_wall(nzb_wall+1,m) = building_pars(ind_hc1,building_type)
3803              surf_usm_v(l)%rho_c_wall(nzb_wall+2,m) = building_pars(ind_hc2,building_type)
3804              surf_usm_v(l)%rho_c_wall(nzb_wall+3,m) = building_pars(ind_hc3,building_type)   
3805             
3806              surf_usm_v(l)%rho_c_green(nzb_wall,m)   = rho_c_soil !building_pars(ind_hc1,building_type) 
3807              surf_usm_v(l)%rho_c_green(nzb_wall+1,m) = rho_c_soil !building_pars(ind_hc1,building_type)
3808              surf_usm_v(l)%rho_c_green(nzb_wall+2,m) = rho_c_soil !building_pars(ind_hc2,building_type)
3809              surf_usm_v(l)%rho_c_green(nzb_wall+3,m) = rho_c_soil !building_pars(ind_hc3,building_type)   
3810             
3811              surf_usm_v(l)%rho_c_window(nzb_wall,m)   = building_pars(ind_hc1_win,building_type) 
3812              surf_usm_v(l)%rho_c_window(nzb_wall+1,m) = building_pars(ind_hc1_win,building_type)
3813              surf_usm_v(l)%rho_c_window(nzb_wall+2,m) = building_pars(ind_hc2_win,building_type)
3814              surf_usm_v(l)%rho_c_window(nzb_wall+3,m) = building_pars(ind_hc3_win,building_type)   
3815
3816              surf_usm_v(l)%lambda_h(nzb_wall,m)   = building_pars(ind_tc1,building_type) 
3817              surf_usm_v(l)%lambda_h(nzb_wall+1,m) = building_pars(ind_tc1,building_type) 
3818              surf_usm_v(l)%lambda_h(nzb_wall+2,m) = building_pars(ind_tc2,building_type)
3819              surf_usm_v(l)%lambda_h(nzb_wall+3,m) = building_pars(ind_tc3,building_type)   
3820             
3821              surf_usm_v(l)%lambda_h_green(nzb_wall,m)   = lambda_h_green_sm !building_pars(ind_tc1,building_type) 
3822              surf_usm_v(l)%lambda_h_green(nzb_wall+1,m) = lambda_h_green_sm !building_pars(ind_tc1,building_type)
3823              surf_usm_v(l)%lambda_h_green(nzb_wall+2,m) = lambda_h_green_sm !building_pars(ind_tc2,building_type)
3824              surf_usm_v(l)%lambda_h_green(nzb_wall+3,m) = lambda_h_green_sm !building_pars(ind_tc3,building_type)   
3825
3826              surf_usm_v(l)%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win,building_type) 
3827              surf_usm_v(l)%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win,building_type) 
3828              surf_usm_v(l)%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win,building_type)
3829              surf_usm_v(l)%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win,building_type)   
3830
3831              surf_usm_v(l)%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,building_type)   
3832              surf_usm_v(l)%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,building_type)   
3833!
3834!--           emissivity of wall-, green- and window fraction
3835              surf_usm_v(l)%emissivity(ind_veg_wall,m)  = building_pars(ind_emis_wall,building_type)
3836              surf_usm_v(l)%emissivity(ind_pav_green,m) = building_pars(ind_emis_green,building_type)
3837              surf_usm_v(l)%emissivity(ind_wat_win,m)   = building_pars(ind_emis_win,building_type)
3838
3839              surf_usm_v(l)%transmissivity(m)      = building_pars(ind_trans,building_type)
3840
3841              surf_usm_v(l)%z0(m)                  = building_pars(ind_z0,building_type)
3842              surf_usm_v(l)%z0h(m)                 = building_pars(ind_z0qh,building_type)
3843              surf_usm_v(l)%z0q(m)                 = building_pars(ind_z0qh,building_type)
3844
3845              surf_usm_v(l)%albedo_type(ind_veg_wall,m)  = INT( building_pars(ind_alb_wall,building_type) )
3846              surf_usm_v(l)%albedo_type(ind_pav_green,m) = INT( building_pars(ind_alb_green,building_type) )
3847              surf_usm_v(l)%albedo_type(ind_wat_win,m)   = INT( building_pars(ind_alb_win,building_type) )
3848
3849              surf_usm_v(l)%zw(nzb_wall,m)         = building_pars(ind_thick_1,building_type)
3850              surf_usm_v(l)%zw(nzb_wall+1,m)       = building_pars(ind_thick_2,building_type)
3851              surf_usm_v(l)%zw(nzb_wall+2,m)       = building_pars(ind_thick_3,building_type)
3852              surf_usm_v(l)%zw(nzb_wall+3,m)       = building_pars(ind_thick_4,building_type)
3853             
3854              surf_usm_v(l)%zw_green(nzb_wall,m)         = building_pars(ind_thick_1,building_type)
3855              surf_usm_v(l)%zw_green(nzb_wall+1,m)       = building_pars(ind_thick_2,building_type)
3856              surf_usm_v(l)%zw_green(nzb_wall+2,m)       = building_pars(ind_thick_3,building_type)
3857              surf_usm_v(l)%zw_green(nzb_wall+3,m)       = building_pars(ind_thick_4,building_type)
3858
3859              surf_usm_v(l)%zw_window(nzb_wall,m)         = building_pars(ind_thick_1_win,building_type)
3860              surf_usm_v(l)%zw_window(nzb_wall+1,m)       = building_pars(ind_thick_2_win,building_type)
3861              surf_usm_v(l)%zw_window(nzb_wall+2,m)       = building_pars(ind_thick_3_win,building_type)
3862              surf_usm_v(l)%zw_window(nzb_wall+3,m)       = building_pars(ind_thick_4_win,building_type)
3863
3864              surf_usm_v(l)%c_surface(m)           = building_pars(ind_c_surface,building_type) 
3865              surf_usm_v(l)%lambda_surf(m)         = building_pars(ind_lambda_surf,building_type)
3866              surf_usm_v(l)%c_surface_green(m)     = building_pars(ind_c_surface_green,building_type) 
3867              surf_usm_v(l)%lambda_surf_green(m)   = building_pars(ind_lambda_surf_green,building_type)
3868              surf_usm_v(l)%c_surface_window(m)    = building_pars(ind_c_surface_win,building_type) 
3869              surf_usm_v(l)%lambda_surf_window(m)  = building_pars(ind_lambda_surf_win,building_type)
3870
3871           ENDDO
3872        ENDDO
3873!
3874!--     Level 2 - initialization via building type read from file
3875        IF ( building_type_f%from_file )  THEN
3876           DO  m = 1, surf_usm_h%ns
3877              i = surf_usm_h%i(m)
3878              j = surf_usm_h%j(m)
3879!
3880!--           For the moment, limit building type to 6 (to overcome errors in input file).
3881              st = building_type_f%var(j,i)
3882              IF ( st /= building_type_f%fill )  THEN
3883
3884!
3885!--              In order to distinguish between ground floor level and
3886!--              above-ground-floor level surfaces, set input indices.
3887
3888                 ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl, &
3889                                           surf_usm_h%ground_level(m) )
3890                 ind_lai_r        = MERGE( ind_lai_r_gfl,        ind_lai_r_agfl,        &
3891                                           surf_usm_h%ground_level(m) )
3892                 ind_z0           = MERGE( ind_z0_gfl,           ind_z0_agfl,           &
3893                                           surf_usm_h%ground_level(m) )
3894                 ind_z0qh         = MERGE( ind_z0qh_gfl,         ind_z0qh_agfl,         &
3895                                           surf_usm_h%ground_level(m) )
3896!
3897!--              Store building type and its name on each surface element
3898                 surf_usm_h%building_type(m)      = st
3899                 surf_usm_h%building_type_name(m) = building_type_name(st)
3900!
3901!--              Initialize relatvie wall- (0), green- (1) and window (2) fractions
3902                 surf_usm_h%frac(ind_veg_wall,m)  = building_pars(ind_wall_frac_r,st)   
3903                 surf_usm_h%frac(ind_pav_green,m) = building_pars(ind_green_frac_r,st) 
3904                 surf_usm_h%frac(ind_wat_win,m)   = building_pars(ind_win_frac_r,st) 
3905                 surf_usm_h%lai(m)                = building_pars(ind_lai_r,st) 
3906
3907                 surf_usm_h%rho_c_wall(nzb_wall,m)   = building_pars(ind_hc1_wall_r,st) 
3908                 surf_usm_h%rho_c_wall(nzb_wall+1,m) = building_pars(ind_hc1_wall_r,st)
3909                 surf_usm_h%rho_c_wall(nzb_wall+2,m) = building_pars(ind_hc2_wall_r,st)
3910                 surf_usm_h%rho_c_wall(nzb_wall+3,m) = building_pars(ind_hc3_wall_r,st)   
3911                 surf_usm_h%lambda_h(nzb_wall,m)   = building_pars(ind_tc1_wall_r,st) 
3912                 surf_usm_h%lambda_h(nzb_wall+1,m) = building_pars(ind_tc1_wall_r,st) 
3913                 surf_usm_h%lambda_h(nzb_wall+2,m) = building_pars(ind_tc2_wall_r,st)
3914                 surf_usm_h%lambda_h(nzb_wall+3,m) = building_pars(ind_tc3_wall_r,st)   
3915                 
3916                 surf_usm_h%rho_c_green(nzb_wall,m)   = rho_c_soil !building_pars(ind_hc1_wall_r,st) 
3917                 surf_usm_h%rho_c_green(nzb_wall+1,m) = rho_c_soil !building_pars(ind_hc1_wall_r,st)
3918                 surf_usm_h%rho_c_green(nzb_wall+2,m) = rho_c_soil !building_pars(ind_hc2_wall_r,st)
3919                 surf_usm_h%rho_c_green(nzb_wall+3,m) = rho_c_soil !building_pars(ind_hc3_wall_r,st)   
3920                 surf_usm_h%lambda_h_green(nzb_wall,m)   = lambda_h_green_sm !building_pars(ind_tc1_wall_r,st) 
3921                 surf_usm_h%lambda_h_green(nzb_wall+1,m) = lambda_h_green_sm !building_pars(ind_tc1_wall_r,st)
3922                 surf_usm_h%lambda_h_green(nzb_wall+2,m) = lambda_h_green_sm !building_pars(ind_tc2_wall_r,st)
3923                 surf_usm_h%lambda_h_green(nzb_wall+3,m) = lambda_h_green_sm !building_pars(ind_tc3_wall_r,st)   
3924               
3925                 surf_usm_h%rho_c_window(nzb_wall,m)   = building_pars(ind_hc1_win_r,st) 
3926                 surf_usm_h%rho_c_window(nzb_wall+1,m) = building_pars(ind_hc1_win_r,st)
3927                 surf_usm_h%rho_c_window(nzb_wall+2,m) = building_pars(ind_hc2_win_r,st)
3928                 surf_usm_h%rho_c_window(nzb_wall+3,m) = building_pars(ind_hc3_win_r,st)   
3929                 surf_usm_h%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win_r,st) 
3930                 surf_usm_h%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win_r,st) 
3931                 surf_usm_h%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win_r,st)
3932                 surf_usm_h%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win_r,st)   
3933
3934                 surf_usm_h%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,st)   
3935                 surf_usm_h%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,st)   
3936!
3937!--              emissivity of wall-, green- and window fraction
3938                 surf_usm_h%emissivity(ind_veg_wall,m)  = building_pars(ind_emis_wall_r,st)
3939                 surf_usm_h%emissivity(ind_pav_green,m) = building_pars(ind_emis_green_r,st)
3940                 surf_usm_h%emissivity(ind_wat_win,m)   = building_pars(ind_emis_win_r,st)
3941
3942                 surf_usm_h%transmissivity(m)      = building_pars(ind_trans_r,st)
3943
3944                 surf_usm_h%z0(m)                  = building_pars(ind_z0,st)
3945                 surf_usm_h%z0h(m)                 = building_pars(ind_z0qh,st)
3946                 surf_usm_h%z0q(m)                 = building_pars(ind_z0qh,st)
3947!
3948!--              albedo type for wall fraction, green fraction, window fraction
3949                 surf_usm_h%albedo_type(ind_veg_wall,m)  = INT( building_pars(ind_alb_wall_r,st) )
3950                 surf_usm_h%albedo_type(ind_pav_green,m) = INT( building_pars(ind_alb_green_r,st) )
3951                 surf_usm_h%albedo_type(ind_wat_win,m)   = INT( building_pars(ind_alb_win_r,st) )
3952
3953                 surf_usm_h%zw(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,st)
3954                 surf_usm_h%zw(nzb_wall+1,m)       = building_pars(ind_thick_2_wall_r,st)
3955                 surf_usm_h%zw(nzb_wall+2,m)       = building_pars(ind_thick_3_wall_r,st)
3956                 surf_usm_h%zw(nzb_wall+3,m)       = building_pars(ind_thick_4_wall_r,st)
3957                 
3958                 surf_usm_h%zw_green(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,st)
3959                 surf_usm_h%zw_green(nzb_wall+1,m)       = building_pars(ind_thick_2_wall_r,st)
3960                 surf_usm_h%zw_green(nzb_wall+2,m)       = building_pars(ind_thick_3_wall_r,st)
3961                 surf_usm_h%zw_green(nzb_wall+3,m)       = building_pars(ind_thick_4_wall_r,st)
3962
3963                 surf_usm_h%zw_window(nzb_wall,m)         = building_pars(ind_thick_1_win_r,st)
3964                 surf_usm_h%zw_window(nzb_wall+1,m)       = building_pars(ind_thick_2_win_r,st)
3965                 surf_usm_h%zw_window(nzb_wall+2,m)       = building_pars(ind_thick_3_win_r,st)
3966                 surf_usm_h%zw_window(nzb_wall+3,m)       = building_pars(ind_thick_4_win_r,st)
3967
3968                 surf_usm_h%c_surface(m)           = building_pars(ind_c_surface,st) 
3969                 surf_usm_h%lambda_surf(m)         = building_pars(ind_lambda_surf,st)
3970                 surf_usm_h%c_surface_green(m)     = building_pars(ind_c_surface_green,st) 
3971                 surf_usm_h%lambda_surf_green(m)   = building_pars(ind_lambda_surf_green,st)
3972                 surf_usm_h%c_surface_window(m)    = building_pars(ind_c_surface_win,st) 
3973                 surf_usm_h%lambda_surf_window(m)  = building_pars(ind_lambda_surf_win,st)
3974                 
3975                 surf_usm_h%green_type_roof(m)     = building_pars(ind_green_type_roof,st)
3976
3977              ENDIF
3978           ENDDO
3979
3980           DO  l = 0, 3
3981              DO  m = 1, surf_usm_v(l)%ns
3982                 i = surf_usm_v(l)%i(m) + surf_usm_v(l)%ioff
3983                 j = surf_usm_v(l)%j(m) + surf_usm_v(l)%joff
3984!
3985!--              For the moment, limit building type to 6 (to overcome errors in input file).
3986
3987                 st = building_type_f%var(j,i)
3988                 IF ( st /= building_type_f%fill )  THEN
3989
3990!
3991!--                 In order to distinguish between ground floor level and
3992!--                 above-ground-floor level surfaces, set input indices.
3993                    ind_alb_green    = MERGE( ind_alb_green_gfl,    ind_alb_green_agfl,    &
3994                                              surf_usm_v(l)%ground_level(m) )
3995                    ind_alb_wall     = MERGE( ind_alb_wall_gfl,     ind_alb_wall_agfl,     &
3996                                              surf_usm_v(l)%ground_level(m) )
3997                    ind_alb_win      = MERGE( ind_alb_win_gfl,      ind_alb_win_agfl,      &
3998                                              surf_usm_v(l)%ground_level(m) )
3999                    ind_wall_frac    = MERGE( ind_wall_frac_gfl,    ind_wall_frac_agfl,    &
4000                                              surf_usm_v(l)%ground_level(m) )
4001                    ind_win_frac     = MERGE( ind_win_frac_gfl,     ind_win_frac_agfl,     &
4002                                              surf_usm_v(l)%ground_level(m) )
4003                    ind_green_frac_w = MERGE( ind_green_frac_w_gfl, ind_green_frac_w_agfl, &
4004                                              surf_usm_v(l)%ground_level(m) )
4005                    ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl, &
4006                                              surf_usm_v(l)%ground_level(m) )
4007                    ind_lai_r        = MERGE( ind_lai_r_gfl,        ind_lai_r_agfl,        &
4008                                              surf_usm_v(l)%ground_level(m) )
4009                    ind_lai_w        = MERGE( ind_lai_w_gfl,        ind_lai_w_agfl,        &
4010                                              surf_usm_v(l)%ground_level(m) )
4011                    ind_hc1          = MERGE( ind_hc1_gfl,          ind_hc1_agfl,          &
4012                                              surf_usm_v(l)%ground_level(m) )
4013                    ind_hc1_win      = MERGE( ind_hc1_win_gfl,      ind_hc1_win_agfl,      &
4014                                              surf_usm_v(l)%ground_level(m) )
4015                    ind_hc2          = MERGE( ind_hc2_gfl,          ind_hc2_agfl,          &
4016                                              surf_usm_v(l)%ground_level(m) )
4017                    ind_hc2_win      = MERGE( ind_hc2_win_gfl,      ind_hc2_win_agfl,      &
4018                                              surf_usm_v(l)%ground_level(m) )
4019                    ind_hc3          = MERGE( ind_hc3_gfl,          ind_hc3_agfl,          &
4020                                              surf_usm_v(l)%ground_level(m) )
4021                    ind_hc3_win      = MERGE( ind_hc3_win_gfl,      ind_hc3_win_agfl,      &
4022                                              surf_usm_v(l)%ground_level(m) )
4023                    ind_tc1          = MERGE( ind_tc1_gfl,          ind_tc1_agfl,          &
4024                                              surf_usm_v(l)%ground_level(m) )
4025                    ind_tc1_win      = MERGE( ind_tc1_win_gfl,      ind_tc1_win_agfl,      &
4026                                              surf_usm_v(l)%ground_level(m) )
4027                    ind_tc2          = MERGE( ind_tc2_gfl,          ind_tc2_agfl,          &
4028                                              surf_usm_v(l)%ground_level(m) )
4029                    ind_tc2_win      = MERGE( ind_tc2_win_gfl,      ind_tc2_win_agfl,      &
4030                                              surf_usm_v(l)%ground_level(m) )
4031                    ind_tc3          = MERGE( ind_tc3_gfl,          ind_tc3_agfl,          &
4032                                              surf_usm_v(l)%ground_level(m) )
4033                    ind_tc3_win      = MERGE( ind_tc3_win_gfl,      ind_tc3_win_agfl,      &
4034                                              surf_usm_v(l)%ground_level(m) )
4035                    ind_thick_1      = MERGE( ind_thick_1_gfl,      ind_thick_1_agfl,      &
4036                                              surf_usm_v(l)%ground_level(m) )
4037                    ind_thick_1_win  = MERGE( ind_thick_1_win_gfl,  ind_thick_1_win_agfl,  &
4038                                              surf_usm_v(l)%ground_level(m) )
4039                    ind_thick_2      = MERGE( ind_thick_2_gfl,      ind_thick_2_agfl,      &
4040                                              surf_usm_v(l)%ground_level(m) )
4041                    ind_thick_2_win  = MERGE( ind_thick_2_win_gfl,  ind_thick_2_win_agfl,  &
4042                                              surf_usm_v(l)%ground_level(m) )
4043                    ind_thick_3      = MERGE( ind_thick_3_gfl,      ind_thick_3_agfl,      &
4044                                              surf_usm_v(l)%ground_level(m) )
4045                    ind_thick_3_win  = MERGE( ind_thick_3_win_gfl,  ind_thick_3_win_agfl,  &
4046                                              surf_usm_v(l)%ground_level(m) )
4047                    ind_thick_4      = MERGE( ind_thick_4_gfl,      ind_thick_4_agfl,      &
4048                                              surf_usm_v(l)%ground_level(m) )
4049                    ind_thick_4_win  = MERGE( ind_thick_4_win_gfl,  ind_thick_4_win_agfl,  &
4050                                              surf_usm_v(l)%ground_level(m) )
4051                    ind_emis_wall    = MERGE( ind_emis_wall_gfl,    ind_emis_wall_agfl,    &
4052                                              surf_usm_v(l)%ground_level(m) )
4053                    ind_emis_green   = MERGE( ind_emis_green_gfl,   ind_emis_green_agfl,   &
4054                                              surf_usm_v(l)%ground_level(m) )
4055                    ind_emis_win     = MERGE( ind_emis_win_gfl,     ind_emis_win_agfl,     &
4056                                              surf_usm_v(l)%ground_level(m) )
4057                    ind_trans        = MERGE( ind_trans_gfl,       ind_trans_agfl,         &
4058                                            surf_usm_v(l)%ground_level(m) )
4059                    ind_z0           = MERGE( ind_z0_gfl,           ind_z0_agfl,           &
4060                                              surf_usm_v(l)%ground_level(m) )
4061                    ind_z0qh         = MERGE( ind_z0qh_gfl,         ind_z0qh_agfl,         &
4062                                              surf_usm_v(l)%ground_level(m) )
4063!
4064!--                 Store building type and its name on each surface element
4065                    surf_usm_v(l)%building_type(m)      = st
4066                    surf_usm_v(l)%building_type_name(m) = building_type_name(st)
4067!
4068!--                 Initialize relatvie wall- (0), green- (1) and window (2) fractions
4069                    surf_usm_v(l)%frac(ind_veg_wall,m)  = building_pars(ind_wall_frac,st)   
4070                    surf_usm_v(l)%frac(ind_pav_green,m) = building_pars(ind_green_frac_w,st) 
4071                    surf_usm_v(l)%frac(ind_wat_win,m)   = building_pars(ind_win_frac,st)   
4072                    surf_usm_v(l)%lai(m)                = building_pars(ind_lai_w,st) 
4073
4074                    surf_usm_v(l)%rho_c_wall(nzb_wall,m)   = building_pars(ind_hc1,st) 
4075                    surf_usm_v(l)%rho_c_wall(nzb_wall+1,m) = building_pars(ind_hc1,st)
4076                    surf_usm_v(l)%rho_c_wall(nzb_wall+2,m) = building_pars(ind_hc2,st)
4077                    surf_usm_v(l)%rho_c_wall(nzb_wall+3,m) = building_pars(ind_hc3,st)
4078                   
4079                    surf_usm_v(l)%rho_c_green(nzb_wall,m)   = rho_c_soil !building_pars(ind_hc1,st) 
4080                    surf_usm_v(l)%rho_c_green(nzb_wall+1,m) = rho_c_soil !building_pars(ind_hc1,st)
4081                    surf_usm_v(l)%rho_c_green(nzb_wall+2,m) = rho_c_soil !building_pars(ind_hc2,st)
4082                    surf_usm_v(l)%rho_c_green(nzb_wall+3,m) = rho_c_soil !building_pars(ind_hc3,st)
4083                   
4084                    surf_usm_v(l)%rho_c_window(nzb_wall,m)   = building_pars(ind_hc1_win,st) 
4085                    surf_usm_v(l)%rho_c_window(nzb_wall+1,m) = building_pars(ind_hc1_win,st)
4086                    surf_usm_v(l)%rho_c_window(nzb_wall+2,m) = building_pars(ind_hc2_win,st)
4087                    surf_usm_v(l)%rho_c_window(nzb_wall+3,m) = building_pars(ind_hc3_win,st)
4088
4089                    surf_usm_v(l)%lambda_h(nzb_wall,m)   = building_pars(ind_tc1,st) 
4090                    surf_usm_v(l)%lambda_h(nzb_wall+1,m) = building_pars(ind_tc1,st) 
4091                    surf_usm_v(l)%lambda_h(nzb_wall+2,m) = building_pars(ind_tc2,st)
4092                    surf_usm_v(l)%lambda_h(nzb_wall+3,m) = building_pars(ind_tc3,st) 
4093                   
4094                    surf_usm_v(l)%lambda_h_green(nzb_wall,m)   = lambda_h_green_sm !building_pars(ind_tc1,st) 
4095                    surf_usm_v(l)%lambda_h_green(nzb_wall+1,m) = lambda_h_green_sm !building_pars(ind_tc1,st)
4096                    surf_usm_v(l)%lambda_h_green(nzb_wall+2,m) = lambda_h_green_sm !building_pars(ind_tc2,st)
4097                    surf_usm_v(l)%lambda_h_green(nzb_wall+3,m) = lambda_h_green_sm !building_pars(ind_tc3,st)
4098                   
4099                    surf_usm_v(l)%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win,st) 
4100                    surf_usm_v(l)%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win,st) 
4101                    surf_usm_v(l)%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win,st)
4102                    surf_usm_v(l)%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win,st) 
4103
4104                    surf_usm_v(l)%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,st)   
4105                    surf_usm_v(l)%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,st)   
4106!
4107!--                 emissivity of wall-, green- and window fraction
4108                    surf_usm_v(l)%emissivity(ind_veg_wall,m)  = building_pars(ind_emis_wall,st)
4109                    surf_usm_v(l)%emissivity(ind_pav_green,m) = building_pars(ind_emis_green,st)
4110                    surf_usm_v(l)%emissivity(ind_wat_win,m)   = building_pars(ind_emis_win,st)
4111
4112                    surf_usm_v(l)%transmissivity(m)      = building_pars(ind_trans,st)
4113
4114                    surf_usm_v(l)%z0(m)                  = building_pars(ind_z0,st)
4115                    surf_usm_v(l)%z0h(m)                 = building_pars(ind_z0qh,st)
4116                    surf_usm_v(l)%z0q(m)                 = building_pars(ind_z0qh,st)
4117
4118                    surf_usm_v(l)%albedo_type(ind_veg_wall,m)  = INT( building_pars(ind_alb_wall,st) )
4119                    surf_usm_v(l)%albedo_type(ind_pav_green,m) = INT( building_pars(ind_alb_green,st) )
4120                    surf_usm_v(l)%albedo_type(ind_wat_win,m)   = INT( building_pars(ind_alb_win,st) )
4121
4122                    surf_usm_v(l)%zw(nzb_wall,m)         = building_pars(ind_thick_1,st)
4123                    surf_usm_v(l)%zw(nzb_wall+1,m)       = building_pars(ind_thick_2,st)
4124                    surf_usm_v(l)%zw(nzb_wall+2,m)       = building_pars(ind_thick_3,st)
4125                    surf_usm_v(l)%zw(nzb_wall+3,m)       = building_pars(ind_thick_4,st)
4126                   
4127                    surf_usm_v(l)%zw_green(nzb_wall,m)         = building_pars(ind_thick_1,st)
4128                    surf_usm_v(l)%zw_green(nzb_wall+1,m)       = building_pars(ind_thick_2,st)
4129                    surf_usm_v(l)%zw_green(nzb_wall+2,m)       = building_pars(ind_thick_3,st)
4130                    surf_usm_v(l)%zw_green(nzb_wall+3,m)       = building_pars(ind_thick_4,st)
4131                   
4132                    surf_usm_v(l)%zw_window(nzb_wall,m)         = building_pars(ind_thick_1_win,st)
4133                    surf_usm_v(l)%zw_window(nzb_wall+1,m)       = building_pars(ind_thick_2_win,st)
4134                    surf_usm_v(l)%zw_window(nzb_wall+2,m)       = building_pars(ind_thick_3_win,st)
4135                    surf_usm_v(l)%zw_window(nzb_wall+3,m)       = building_pars(ind_thick_4_win,st)
4136
4137                    surf_usm_v(l)%c_surface(m)           = building_pars(ind_c_surface,st) 
4138                    surf_usm_v(l)%lambda_surf(m)         = building_pars(ind_lambda_surf,st) 
4139                    surf_usm_v(l)%c_surface_green(m)     = building_pars(ind_c_surface_green,st) 
4140                    surf_usm_v(l)%lambda_surf_green(m)   = building_pars(ind_lambda_surf_green,st) 
4141                    surf_usm_v(l)%c_surface_window(m)    = building_pars(ind_c_surface_win,st) 
4142                    surf_usm_v(l)%lambda_surf_window(m)  = building_pars(ind_lambda_surf_win,st) 
4143
4144
4145                 ENDIF
4146              ENDDO
4147           ENDDO
4148        ENDIF 
4149       
4150!
4151!--     Level 3 - initialization via building_pars read from file. Note, only
4152!--     variables that are also defined in the input-standard can be initialized
4153!--     via file. Other variables will be initialized on level 1 or 2.
4154        IF ( building_pars_f%from_file )  THEN
4155           DO  m = 1, surf_usm_h%ns
4156              i = surf_usm_h%i(m)
4157              j = surf_usm_h%j(m)
4158
4159!
4160!--           In order to distinguish between ground floor level and
4161!--           above-ground-floor level surfaces, set input indices.
4162              ind_wall_frac    = MERGE( ind_wall_frac_gfl,                     &
4163                                        ind_wall_frac_agfl,                    &
4164                                        surf_usm_h%ground_level(m) )
4165              ind_green_frac_r = MERGE( ind_green_frac_r_gfl,                  &
4166                                        ind_green_frac_r_agfl,                 &
4167                                        surf_usm_h%ground_level(m) )
4168              ind_win_frac     = MERGE( ind_win_frac_gfl,                      &
4169                                        ind_win_frac_agfl,                     &
4170                                        surf_usm_h%ground_level(m) )
4171              ind_lai_r        = MERGE( ind_lai_r_gfl,                         &
4172                                        ind_lai_r_agfl,                        &
4173                                        surf_usm_h%ground_level(m) )
4174              ind_z0           = MERGE( ind_z0_gfl,                            &
4175                                        ind_z0_agfl,                           &
4176                                        surf_usm_h%ground_level(m) )
4177              ind_z0qh         = MERGE( ind_z0qh_gfl,                          &
4178                                        ind_z0qh_agfl,                         &
4179                                        surf_usm_h%ground_level(m) )
4180              ind_hc1          = MERGE( ind_hc1_gfl,                           &
4181                                        ind_hc1_agfl,                          &
4182                                        surf_usm_h%ground_level(m) )
4183              ind_hc2          = MERGE( ind_hc2_gfl,                           &
4184                                        ind_hc2_agfl,                          &
4185                                        surf_usm_h%ground_level(m) )
4186              ind_hc3          = MERGE( ind_hc3_gfl,                           &
4187                                        ind_hc3_agfl,                          &
4188                                        surf_usm_h%ground_level(m) )
4189              ind_tc1          = MERGE( ind_tc1_gfl,                           &
4190                                        ind_tc1_agfl,                          &
4191                                        surf_usm_h%ground_level(m) )
4192              ind_tc2          = MERGE( ind_tc2_gfl,                           &
4193                                        ind_tc2_agfl,                          &
4194                                        surf_usm_h%ground_level(m) )
4195              ind_tc3          = MERGE( ind_tc3_gfl,                           &
4196                                        ind_tc3_agfl,                          &
4197                                        surf_usm_h%ground_level(m) )
4198              ind_emis_wall    = MERGE( ind_emis_wall_gfl,                     &
4199                                        ind_emis_wall_agfl,                    &
4200                                        surf_usm_h%ground_level(m) )
4201              ind_emis_green   = MERGE( ind_emis_green_gfl,                    &
4202                                        ind_emis_green_agfl,                   &
4203                                        surf_usm_h%ground_level(m) )
4204              ind_emis_win     = MERGE( ind_emis_win_gfl,                      &
4205                                        ind_emis_win_agfl,                     &
4206                                        surf_usm_h%ground_level(m) )
4207              ind_trans        = MERGE( ind_trans_gfl,                         &
4208                                        ind_trans_agfl,                        &
4209                                        surf_usm_h%ground_level(m) )
4210
4211!
4212!--           Initialize relatvie wall- (0), green- (1) and window (2) fractions
4213              IF ( building_pars_f%pars_xy(ind_wall_frac,j,i) /=               &
4214                   building_pars_f%fill )                                      &
4215                 surf_usm_h%frac(ind_veg_wall,m)  =                            &
4216                                    building_pars_f%pars_xy(ind_wall_frac,j,i)   
4217                 
4218              IF ( building_pars_f%pars_xy(ind_green_frac_r,j,i) /=            &         
4219                   building_pars_f%fill )                                      & 
4220                 surf_usm_h%frac(ind_pav_green,m) =                            &
4221                                    building_pars_f%pars_xy(ind_green_frac_r,j,i) 
4222                 
4223              IF ( building_pars_f%pars_xy(ind_win_frac,j,i) /=                &
4224                   building_pars_f%fill )                                      & 
4225                 surf_usm_h%frac(ind_wat_win,m)   =                            &
4226                                    building_pars_f%pars_xy(ind_win_frac,j,i)
4227 
4228              IF ( building_pars_f%pars_xy(ind_lai_r,j,i) /=                   &
4229                   building_pars_f%fill )                                      &
4230                 surf_usm_h%lai(m)  = building_pars_f%pars_xy(ind_lai_r,j,i)
4231
4232              IF ( building_pars_f%pars_xy(ind_hc1,j,i) /=                     &
4233                   building_pars_f%fill )  THEN
4234                 surf_usm_h%rho_c_wall(nzb_wall,m)   =                         &
4235                                    building_pars_f%pars_xy(ind_hc1,j,i) 
4236                 surf_usm_h%rho_c_wall(nzb_wall+1,m) =                         &
4237                                    building_pars_f%pars_xy(ind_hc1,j,i)
4238              ENDIF
4239             
4240             
4241              IF ( building_pars_f%pars_xy(ind_hc2,j,i) /=                     &
4242                   building_pars_f%fill )                                      &
4243                 surf_usm_h%rho_c_wall(nzb_wall+2,m) =                         &
4244                                    building_pars_f%pars_xy(ind_hc2,j,i)
4245                 
4246              IF ( building_pars_f%pars_xy(ind_hc3,j,i) /=                     &
4247                   building_pars_f%fill )                                      &
4248                 surf_usm_h%rho_c_wall(nzb_wall+3,m) =                         &
4249                                    building_pars_f%pars_xy(ind_hc3,j,i)
4250                 
4251              IF ( building_pars_f%pars_xy(ind_hc1,j,i) /=                     &
4252                   building_pars_f%fill )  THEN
4253                 surf_usm_h%rho_c_green(nzb_wall,m)   =                        &
4254                                    building_pars_f%pars_xy(ind_hc1,j,i) 
4255                 surf_usm_h%rho_c_green(nzb_wall+1,m) =                        &
4256                                    building_pars_f%pars_xy(ind_hc1,j,i)
4257              ENDIF
4258              IF ( building_pars_f%pars_xy(ind_hc2,j,i) /=                     &
4259                   building_pars_f%fill )                                      &
4260                 surf_usm_h%rho_c_green(nzb_wall+2,m) =                        &
4261                                    building_pars_f%pars_xy(ind_hc2,j,i)
4262                 
4263              IF ( building_pars_f%pars_xy(ind_hc3,j,i) /=                     &
4264                   building_pars_f%fill )                                      &
4265                 surf_usm_h%rho_c_green(nzb_wall+3,m) =                        &
4266                                    building_pars_f%pars_xy(ind_hc3,j,i)
4267                 
4268              IF ( building_pars_f%pars_xy(ind_hc1,j,i) /=                     &
4269                   building_pars_f%fill )  THEN
4270                 surf_usm_h%rho_c_window(nzb_wall,m)   =                       &
4271                                    building_pars_f%pars_xy(ind_hc1,j,i) 
4272                 surf_usm_h%rho_c_window(nzb_wall+1,m) =                       &
4273                                    building_pars_f%pars_xy(ind_hc1,j,i)
4274              ENDIF
4275              IF ( building_pars_f%pars_xy(ind_hc2,j,i) /=                     &
4276                   building_pars_f%fill )                                      &
4277                 surf_usm_h%rho_c_window(nzb_wall+2,m) =                       &
4278                                    building_pars_f%pars_xy(ind_hc2,j,i)
4279                 
4280              IF ( building_pars_f%pars_xy(ind_hc3,j,i) /=                     &
4281                   building_pars_f%fill )                                      &
4282                 surf_usm_h%rho_c_window(nzb_wall+3,m) =                       &
4283                                    building_pars_f%pars_xy(ind_hc3,j,i)
4284
4285              IF ( building_pars_f%pars_xy(ind_tc1,j,i) /=                     &
4286                   building_pars_f%fill )  THEN
4287                 surf_usm_h%lambda_h(nzb_wall,m)   =                           &
4288                                    building_pars_f%pars_xy(ind_tc1,j,i)         
4289                 surf_usm_h%lambda_h(nzb_wall+1,m) =                           &
4290                                    building_pars_f%pars_xy(ind_tc1,j,i)       
4291              ENDIF
4292              IF ( building_pars_f%pars_xy(ind_tc2,j,i) /=                     & 
4293                   building_pars_f%fill )                                      &
4294                 surf_usm_h%lambda_h(nzb_wall+2,m) =                           &
4295                                    building_pars_f%pars_xy(ind_tc2,j,i)
4296                 
4297              IF ( building_pars_f%pars_xy(ind_tc3,j,i) /=                     &
4298                   building_pars_f%fill )                                      & 
4299                 surf_usm_h%lambda_h(nzb_wall+3,m) =                           &
4300                                    building_pars_f%pars_xy(ind_tc3,j,i)   
4301                 
4302              IF ( building_pars_f%pars_xy(ind_tc1,j,i) /=                     &
4303                   building_pars_f%fill )  THEN
4304                 surf_usm_h%lambda_h_green(nzb_wall,m)   =                     &
4305                                     building_pars_f%pars_xy(ind_tc1,j,i)         
4306                 surf_usm_h%lambda_h_green(nzb_wall+1,m) =                     &
4307                                     building_pars_f%pars_xy(ind_tc1,j,i)       
4308              ENDIF
4309              IF ( building_pars_f%pars_xy(ind_tc2,j,i) /=                     & 
4310                   building_pars_f%fill )                                      &
4311                 surf_usm_h%lambda_h_green(nzb_wall+2,m) =                     &
4312                                    building_pars_f%pars_xy(ind_tc2,j,i)
4313                 
4314              IF ( building_pars_f%pars_xy(ind_tc3,j,i) /=                     &       
4315                   building_pars_f%fill )                                      &
4316                 surf_usm_h%lambda_h_green(nzb_wall+3,m) =                     &
4317                                    building_pars_f%pars_xy(ind_tc3,j,i)   
4318                 
4319              IF ( building_pars_f%pars_xy(ind_tc1,j,i) /=                     &
4320                   building_pars_f%fill )  THEN
4321                 surf_usm_h%lambda_h_window(nzb_wall,m)   =                    &
4322                                     building_pars_f%pars_xy(ind_tc1,j,i)         
4323                 surf_usm_h%lambda_h_window(nzb_wall+1,m) =                    &
4324                                     building_pars_f%pars_xy(ind_tc1,j,i)       
4325              ENDIF
4326              IF ( building_pars_f%pars_xy(ind_tc2,j,i) /=                     &     
4327                   building_pars_f%fill )                                      &
4328                 surf_usm_h%lambda_h_window(nzb_wall+2,m) =                    &
4329                                     building_pars_f%pars_xy(ind_tc2,j,i)
4330                 
4331              IF ( building_pars_f%pars_xy(ind_tc3,j,i) /=                     &   
4332                   building_pars_f%fill )                                      &
4333                 surf_usm_h%lambda_h_window(nzb_wall+3,m) =                    &
4334                                    building_pars_f%pars_xy(ind_tc3,j,i)   
4335
4336              IF ( building_pars_f%pars_xy(ind_indoor_target_temp_summer,j,i) /=&           
4337                   building_pars_f%fill )                                      & 
4338                 surf_usm_h%target_temp_summer(m)  =                           &
4339                      building_pars_f%pars_xy(ind_indoor_target_temp_summer,j,i)   
4340              IF ( building_pars_f%pars_xy(ind_indoor_target_temp_winter,j,i) /=&           
4341                   building_pars_f%fill )                                      & 
4342                 surf_usm_h%target_temp_winter(m)  =                           &
4343                      building_pars_f%pars_xy(ind_indoor_target_temp_winter,j,i)   
4344
4345              IF ( building_pars_f%pars_xy(ind_emis_wall,j,i) /=               &   
4346                   building_pars_f%fill )                                      &
4347                 surf_usm_h%emissivity(ind_veg_wall,m)  =                      &
4348                                    building_pars_f%pars_xy(ind_emis_wall,j,i)
4349                 
4350              IF ( building_pars_f%pars_xy(ind_emis_green,j,i) /=              &           
4351                   building_pars_f%fill )                                      &
4352                 surf_usm_h%emissivity(ind_pav_green,m) =                      &
4353                                     building_pars_f%pars_xy(ind_emis_green,j,i)
4354                 
4355              IF ( building_pars_f%pars_xy(ind_emis_win,j,i) /=                & 
4356                   building_pars_f%fill )                                      &
4357                 surf_usm_h%emissivity(ind_wat_win,m)   =                      &
4358                                     building_pars_f%pars_xy(ind_emis_win,j,i)
4359                 
4360              IF ( building_pars_f%pars_xy(ind_trans,j,i) /=                   &   
4361                   building_pars_f%fill )                                      &
4362                 surf_usm_h%transmissivity(m) =                                &
4363                                    building_pars_f%pars_xy(ind_trans,j,i)
4364
4365              IF ( building_pars_f%pars_xy(ind_z0,j,i) /=                      &         
4366                   building_pars_f%fill )                                      &
4367                 surf_usm_h%z0(m) = building_pars_f%pars_xy(ind_z0,j,i)
4368                 
4369              IF ( building_pars_f%pars_xy(ind_z0qh,j,i) /=                    &           
4370                   building_pars_f%fill )                                      &
4371                 surf_usm_h%z0h(m) = building_pars_f%pars_xy(ind_z0qh,j,i)
4372              IF ( building_pars_f%pars_xy(ind_z0qh,j,i) /=                    &           
4373                   building_pars_f%fill )                                      &
4374                 surf_usm_h%z0q(m) = building_pars_f%pars_xy(ind_z0qh,j,i)
4375
4376              IF ( building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) /=           &         
4377                   building_pars_f%fill )                                      & 
4378                 surf_usm_h%albedo_type(ind_veg_wall,m)  =                     &
4379                                 building_pars_f%pars_xy(ind_alb_wall_agfl,j,i)
4380                 
4381              IF ( building_pars_f%pars_xy(ind_alb_green_agfl,j,i) /=          &           
4382                   building_pars_f%fill )                                      &
4383                 surf_usm_h%albedo_type(ind_pav_green,m) =                     &
4384                                building_pars_f%pars_xy(ind_alb_green_agfl,j,i)
4385              IF ( building_pars_f%pars_xy(ind_alb_win_agfl,j,i) /=            &         
4386                   building_pars_f%fill )                                      &
4387                 surf_usm_h%albedo_type(ind_wat_win,m)   =                     &
4388                                   building_pars_f%pars_xy(ind_alb_win_agfl,j,i)
4389
4390              IF ( building_pars_f%pars_xy(ind_thick_1_agfl,j,i) /=            &         
4391                   building_pars_f%fill )                                      & 
4392                 surf_usm_h%zw(nzb_wall,m) =                                   &
4393                                  building_pars_f%pars_xy(ind_thick_1_agfl,j,i)
4394                 
4395              IF ( building_pars_f%pars_xy(ind_thick_2_agfl,j,i) /=            &         
4396                   building_pars_f%fill )                                      &
4397                 surf_usm_h%zw(nzb_wall+1,m) =                                 &
4398                                  building_pars_f%pars_xy(ind_thick_2_agfl,j,i)
4399                 
4400              IF ( building_pars_f%pars_xy(ind_thick_3_agfl,j,i) /=            &         
4401                   building_pars_f%fill )                                      &
4402                 surf_usm_h%zw(nzb_wall+2,m) =                                 &
4403                                  building_pars_f%pars_xy(ind_thick_3_agfl,j,i)
4404                 
4405                 
4406              IF ( building_pars_f%pars_xy(ind_thick_4_agfl,j,i) /=            &         
4407                   building_pars_f%fill )                                      & 
4408                 surf_usm_h%zw(nzb_wall+3,m) =                                 &
4409                                  building_pars_f%pars_xy(ind_thick_4_agfl,j,i)
4410                 
4411              IF ( building_pars_f%pars_xy(ind_thick_1_agfl,j,i) /=            &           
4412                   building_pars_f%fill )                                      &
4413                 surf_usm_h%zw_green(nzb_wall,m) =                             &
4414                                  building_pars_f%pars_xy(ind_thick_1_agfl,j,i)
4415                 
4416              IF ( building_pars_f%pars_xy(ind_thick_2_agfl,j,i) /=            &         
4417                   building_pars_f%fill )                                      &
4418                 surf_usm_h%zw_green(nzb_wall+1,m) =                           &
4419                                   building_pars_f%pars_xy(ind_thick_2_agfl,j,i)
4420                 
4421              IF ( building_pars_f%pars_xy(ind_thick_3_agfl,j,i) /=            &         
4422                   building_pars_f%fill )                                      & 
4423                 surf_usm_h%zw_green(nzb_wall+2,m) =                           &
4424                                   building_pars_f%pars_xy(ind_thick_3_agfl,j,i)
4425                 
4426              IF ( building_pars_f%pars_xy(ind_thick_4_agfl,j,i) /=            &         
4427                   building_pars_f%fill )                                      &
4428                 surf_usm_h%zw_green(nzb_wall+3,m) =                           &
4429                                   building_pars_f%pars_xy(ind_thick_4_agfl,j,i)
4430
4431              IF ( building_pars_f%pars_xy(ind_c_surface,j,i) /=               &       
4432                   building_pars_f%fill )                                      & 
4433                 surf_usm_h%c_surface(m) =                                     &
4434                                    building_pars_f%pars_xy(ind_c_surface,j,i)
4435                 
4436              IF ( building_pars_f%pars_xy(ind_lambda_surf,j,i) /=             &       
4437                   building_pars_f%fill )                                      &
4438                 surf_usm_h%lambda_surf(m) =                                   &
4439                                    building_pars_f%pars_xy(ind_lambda_surf,j,i)
4440             
4441              write(9,*) m, SUM( surf_usm_h%frac(:,m) ), "indiv", surf_usm_h%frac(0,m), surf_usm_h%frac(1,m), surf_usm_h%frac(2,m) 
4442           ENDDO
4443           flush(9)
4444
4445
4446
4447           DO  l = 0, 3
4448              DO  m = 1, surf_usm_v(l)%ns
4449                 i = surf_usm_v(l)%i(m) + surf_usm_v(l)%ioff
4450                 j = surf_usm_v(l)%j(m) + surf_usm_v(l)%joff
4451               
4452!
4453!--                 In order to distinguish between ground floor level and
4454!--                 above-ground-floor level surfaces, set input indices.
4455                    ind_wall_frac    = MERGE( ind_wall_frac_gfl,               &
4456                                              ind_wall_frac_agfl,              &
4457                                              surf_usm_v(l)%ground_level(m) )
4458                    ind_green_frac_w = MERGE( ind_green_frac_w_gfl,            &
4459                                              ind_green_frac_w_agfl,           &
4460                                              surf_usm_v(l)%ground_level(m) )
4461                    ind_win_frac     = MERGE( ind_win_frac_gfl,                &
4462                                              ind_win_frac_agfl,               &
4463                                              surf_usm_v(l)%ground_level(m) )
4464                    ind_lai_w        = MERGE( ind_lai_w_gfl,                   &
4465                                              ind_lai_w_agfl,                  &
4466                                              surf_usm_v(l)%ground_level(m) )
4467                    ind_z0           = MERGE( ind_z0_gfl,                      &
4468                                              ind_z0_agfl,                     &
4469                                              surf_usm_v(l)%ground_level(m) )
4470                    ind_z0qh         = MERGE( ind_z0qh_gfl,                    &
4471                                              ind_z0qh_agfl,                   &
4472                                              surf_usm_v(l)%ground_level(m) )
4473                    ind_hc1          = MERGE( ind_hc1_gfl,                     &
4474                                              ind_hc1_agfl,                    &
4475                                              surf_usm_v(l)%ground_level(m) )
4476                    ind_hc2          = MERGE( ind_hc2_gfl,                     &
4477                                              ind_hc2_agfl,                    &
4478                                              surf_usm_v(l)%ground_level(m) )
4479                    ind_hc3          = MERGE( ind_hc3_gfl,                     &
4480                                              ind_hc3_agfl,                    &
4481                                              surf_usm_v(l)%ground_level(m) )
4482                    ind_tc1          = MERGE( ind_tc1_gfl,                     &
4483                                              ind_tc1_agfl,                    &
4484                                              surf_usm_v(l)%ground_level(m) )
4485                    ind_tc2          = MERGE( ind_tc2_gfl,                     &
4486                                              ind_tc2_agfl,                    &
4487                                              surf_usm_v(l)%ground_level(m) )
4488                    ind_tc3          = MERGE( ind_tc3_gfl,                     &
4489                                              ind_tc3_agfl,                    &
4490                                              surf_usm_v(l)%ground_level(m) )
4491                    ind_emis_wall    = MERGE( ind_emis_wall_gfl,               &
4492                                              ind_emis_wall_agfl,              &
4493                                              surf_usm_v(l)%ground_level(m) )
4494                    ind_emis_green   = MERGE( ind_emis_green_gfl,              &
4495                                              ind_emis_green_agfl,             &
4496                                              surf_usm_v(l)%ground_level(m) )
4497                    ind_emis_win     = MERGE( ind_emis_win_gfl,                &
4498                                              ind_emis_win_agfl,               &
4499                                              surf_usm_v(l)%ground_level(m) )
4500                    ind_trans        = MERGE( ind_trans_gfl,                   &
4501                                              ind_trans_agfl,                  &
4502                                              surf_usm_v(l)%ground_level(m) )
4503                   
4504!                   
4505!--                 Initialize relatvie wall- (0), green- (1) and window (2) fractions
4506                    IF ( building_pars_f%pars_xy(ind_wall_frac,j,i) /=         &
4507                         building_pars_f%fill )                                &
4508                       surf_usm_v(l)%frac(ind_veg_wall,m)  =                   &
4509                                          building_pars_f%pars_xy(ind_wall_frac,j,i)   
4510                       
4511                    IF ( building_pars_f%pars_xy(ind_green_frac_w,j,i) /=      &         
4512                         building_pars_f%fill )                                & 
4513                       surf_usm_v(l)%frac(ind_pav_green,m) =                   &
4514                                  building_pars_f%pars_xy(ind_green_frac_w,j,i) 
4515                       
4516                    IF ( building_pars_f%pars_xy(ind_win_frac,j,i) /=          &
4517                         building_pars_f%fill )                                & 
4518                       surf_usm_v(l)%frac(ind_wat_win,m)   =                   &
4519                                       building_pars_f%pars_xy(ind_win_frac,j,i)
4520                   
4521                    IF ( building_pars_f%pars_xy(ind_lai_w,j,i) /=             &
4522                         building_pars_f%fill )                                &
4523                       surf_usm_v(l)%lai(m)  =                                 &
4524                                       building_pars_f%pars_xy(ind_lai_w,j,i)
4525                   
4526                    IF ( building_pars_f%pars_xy(ind_hc1,j,i) /=               &
4527                         building_pars_f%fill )  THEN
4528                       surf_usm_v(l)%rho_c_wall(nzb_wall,m)   =                &
4529                                          building_pars_f%pars_xy(ind_hc1,j,i) 
4530                       surf_usm_v(l)%rho_c_wall(nzb_wall+1,m) =                &
4531                                          building_pars_f%pars_xy(ind_hc1,j,i)
4532                    ENDIF
4533                   
4534                   
4535                    IF ( building_pars_f%pars_xy(ind_hc2,j,i) /=               &
4536                         building_pars_f%fill )                                &
4537                       surf_usm_v(l)%rho_c_wall(nzb_wall+2,m) =                &
4538                                          building_pars_f%pars_xy(ind_hc2,j,i)
4539                       
4540                    IF ( building_pars_f%pars_xy(ind_hc3,j,i) /=               &         
4541                         building_pars_f%fill )                                &
4542                       surf_usm_v(l)%rho_c_wall(nzb_wall+3,m) =                &
4543                                          building_pars_f%pars_xy(ind_hc3,j,i)
4544                       
4545                    IF ( building_pars_f%pars_xy(ind_hc1,j,i) /=               &
4546                         building_pars_f%fill )  THEN
4547                       surf_usm_v(l)%rho_c_green(nzb_wall,m)   =               &
4548                                          building_pars_f%pars_xy(ind_hc1,j,i) 
4549                       surf_usm_v(l)%rho_c_green(nzb_wall+1,m) =               &
4550                                          building_pars_f%pars_xy(ind_hc1,j,i)
4551                    ENDIF
4552                    IF ( building_pars_f%pars_xy(ind_hc2,j,i) /=               &
4553                         building_pars_f%fill )                                &
4554                       surf_usm_v(l)%rho_c_green(nzb_wall+2,m) =               &
4555                                          building_pars_f%pars_xy(ind_hc2,j,i)
4556                       
4557                    IF ( building_pars_f%pars_xy(ind_hc3,j,i) /=               &
4558                         building_pars_f%fill )                                &
4559                       surf_usm_v(l)%rho_c_green(nzb_wall+3,m) =               &
4560                                          building_pars_f%pars_xy(ind_hc3,j,i)
4561                       
4562                    IF ( building_pars_f%pars_xy(ind_hc1,j,i) /=               &
4563                         building_pars_f%fill )  THEN
4564                       surf_usm_v(l)%rho_c_window(nzb_wall,m)   =              &
4565                                          building_pars_f%pars_xy(ind_hc1,j,i) 
4566                       surf_usm_v(l)%rho_c_window(nzb_wall+1,m) =              &
4567                                          building_pars_f%pars_xy(ind_hc1,j,i)
4568                    ENDIF
4569                    IF ( building_pars_f%pars_xy(ind_hc2,j,i) /=               &
4570                         building_pars_f%fill )                                &
4571                       surf_usm_v(l)%rho_c_window(nzb_wall+2,m) =              &
4572                                          building_pars_f%pars_xy(ind_hc2,j,i)
4573                       
4574                    IF ( building_pars_f%pars_xy(ind_hc3,j,i) /=               &
4575                         building_pars_f%fill )                                &
4576                       surf_usm_v(l)%rho_c_window(nzb_wall+3,m) =              &
4577                                          building_pars_f%pars_xy(ind_hc3,j,i)
4578                   
4579                    IF ( building_pars_f%pars_xy(ind_tc1,j,i) /=               &
4580                         building_pars_f%fill )  THEN
4581                       surf_usm_v(l)%lambda_h(nzb_wall,m)   =                  &
4582                                          building_pars_f%pars_xy(ind_tc1,j,i)   
4583                       surf_usm_v(l)%lambda_h(nzb_wall+1,m) =                  &
4584                                          building_pars_f%pars_xy(ind_tc1,j,i) 
4585                    ENDIF
4586                    IF ( building_pars_f%pars_xy(ind_tc2,j,i) /=               & 
4587                         building_pars_f%fill )                                &
4588                       surf_usm_v(l)%lambda_h(nzb_wall+2,m) =                  &
4589                                          building_pars_f%pars_xy(ind_tc2,j,i)
4590                       
4591                    IF ( building_pars_f%pars_xy(ind_tc3,j,i) /=               &
4592                         building_pars_f%fill )                                & 
4593                       surf_usm_v(l)%lambda_h(nzb_wall+3,m) =                  &
4594                                          building_pars_f%pars_xy(ind_tc3,j,i) 
4595                       
4596                    IF ( building_pars_f%pars_xy(ind_tc1,j,i) /=               &
4597                         building_pars_f%fill )  THEN
4598                       surf_usm_v(l)%lambda_h_green(nzb_wall,m)   =            &
4599                                           building_pars_f%pars_xy(ind_tc1,j,i)   
4600                       surf_usm_v(l)%lambda_h_green(nzb_wall+1,m) =            &
4601                                           building_pars_f%pars_xy(ind_tc1,j,i) 
4602                    ENDIF
4603                    IF ( building_pars_f%pars_xy(ind_tc2,j,i) /=               & 
4604                         building_pars_f%fill )                                &
4605                       surf_usm_v(l)%lambda_h_green(nzb_wall+2,m) =            &
4606                                          building_pars_f%pars_xy(ind_tc2,j,i)
4607                       
4608                    IF ( building_pars_f%pars_xy(ind_tc3,j,i) /=               &       
4609                         building_pars_f%fill )                                &
4610                       surf_usm_v(l)%lambda_h_green(nzb_wall+3,m) =            &
4611                                          building_pars_f%pars_xy(ind_tc3,j,i) 
4612                       
4613                    IF ( building_pars_f%pars_xy(ind_tc1,j,i) /=         &
4614                         building_pars_f%fill )  THEN
4615                       surf_usm_v(l)%lambda_h_window(nzb_wall,m)   =           &
4616                                     building_pars_f%pars_xy(ind_tc1,j,i)         
4617                       surf_usm_v(l)%lambda_h_window(nzb_wall+1,m) =           &
4618                                     building_pars_f%pars_xy(ind_tc1,j,i)       
4619                    ENDIF
4620                    IF ( building_pars_f%pars_xy(ind_tc2,j,i) /=               &     
4621                         building_pars_f%fill )                                &
4622                       surf_usm_v(l)%lambda_h_window(nzb_wall+2,m) =           &
4623                                           building_pars_f%pars_xy(ind_tc2,j,i)
4624                       
4625                    IF ( building_pars_f%pars_xy(ind_tc3,j,i) /=               &   
4626                         building_pars_f%fill )                                &
4627                       surf_usm_v(l)%lambda_h_window(nzb_wall+3,m) =           &
4628                                          building_pars_f%pars_xy(ind_tc3,j,i)   
4629                   
4630                    IF ( building_pars_f%pars_xy(ind_indoor_target_temp_summer,j,i) /=&           
4631                         building_pars_f%fill )                                & 
4632                       surf_usm_v(l)%target_temp_summer(m)  =                  &
4633                            building_pars_f%pars_xy(ind_indoor_target_temp_summer,j,i)   
4634                    IF ( building_pars_f%pars_xy(ind_indoor_target_temp_winter,j,i) /=&           
4635                         building_pars_f%fill )                                & 
4636                       surf_usm_v(l)%target_temp_winter(m)  =                  &
4637                            building_pars_f%pars_xy(ind_indoor_target_temp_winter,j,i)   
4638                   
4639                    IF ( building_pars_f%pars_xy(ind_emis_wall,j,i) /=         &   
4640                         building_pars_f%fill )                                &
4641                       surf_usm_v(l)%emissivity(ind_veg_wall,m)  =             &
4642                                      building_pars_f%pars_xy(ind_emis_wall,j,i)
4643                       
4644                    IF ( building_pars_f%pars_xy(ind_emis_green,j,i) /=        &           
4645                         building_pars_f%fill )                                &
4646                       surf_usm_v(l)%emissivity(ind_pav_green,m) =             &
4647                                      building_pars_f%pars_xy(ind_emis_green,j,i)
4648                       
4649                    IF ( building_pars_f%pars_xy(ind_emis_win,j,i) /=          & 
4650                         building_pars_f%fill )                                &
4651                       surf_usm_v(l)%emissivity(ind_wat_win,m)   =             &
4652                                      building_pars_f%pars_xy(ind_emis_win,j,i)
4653                       
4654                    IF ( building_pars_f%pars_xy(ind_trans,j,i) /=             &   
4655                         building_pars_f%fill )                                &
4656                       surf_usm_v(l)%transmissivity(m) =                       &
4657                                          building_pars_f%pars_xy(ind_trans,j,i)
4658                   
4659                    IF ( building_pars_f%pars_xy(ind_z0,j,i) /=                &         
4660                         building_pars_f%fill )                                &
4661                       surf_usm_v(l)%z0(m) = building_pars_f%pars_xy(ind_z0,j,i)
4662                       
4663                    IF ( building_pars_f%pars_xy(ind_z0qh,j,i) /=              &           
4664                         building_pars_f%fill )                                &
4665                       surf_usm_v(l)%z0h(m) =                                  &
4666                                       building_pars_f%pars_xy(ind_z0qh,j,i)
4667                    IF ( building_pars_f%pars_xy(ind_z0qh,j,i) /=              &           
4668                         building_pars_f%fill )                                &
4669                       surf_usm_v(l)%z0q(m) =                                  &
4670                                       building_pars_f%pars_xy(ind_z0qh,j,i)
4671                   
4672                    IF ( building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) /=     &         
4673                         building_pars_f%fill )                                & 
4674                       surf_usm_v(l)%albedo_type(ind_veg_wall,m)  =            &
4675                                 building_pars_f%pars_xy(ind_alb_wall_agfl,j,i)
4676                       
4677                    IF ( building_pars_f%pars_xy(ind_alb_green_agfl,j,i) /=    &           
4678                         building_pars_f%fill )                                &
4679                       surf_usm_v(l)%albedo_type(ind_pav_green,m) =            &
4680                                 building_pars_f%pars_xy(ind_alb_green_agfl,j,i)
4681                    IF ( building_pars_f%pars_xy(ind_alb_win_agfl,j,i) /=      &         
4682                         building_pars_f%fill )                                &
4683                       surf_usm_v(l)%albedo_type(ind_wat_win,m)   =            &
4684                                   building_pars_f%pars_xy(ind_alb_win_agfl,j,i)
4685                   
4686                    IF ( building_pars_f%pars_xy(ind_thick_1_agfl,j,i) /=      &         
4687                         building_pars_f%fill )                                & 
4688                       surf_usm_v(l)%zw(nzb_wall,m) =                          &
4689                                   building_pars_f%pars_xy(ind_thick_1_agfl,j,i)
4690                       
4691                    IF ( building_pars_f%pars_xy(ind_thick_2_agfl,j,i) /=      &         
4692                         building_pars_f%fill )                                &
4693                       surf_usm_v(l)%zw(nzb_wall+1,m) =                        &
4694                                   building_pars_f%pars_xy(ind_thick_2_agfl,j,i)
4695                       
4696                    IF ( building_pars_f%pars_xy(ind_thick_3_agfl,j,i) /=      &         
4697                         building_pars_f%fill )                                &
4698                       surf_usm_v(l)%zw(nzb_wall+2,m) =                        &
4699                                   building_pars_f%pars_xy(ind_thick_3_agfl,j,i)
4700                       
4701                       
4702                    IF ( building_pars_f%pars_xy(ind_thick_4_agfl,j,i) /=      &         
4703                         building_pars_f%fill )                                & 
4704                       surf_usm_v(l)%zw(nzb_wall+3,m) =                        &
4705                                   building_pars_f%pars_xy(ind_thick_4_agfl,j,i)
4706                       
4707                    IF ( building_pars_f%pars_xy(ind_thick_1_agfl,j,i) /=      &           
4708                         building_pars_f%fill )                                &
4709                       surf_usm_v(l)%zw_green(nzb_wall,m) =                    &
4710                                   building_pars_f%pars_xy(ind_thick_1_agfl,j,i)
4711                       
4712                    IF ( building_pars_f%pars_xy(ind_thick_2_agfl,j,i) /=      &         
4713                         building_pars_f%fill )                                &
4714                       surf_usm_v(l)%zw_green(nzb_wall+1,m) =                  &
4715                                   building_pars_f%pars_xy(ind_thick_2_agfl,j,i)
4716                       
4717                    IF ( building_pars_f%pars_xy(ind_thick_3_agfl,j,i) /=      &         
4718                         building_pars_f%fill )                                & 
4719                       surf_usm_v(l)%zw_green(nzb_wall+2,m) =                  &
4720                                   building_pars_f%pars_xy(ind_thick_3_agfl,j,i)
4721                       
4722                    IF ( building_pars_f%pars_xy(ind_thick_4_agfl,j,i) /=      &         
4723                         building_pars_f%fill )                                &
4724                       surf_usm_v(l)%zw_green(nzb_wall+3,m) =                  &
4725                                   building_pars_f%pars_xy(ind_thick_4_agfl,j,i)
4726                   
4727                    IF ( building_pars_f%pars_xy(ind_c_surface,j,i) /=         &       
4728                         building_pars_f%fill )                                & 
4729                       surf_usm_v(l)%c_surface(m) =                            &
4730                                     building_pars_f%pars_xy(ind_c_surface,j,i)
4731                       
4732                    IF ( building_pars_f%pars_xy(ind_lambda_surf,j,i) /=       &       
4733                         building_pars_f%fill )                                &
4734                       surf_usm_v(l)%lambda_surf(m) =                          &
4735                                    building_pars_f%pars_xy(ind_lambda_surf,j,i)
4736                   
4737              ENDDO
4738           ENDDO
4739        ENDIF 
4740!
4741!--     Read building surface pars. If present, they override LOD1-LOD3 building
4742!--     pars where applicable
4743        IF ( building_surface_pars_f%from_file )  THEN
4744           DO  m = 1, surf_usm_h%ns
4745              i = surf_usm_h%i(m)
4746              j = surf_usm_h%j(m)
4747              k = surf_usm_h%k(m)
4748!
4749!--           Iterate over surfaces in column, check height and orientation
4750              DO  is = building_surface_pars_f%index_ji(1,j,i), &
4751                       building_surface_pars_f%index_ji(2,j,i)
4752                 IF ( building_surface_pars_f%coords(4,is) == -surf_usm_h%koff .AND.            &
4753                      building_surface_pars_f%coords(1,is) == k )  THEN
4754
4755                    IF ( building_surface_pars_f%pars(ind_s_wall_frac,is) /=                     &
4756                         building_surface_pars_f%fill )                                          &
4757                       surf_usm_h%frac(ind_veg_wall,m) =                                         &
4758                                building_surface_pars_f%pars(ind_s_wall_frac,is)
4759
4760                    IF ( building_surface_pars_f%pars(ind_s_green_frac_w,is) /=                  &
4761                         building_surface_pars_f%fill )                                          &
4762                       surf_usm_h%frac(ind_pav_green,m) =                                        &
4763                                building_surface_pars_f%pars(ind_s_green_frac_w,is)
4764
4765                    IF ( building_surface_pars_f%pars(ind_s_green_frac_r,is) /=                  &
4766                         building_surface_pars_f%fill )                                          &
4767                       surf_usm_h%frac(ind_pav_green,m) =                                        &
4768                                building_surface_pars_f%pars(ind_s_green_frac_r,is)
4769                                !TODO clarify: why should _w and _r be on the same surface?
4770
4771                    IF ( building_surface_pars_f%pars(ind_s_win_frac,is) /=                      &
4772                         building_surface_pars_f%fill )                                          &
4773                       surf_usm_h%frac(ind_wat_win,m) =                                          &
4774                                building_surface_pars_f%pars(ind_s_win_frac,is)
4775
4776                    IF ( building_surface_pars_f%pars(ind_s_lai_r,is) /=                         &
4777                         building_surface_pars_f%fill )                                          &
4778                       surf_usm_h%lai(m) =                                                       &
4779                                building_surface_pars_f%pars(ind_s_lai_r,is)
4780
4781                    IF ( building_surface_pars_f%pars(ind_s_hc1,is) /=                           &
4782                         building_surface_pars_f%fill )  THEN
4783                       surf_usm_h%rho_c_wall(nzb_wall:nzb_wall+1,m) =                            &
4784                                building_surface_pars_f%pars(ind_s_hc1,is)
4785                       surf_usm_h%rho_c_green(nzb_wall:nzb_wall+1,m) =                           &
4786                                building_surface_pars_f%pars(ind_s_hc1,is)
4787                       surf_usm_h%rho_c_window(nzb_wall:nzb_wall+1,m) =                          &
4788                                building_surface_pars_f%pars(ind_s_hc1,is)
4789                    ENDIF
4790
4791                    IF ( building_surface_pars_f%pars(ind_s_hc2,is) /=                           &
4792                         building_surface_pars_f%fill )  THEN
4793                       surf_usm_h%rho_c_wall(nzb_wall+2,m) =                                     &
4794                                building_surface_pars_f%pars(ind_s_hc2,is)
4795                       surf_usm_h%rho_c_green(nzb_wall+2,m) =                                    &
4796                                building_surface_pars_f%pars(ind_s_hc2,is)
4797                       surf_usm_h%rho_c_window(nzb_wall+2,m) =                                   &
4798                                building_surface_pars_f%pars(ind_s_hc2,is)
4799                    ENDIF
4800
4801                    IF ( building_surface_pars_f%pars(ind_s_hc3,is) /=                           &
4802                         building_surface_pars_f%fill )  THEN
4803                       surf_usm_h%rho_c_wall(nzb_wall+3,m) =                                     &
4804                                building_surface_pars_f%pars(ind_s_hc3,is)
4805                       surf_usm_h%rho_c_green(nzb_wall+3,m) =                                    &
4806                                building_surface_pars_f%pars(ind_s_hc3,is)
4807                       surf_usm_h%rho_c_window(nzb_wall+3,m) =                                   &
4808                                building_surface_pars_f%pars(ind_s_hc3,is)
4809                    ENDIF
4810
4811                    IF ( building_surface_pars_f%pars(ind_s_tc1,is) /=                           &
4812                         building_surface_pars_f%fill )  THEN
4813                       surf_usm_h%lambda_h(nzb_wall:nzb_wall+1,m) =                              &
4814                                building_surface_pars_f%pars(ind_s_tc1,is)
4815                       surf_usm_h%lambda_h_green(nzb_wall:nzb_wall+1,m) =                        &
4816                                building_surface_pars_f%pars(ind_s_tc1,is)
4817                       surf_usm_h%lambda_h_window(nzb_wall:nzb_wall+1,m) =                       &
4818                                building_surface_pars_f%pars(ind_s_tc1,is)
4819                    ENDIF
4820
4821                    IF ( building_surface_pars_f%pars(ind_s_tc2,is) /=                           &
4822                         building_surface_pars_f%fill )  THEN
4823                       surf_usm_h%lambda_h(nzb_wall+2,m) =                                       &
4824                                building_surface_pars_f%pars(ind_s_tc2,is)
4825                       surf_usm_h%lambda_h_green(nzb_wall+2,m) =                                 &
4826                                building_surface_pars_f%pars(ind_s_tc2,is)
4827                       surf_usm_h%lambda_h_window(nzb_wall+2,m) =                                &
4828                                building_surface_pars_f%pars(ind_s_tc2,is)
4829                    ENDIF
4830
4831                    IF ( building_surface_pars_f%pars(ind_s_tc3,is) /=                           &
4832                         building_surface_pars_f%fill )  THEN
4833                       surf_usm_h%lambda_h(nzb_wall+3,m) =                                       &
4834                                building_surface_pars_f%pars(ind_s_tc3,is)
4835                       surf_usm_h%lambda_h_green(nzb_wall+3,m) =                                 &
4836                                building_surface_pars_f%pars(ind_s_tc3,is)
4837                       surf_usm_h%lambda_h_window(nzb_wall+3,m) =                                &
4838                                building_surface_pars_f%pars(ind_s_tc3,is)
4839                    ENDIF
4840
4841                    IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is) /=     &
4842                         building_surface_pars_f%fill )                                          &
4843                       surf_usm_h%target_temp_summer(m) =                                        &
4844                                building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is)
4845
4846                    IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is) /=     &
4847                         building_surface_pars_f%fill )                                          &
4848                       surf_usm_h%target_temp_winter(m) =                                        &
4849                                building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is)
4850
4851                    IF ( building_surface_pars_f%pars(ind_s_emis_wall,is) /=                     &
4852                         building_surface_pars_f%fill )                                          &
4853                       surf_usm_h%emissivity(ind_veg_wall,m) =                                   &
4854                                building_surface_pars_f%pars(ind_s_emis_wall,is)
4855
4856                    IF ( building_surface_pars_f%pars(ind_s_emis_green,is) /=                    &
4857                         building_surface_pars_f%fill )                                          &
4858                       surf_usm_h%emissivity(ind_pav_green,m) =                                  &
4859                                building_surface_pars_f%pars(ind_s_emis_green,is)
4860
4861                    IF ( building_surface_pars_f%pars(ind_s_emis_win,is) /=                      &
4862                         building_surface_pars_f%fill )                                          &
4863                       surf_usm_h%emissivity(ind_wat_win,m) =                                    &
4864                                building_surface_pars_f%pars(ind_s_emis_win,is)
4865
4866                    IF ( building_surface_pars_f%pars(ind_s_trans,is) /=                         &
4867                         building_surface_pars_f%fill )                                          &
4868                       surf_usm_h%transmissivity(m) =                                            &
4869                                building_surface_pars_f%pars(ind_s_trans,is)
4870
4871                    IF ( building_surface_pars_f%pars(ind_s_z0,is) /=                            &
4872                         building_surface_pars_f%fill )                                          &
4873                       surf_usm_h%z0(m) =                                                        &
4874                                building_surface_pars_f%pars(ind_s_z0,is)
4875
4876                    IF ( building_surface_pars_f%pars(ind_s_z0qh,is) /=                          &
4877                         building_surface_pars_f%fill )  THEN
4878                       surf_usm_h%z0q(m) =                                                       &
4879                                building_surface_pars_f%pars(ind_s_z0qh,is)
4880                       surf_usm_h%z0h(m) =                                                       &
4881                                building_surface_pars_f%pars(ind_s_z0qh,is)
4882                    ENDIF
4883
4884                    EXIT ! surface was found and processed
4885                 ENDIF
4886              ENDDO
4887           ENDDO
4888
4889           DO  l = 0, 3
4890              DO  m = 1, surf_usm_v(l)%ns
4891                 i = surf_usm_v(l)%i(m)
4892                 j = surf_usm_v(l)%j(m)
4893                 k = surf_usm_v(l)%k(m)
4894!
4895!--              Iterate over surfaces in column, check height and orientation
4896                 DO  is = building_surface_pars_f%index_ji(1,j,i), &
4897                          building_surface_pars_f%index_ji(2,j,i)
4898                    IF ( building_surface_pars_f%coords(5,is) == -surf_usm_v(l)%joff .AND.    &
4899                         building_surface_pars_f%coords(6,is) == -surf_usm_v(l)%ioff .AND.    &
4900                         building_surface_pars_f%coords(1,is) == k )  THEN
4901
4902                       IF ( building_surface_pars_f%pars(ind_s_wall_frac,is) /=                &
4903                            building_surface_pars_f%fill )                                     &
4904                          surf_usm_v(l)%frac(ind_veg_wall,m) =                                 &
4905                                   building_surface_pars_f%pars(ind_s_wall_frac,is)
4906
4907                       IF ( building_surface_pars_f%pars(ind_s_green_frac_w,is) /=             &
4908                            building_surface_pars_f%fill )                                     &
4909                          surf_usm_v(l)%frac(ind_pav_green,m) =                                &
4910                                   building_surface_pars_f%pars(ind_s_green_frac_w,is)
4911
4912                       IF ( building_surface_pars_f%pars(ind_s_green_frac_r,is) /=             &
4913                            building_surface_pars_f%fill )                                     &
4914                          surf_usm_v(l)%frac(ind_pav_green,m) =                                &
4915                                   building_surface_pars_f%pars(ind_s_green_frac_r,is)
4916                                   !TODO clarify: why should _w and _r be on the same surface?
4917
4918                       IF ( building_surface_pars_f%pars(ind_s_win_frac,is) /=                 &
4919                            building_surface_pars_f%fill )                                     &
4920                          surf_usm_v(l)%frac(ind_wat_win,m) =                                  &
4921                                   building_surface_pars_f%pars(ind_s_win_frac,is)
4922
4923                       IF ( building_surface_pars_f%pars(ind_s_lai_r,is) /=                    &
4924                            building_surface_pars_f%fill )                                     &
4925                          surf_usm_v(l)%lai(m) =                                               &
4926                                   building_surface_pars_f%pars(ind_s_lai_r,is)
4927
4928                       IF ( building_surface_pars_f%pars(ind_s_hc1,is) /=                      &
4929                            building_surface_pars_f%fill )  THEN
4930                          surf_usm_v(l)%rho_c_wall(nzb_wall:nzb_wall+1,m) =                    &
4931                                   building_surface_pars_f%pars(ind_s_hc1,is)
4932                          surf_usm_v(l)%rho_c_green(nzb_wall:nzb_wall+1,m) =                   &
4933                                   building_surface_pars_f%pars(ind_s_hc1,is)
4934                          surf_usm_v(l)%rho_c_window(nzb_wall:nzb_wall+1,m) =                  &
4935                                   building_surface_pars_f%pars(ind_s_hc1,is)
4936                       ENDIF
4937
4938                       IF ( building_surface_pars_f%pars(ind_s_hc2,is) /=                      &
4939                            building_surface_pars_f%fill )  THEN
4940                          surf_usm_v(l)%rho_c_wall(nzb_wall+2,m) =                             &
4941                                   building_surface_pars_f%pars(ind_s_hc2,is)
4942                          surf_usm_v(l)%rho_c_green(nzb_wall+2,m) =                            &
4943                                   building_surface_pars_f%pars(ind_s_hc2,is)
4944                          surf_usm_v(l)%rho_c_window(nzb_wall+2,m) =                           &
4945                                   building_surface_pars_f%pars(ind_s_hc2,is)
4946                       ENDIF
4947
4948                       IF ( building_surface_pars_f%pars(ind_s_hc3,is) /=                      &
4949                            building_surface_pars_f%fill )  THEN
4950                          surf_usm_v(l)%rho_c_wall(nzb_wall+3,m) =                             &
4951                                   building_surface_pars_f%pars(ind_s_hc3,is)
4952                          surf_usm_v(l)%rho_c_green(nzb_wall+3,m) =                            &
4953                                   building_surface_pars_f%pars(ind_s_hc3,is)
4954                          surf_usm_v(l)%rho_c_window(nzb_wall+3,m) =                           &
4955                                   building_surface_pars_f%pars(ind_s_hc3,is)
4956                       ENDIF
4957
4958                       IF ( building_surface_pars_f%pars(ind_s_tc1,is) /=                      &
4959                            building_surface_pars_f%fill )  THEN
4960                          surf_usm_v(l)%lambda_h(nzb_wall:nzb_wall+1,m) =                      &
4961                                   building_surface_pars_f%pars(ind_s_tc1,is)
4962                          surf_usm_v(l)%lambda_h_green(nzb_wall:nzb_wall+1,m) =                &
4963                                   building_surface_pars_f%pars(ind_s_tc1,is)
4964                          surf_usm_v(l)%lambda_h_window(nzb_wall:nzb_wall+1,m) =               &
4965                                   building_surface_pars_f%pars(ind_s_tc1,is)
4966                       ENDIF
4967
4968                       IF ( building_surface_pars_f%pars(ind_s_tc2,is) /=                      &
4969                            building_surface_pars_f%fill )  THEN
4970                          surf_usm_v(l)%lambda_h(nzb_wall+2,m) =                               &
4971                                   building_surface_pars_f%pars(ind_s_tc2,is)
4972                          surf_usm_v(l)%lambda_h_green(nzb_wall+2,m) =                         &
4973                                   building_surface_pars_f%pars(ind_s_tc2,is)
4974                          surf_usm_v(l)%lambda_h_window(nzb_wall+2,m) =                        &
4975                                   building_surface_pars_f%pars(ind_s_tc2,is)
4976                       ENDIF
4977
4978                       IF ( building_surface_pars_f%pars(ind_s_tc3,is) /=                      &
4979                            building_surface_pars_f%fill )  THEN
4980                          surf_usm_v(l)%lambda_h(nzb_wall+3,m) =                               &
4981                                   building_surface_pars_f%pars(ind_s_tc3,is)
4982                          surf_usm_v(l)%lambda_h_green(nzb_wall+3,m) =                         &
4983                                   building_surface_pars_f%pars(ind_s_tc3,is)
4984                          surf_usm_v(l)%lambda_h_window(nzb_wall+3,m) =                        &
4985                                   building_surface_pars_f%pars(ind_s_tc3,is)
4986                       ENDIF
4987
4988                       IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is) /=    &
4989                            building_surface_pars_f%fill )                                         &
4990                          surf_usm_v(l)%target_temp_summer(m) =                                    &
4991                                   building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is)
4992
4993                       IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is) /=    &
4994                            building_surface_pars_f%fill )                                         &
4995                          surf_usm_v(l)%target_temp_winter(m) =                                    &
4996                                   building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is)
4997
4998                       IF ( building_surface_pars_f%pars(ind_s_emis_wall,is) /=      &
4999                            building_surface_pars_f%fill )                           &
5000                          surf_usm_v(l)%emissivity(ind_veg_wall,m) =                 &
5001                                   building_surface_pars_f%pars(ind_s_emis_wall,is)
5002
5003                       IF ( building_surface_pars_f%pars(ind_s_emis_green,is) /=     &
5004                            building_surface_pars_f%fill )                           &
5005                          surf_usm_v(l)%emissivity(ind_pav_green,m) =                &
5006                                   building_surface_pars_f%pars(ind_s_emis_green,is)
5007
5008                       IF ( building_surface_pars_f%pars(ind_s_emis_win,is) /=       &
5009                            building_surface_pars_f%fill )                           &
5010                          surf_usm_v(l)%emissivity(ind_wat_win,m) =                  &
5011                                   building_surface_pars_f%pars(ind_s_emis_win,is)
5012
5013                       IF ( building_surface_pars_f%pars(ind_s_trans,is) /=          &
5014                            building_surface_pars_f%fill )                           &
5015                          surf_usm_v(l)%transmissivity(m) =                          &
5016                                   building_surface_pars_f%pars(ind_s_trans,is)
5017
5018                       IF ( building_surface_pars_f%pars(ind_s_z0,is) /=             &
5019                            building_surface_pars_f%fill )                           &
5020                          surf_usm_v(l)%z0(m) =                                      &
5021                                   building_surface_pars_f%pars(ind_s_z0,is)
5022
5023                       IF ( building_surface_pars_f%pars(ind_s_z0qh,is) /=           &
5024                            building_surface_pars_f%fill )  THEN
5025                          surf_usm_v(l)%z0q(m) =                                     &
5026                                   building_surface_pars_f%pars(ind_s_z0qh,is)
5027                          surf_usm_v(l)%z0h(m) =                                     &
5028                                   building_surface_pars_f%pars(ind_s_z0qh,is)
5029                       ENDIF
5030
5031                       EXIT ! surface was found and processed
5032                    ENDIF
5033                 ENDDO
5034              ENDDO
5035           ENDDO
5036        ENDIF
5037!
5038!--     Run further checks to ensure that the respecitve material fractions are
5039!--     prescribed properly.
5040        DO  m = 1, surf_usm_h%ns
5041           IF ( SUM( surf_usm_h%frac(:,m) ) /= 1.0_wp )  THEN
5042              WRITE(message_string,*) 'The relative material fractions do ' // &
5043                                      'not sum-up to one at horizotal ' //     &
5044                                      'surface. (i,j) = ',                     &
5045                                      surf_usm_h%i(m), surf_usm_h%j(m)
5046              CALL message( 'urban_surface_model_mod', 'PA0686', 2, 2, myid, 6, 0 )
5047           ENDIF
5048        ENDDO
5049       
5050        DO  l = 0, 3
5051           DO  m = 1, surf_usm_v(l)%ns
5052              IF ( SUM( surf_usm_v(l)%frac(:,m) ) /= 1.0_wp )  THEN
5053                 WRITE(message_string,*)                                       &
5054                                      'The relative material fractions do ' // &
5055                                      'not sum-up to one at vertical ' //      &
5056                                      'surface. (i,j) = ',                     &
5057                                      surf_usm_v(l)%i(m), surf_usm_v(l)%j(m)
5058                 CALL message( 'urban_surface_model_mod', 'PA0686', 2, 2, myid, 6, 0 )
5059              ENDIF
5060           ENDDO
5061        ENDDO
5062!       
5063!--     Read the surface_types array.
5064!--     Please note, here also initialization of surface attributes is done as
5065!--     long as _urbsurf and _surfpar files are available. Values from above
5066!--     will be overwritten. This might be removed later, but is still in the
5067!--     code to enable compatibility with older model version.
5068        CALL usm_read_urban_surface_types()
5069       
5070        CALL usm_init_material_model()
5071!       
5072!--     init anthropogenic sources of heat
5073        IF ( usm_anthropogenic_heat )  THEN
5074!
5075!--         init anthropogenic sources of heat (from transportation for now)
5076            CALL usm_read_anthropogenic_heat()
5077        ENDIF
5078
5079!
5080!--    Check for consistent initialization.
5081!--    Check if roughness length for momentum, or heat, exceed surface-layer
5082!--    height and decrease local roughness length where necessary.
5083       DO  m = 1, surf_usm_h%ns
5084          IF ( surf_usm_h%z0(m) >= surf_usm_h%z_mo(m) )  THEN
5085         
5086             surf_usm_h%z0(m) = 0.9_wp * surf_usm_h%z_mo(m)
5087             
5088             WRITE( message_string, * ) 'z0 exceeds surface-layer height ' //  &
5089                            'at horizontal urban surface and is ' //           &
5090                            'decreased appropriately at grid point (i,j) = ',  &
5091                            surf_usm_h%i(m), surf_usm_h%j(m)
5092             CALL message( 'urban_surface_model_mod', 'PA0503',                &
5093                            0, 0, myid, 6, 0 )
5094          ENDIF
5095          IF ( surf_usm_h%z0h(m) >= surf_usm_h%z_mo(m) )  THEN
5096         
5097             surf_usm_h%z0h(m) = 0.9_wp * surf_usm_h%z_mo(m)
5098             surf_usm_h%z0q(m) = 0.9_wp * surf_usm_h%z_mo(m)
5099             
5100             WRITE( message_string, * ) 'z0h exceeds surface-layer height ' // &
5101                            'at horizontal urban surface and is ' //           &
5102                            'decreased appropriately at grid point (i,j) = ',  &
5103                            surf_usm_h%i(m), surf_usm_h%j(m)
5104             CALL message( 'urban_surface_model_mod', 'PA0507',                &
5105                            0, 0, myid, 6, 0 )
5106          ENDIF         
5107       ENDDO
5108       
5109       DO  l = 0, 3
5110          DO  m = 1, surf_usm_v(l)%ns
5111             IF ( surf_usm_v(l)%z0(m) >= surf_usm_v(l)%z_mo(m) )  THEN
5112         
5113                surf_usm_v(l)%z0(m) = 0.9_wp * surf_usm_v(l)%z_mo(m)
5114             
5115                WRITE( message_string, * ) 'z0 exceeds surface-layer height '// &
5116                            'at vertical urban surface and is ' //              &
5117                            'decreased appropriately at grid point (i,j) = ',   &
5118                            surf_usm_v(l)%i(m)+surf_usm_v(l)%ioff,              &
5119                            surf_usm_v(l)%j(m)+surf_usm_v(l)%joff
5120                CALL message( 'urban_surface_model_mod', 'PA0503',              &
5121                            0, 0, myid, 6, 0 )
5122             ENDIF
5123             IF ( surf_usm_v(l)%z0h(m) >= surf_usm_v(l)%z_mo(m) )  THEN
5124         
5125                surf_usm_v(l)%z0h(m) = 0.9_wp * surf_usm_v(l)%z_mo(m)
5126                surf_usm_v(l)%z0q(m) = 0.9_wp * surf_usm_v(l)%z_mo(m)
5127             
5128                WRITE( message_string, * ) 'z0h exceeds surface-layer height '// &
5129                            'at vertical urban surface and is ' //               &
5130                            'decreased appropriately at grid point (i,j) = ',    &
5131                            surf_usm_v(l)%i(m)+surf_usm_v(l)%ioff,               &
5132                            surf_usm_v(l)%j(m)+surf_usm_v(l)%joff
5133                CALL message( 'urban_surface_model_mod', 'PA0507',               &
5134                            0, 0, myid, 6, 0 )
5135             ENDIF
5136          ENDDO
5137       ENDDO
5138!
5139!--     Intitialization of the surface and wall/ground/roof temperature
5140!
5141!--     Initialization for restart runs
5142        IF ( TRIM( initializing_actions ) /= 'read_restart_data'  .AND.        &
5143             TRIM( initializing_actions ) /= 'cyclic_fill' )  THEN
5144
5145!
5146!--         At horizontal surfaces. Please note, t_surf_wall_h is defined on a
5147!--         different data type, but with the same dimension.
5148            DO  m = 1, surf_usm_h%ns
5149               i = surf_usm_h%i(m)           
5150               j = surf_usm_h%j(m)
5151               k = surf_usm_h%k(m)
5152
5153               t_surf_wall_h(m) = pt(k,j,i) * exner(k)
5154               t_surf_window_h(m) = pt(k,j,i) * exner(k)
5155               t_surf_green_h(m) = pt(k,j,i) * exner(k)
5156               surf_usm_h%pt_surface(m) = pt(k,j,i) * exner(k)
5157            ENDDO
5158!
5159!--         At vertical surfaces.
5160            DO  l = 0, 3
5161               DO  m = 1, surf_usm_v(l)%ns
5162                  i = surf_usm_v(l)%i(m)           
5163                  j = surf_usm_v(l)%j(m)
5164                  k = surf_usm_v(l)%k(m)
5165
5166                  t_surf_wall_v(l)%t(m) = pt(k,j,i) * exner(k)
5167                  t_surf_window_v(l)%t(m) = pt(k,j,i) * exner(k)
5168                  t_surf_green_v(l)%t(m) = pt(k,j,i) * exner(k)
5169                  surf_usm_v(l)%pt_surface(m) = pt(k,j,i) * exner(k)
5170               ENDDO
5171            ENDDO
5172
5173!
5174!--         For the sake of correct initialization, set also q_surface.
5175!--         Note, at urban surfaces q_surface is initialized with 0.
5176            IF ( humidity )  THEN
5177               DO  m = 1, surf_usm_h%ns
5178                  surf_usm_h%q_surface(m) = 0.0_wp
5179               ENDDO
5180               DO  l = 0, 3
5181                  DO  m = 1, surf_usm_v(l)%ns
5182                     surf_usm_v(l)%q_surface(m) = 0.0_wp
5183                  ENDDO
5184               ENDDO
5185            ENDIF
5186!
5187!--         initial values for t_wall
5188!--         outer value is set to surface temperature
5189!--         inner value is set to wall_inner_temperature
5190!--         and profile is logaritmic (linear in nz).
5191!--         Horizontal surfaces
5192            DO  m = 1, surf_usm_h%ns
5193!
5194!--            Roof
5195               IF ( surf_usm_h%isroof_surf(m) )  THEN
5196                   tin = roof_inner_temperature
5197                   twin = window_inner_temperature
5198!
5199!--            Normal land surface
5200               ELSE
5201                   tin = soil_inner_temperature
5202                   twin = window_inner_temperature
5203               ENDIF
5204
5205               DO k = nzb_wall, nzt_wall+1
5206                   c = REAL( k - nzb_wall, wp ) /                              &
5207                       REAL( nzt_wall + 1 - nzb_wall , wp )
5208
5209                   t_wall_h(k,m) = ( 1.0_wp - c ) * t_surf_wall_h(m) + c * tin
5210                   t_window_h(k,m) = ( 1.0_wp - c ) * t_surf_window_h(m) + c * twin
5211                   t_green_h(k,m) = t_surf_wall_h(m)
5212                   swc_h(k,m) = 0.5_wp
5213                   swc_sat_h(k,m) = 0.95_wp
5214                   swc_res_h(k,m) = 0.05_wp
5215                   rootfr_h(k,m) = 0.1_wp
5216                   wilt_h(k,m) = 0.1_wp
5217                   fc_h(k,m) = 0.9_wp
5218               ENDDO
5219            ENDDO
5220!
5221!--         Vertical surfaces
5222            DO  l = 0, 3
5223               DO  m = 1, surf_usm_v(l)%ns
5224!
5225!--               Inner wall
5226                  tin = wall_inner_temperature
5227                  twin = window_inner_temperature
5228
5229                  DO k = nzb_wall, nzt_wall+1
5230                     c = REAL( k - nzb_wall, wp ) /                            &
5231                         REAL( nzt_wall + 1 - nzb_wall , wp )
5232                     t_wall_v(l)%t(k,m) = ( 1.0_wp - c ) * t_surf_wall_v(l)%t(m) + c * tin
5233                     t_window_v(l)%t(k,m) = ( 1.0_wp - c ) * t_surf_window_v(l)%t(m) + c * twin
5234                     t_green_v(l)%t(k,m) = t_surf_wall_v(l)%t(m)
5235                     swc_v(l)%t(k,m) = 0.5_wp
5236                  ENDDO
5237               ENDDO
5238            ENDDO
5239        ENDIF
5240
5241!
5242!--     If specified, replace constant wall temperatures with fully 3D values from file
5243        IF ( read_wall_temp_3d )  CALL usm_read_wall_temperature()
5244
5245!--
5246!--     Possibly DO user-defined actions (e.g. define heterogeneous wall surface)
5247        CALL user_init_urban_surface
5248
5249!
5250!--     initialize prognostic values for the first timestep
5251        t_surf_wall_h_p = t_surf_wall_h
5252        t_surf_wall_v_p = t_surf_wall_v
5253        t_surf_window_h_p = t_surf_window_h
5254        t_surf_window_v_p = t_surf_window_v
5255        t_surf_green_h_p = t_surf_green_h
5256        t_surf_green_v_p = t_surf_green_v
5257
5258        t_wall_h_p = t_wall_h
5259        t_wall_v_p = t_wall_v
5260        t_window_h_p = t_window_h
5261        t_window_v_p = t_window_v
5262        t_green_h_p = t_green_h
5263        t_green_v_p = t_green_v
5264
5265!
5266!--     Adjust radiative fluxes for urban surface at model start
5267        !CALL radiation_interaction
5268!--     TODO: interaction should be called once before first output,
5269!--     that is not yet possible.
5270       
5271        m_liq_usm_h_p     = m_liq_usm_h
5272        m_liq_usm_v_p     = m_liq_usm_v
5273!
5274!--    Set initial values for prognostic quantities
5275!--    Horizontal surfaces
5276       tm_liq_usm_h_m%var_usm_1d  = 0.0_wp
5277       surf_usm_h%c_liq = 0.0_wp
5278
5279       surf_usm_h%qsws_liq  = 0.0_wp
5280       surf_usm_h%qsws_veg  = 0.0_wp
5281
5282!
5283!--    Do the same for vertical surfaces
5284       DO  l = 0, 3
5285          tm_liq_usm_v_m(l)%var_usm_1d  = 0.0_wp
5286          surf_usm_v(l)%c_liq = 0.0_wp
5287
5288          surf_usm_v(l)%qsws_liq  = 0.0_wp
5289          surf_usm_v(l)%qsws_veg  = 0.0_wp
5290       ENDDO
5291
5292!
5293!--    Set initial values for prognostic soil quantities
5294       IF ( TRIM( initializing_actions ) /= 'read_restart_data' )  THEN
5295          m_liq_usm_h%var_usm_1d  = 0.0_wp
5296
5297          DO  l = 0, 3
5298             m_liq_usm_v(l)%var_usm_1d  = 0.0_wp
5299          ENDDO
5300       ENDIF
5301
5302        CALL cpu_log( log_point_s(78), 'usm_init', 'stop' )
5303
5304        IF ( debug_output )  CALL debug_message( 'usm_init', 'end' )
5305
5306    END SUBROUTINE usm_init
5307
5308
5309!------------------------------------------------------------------------------!
5310! Description:
5311! ------------
5312!
5313!> Wall model as part of the urban surface model. The model predicts vertical
5314!> and horizontal wall / roof temperatures and window layer temperatures.
5315!> No window layer temperature calculactions during spinup to increase
5316!> possible timestep.
5317!------------------------------------------------------------------------------!
5318    SUBROUTINE usm_material_heat_model( during_spinup )
5319
5320
5321        IMPLICIT NONE
5322
5323        INTEGER(iwp) ::  i,j,k,l,kw, m                      !< running indices
5324
5325        REAL(wp), DIMENSION(nzb_wall:nzt_wall) :: wtend, wintend  !< tendency
5326        REAL(wp)     :: win_absorp  !< absorption coefficient from transmissivity
5327        REAL(wp), DIMENSION(nzb_wall:nzt_wall) :: wall_mod
5328
5329        LOGICAL      :: during_spinup  !< if true, no calculation of window temperatures
5330
5331
5332        IF ( debug_output_timestep )  THEN
5333           WRITE( debug_string, * ) 'usm_material_heat_model | during_spinup: ',&
5334                                     during_spinup
5335           CALL debug_message( debug_string, 'start' )
5336        ENDIF
5337
5338        !$OMP PARALLEL PRIVATE (m, i, j, k, kw, wtend, wintend, win_absorp, wall_mod)
5339        wall_mod=1.0_wp
5340        IF ( usm_wall_mod  .AND.  during_spinup )  THEN
5341           DO  kw=nzb_wall,nzb_wall+1
5342               wall_mod(kw)=0.1_wp
5343           ENDDO
5344        ENDIF
5345
5346!
5347!--     For horizontal surfaces                                   
5348        !$OMP DO SCHEDULE (STATIC)
5349        DO  m = 1, surf_usm_h%ns
5350!
5351!--        Obtain indices
5352           i = surf_usm_h%i(m)           
5353           j = surf_usm_h%j(m)
5354           k = surf_usm_h%k(m)
5355!
5356!--        prognostic equation for ground/roof temperature t_wall_h
5357           wtend(:) = 0.0_wp
5358           wtend(nzb_wall) = (1.0_wp / surf_usm_h%rho_c_wall(nzb_wall,m)) *        &
5359                                       ( surf_usm_h%lambda_h(nzb_wall,m) * wall_mod(nzb_wall) *        &
5360                                         ( t_wall_h(nzb_wall+1,m)                  &
5361                                         - t_wall_h(nzb_wall,m) ) *                &
5362                                         surf_usm_h%ddz_wall(nzb_wall+1,m)         &
5363                                       + surf_usm_h%frac(ind_veg_wall,m)           &
5364                                         / (surf_usm_h%frac(ind_veg_wall,m)        &
5365                                           + surf_usm_h%frac(ind_pav_green,m) )    &
5366                                         * surf_usm_h%wghf_eb(m)                   &
5367                                       - surf_usm_h%frac(ind_pav_green,m)          &
5368                                          / (surf_usm_h%frac(ind_veg_wall,m)       &
5369                                            + surf_usm_h%frac(ind_pav_green,m) )   &
5370                                         * ( surf_usm_h%lambda_h_green(nzt_wall,m)* wall_mod(nzt_wall) &
5371                                           * surf_usm_h%ddz_green(nzt_wall,m)      &
5372                                           + surf_usm_h%lambda_h(nzb_wall,m) * wall_mod(nzb_wall)      &
5373                                           * surf_usm_h%ddz_wall(nzb_wall,m) )     &
5374                                         / ( surf_usm_h%ddz_green(nzt_wall,m)      &
5375                                           + surf_usm_h%ddz_wall(nzb_wall,m) )     &
5376                                         * ( t_wall_h(nzb_wall,m)                  &
5377                                           - t_green_h(nzt_wall,m) ) ) *           &
5378                                       surf_usm_h%ddz_wall_stag(nzb_wall,m)
5379!
5380!-- if indoor model is used inner wall layer is calculated by using iwghf (indoor wall ground heat flux)
5381           IF ( indoor_model ) THEN
5382              DO  kw = nzb_wall+1, nzt_wall-1
5383                  wtend(kw) = (1.0_wp / surf_usm_h%rho_c_wall(kw,m))              &
5384                                 * (   surf_usm_h%lambda_h(kw,m) * wall_mod(kw)   &
5385                                    * ( t_wall_h(kw+1,m) - t_wall_h(kw,m) )       &
5386                                    * surf_usm_h%ddz_wall(kw+1,m)                 &
5387                                 - surf_usm_h%lambda_h(kw-1,m) * wall_mod(kw-1)   &
5388                                    * ( t_wall_h(kw,m) - t_wall_h(kw-1,m) )       &
5389                                    * surf_usm_h%ddz_wall(kw,m)                   &
5390                                   ) * surf_usm_h%ddz_wall_stag(kw,m)
5391              ENDDO
5392              wtend(nzt_wall) = (1.0_wp / surf_usm_h%rho_c_wall(nzt_wall,m)) *    &
5393                                         ( -surf_usm_h%lambda_h(nzt_wall-1,m) * wall_mod(nzt_wall-1) * &
5394                                           ( t_wall_h(nzt_wall,m)                 &
5395                                           - t_wall_h(nzt_wall-1,m) ) *           &
5396                                           surf_usm_h%ddz_wall(nzt_wall,m)        &
5397                                         + surf_usm_h%iwghf_eb(m) ) *             &
5398                                           surf_usm_h%ddz_wall_stag(nzt_wall,m)
5399           ELSE
5400              DO  kw = nzb_wall+1, nzt_wall
5401                  wtend(kw) = (1.0_wp / surf_usm_h%rho_c_wall(kw,m))              &
5402                                 * (   surf_usm_h%lambda_h(kw,m)  * wall_mod(kw)  &
5403                                    * ( t_wall_h(kw+1,m) - t_wall_h(kw,m) )       &
5404                                    * surf_usm_h%ddz_wall(kw+1,m)                 &
5405                                 - surf_usm_h%lambda_h(kw-1,m) * wall_mod(kw-1)   &
5406                                    * ( t_wall_h(kw,m) - t_wall_h(kw-1,m) )       &
5407                                    * surf_usm_h%ddz_wall(kw,m)                   &
5408                                   ) * surf_usm_h%ddz_wall_stag(kw,m)
5409              ENDDO
5410           ENDIF
5411
5412           t_wall_h_p(nzb_wall:nzt_wall,m) = t_wall_h(nzb_wall:nzt_wall,m)     &
5413                                 + dt_3d * ( tsc(2)                            &
5414                                 * wtend(nzb_wall:nzt_wall) + tsc(3)           &
5415                                 * surf_usm_h%tt_wall_m(nzb_wall:nzt_wall,m) )   
5416
5417!
5418!-- during spinup the tempeature inside window layers is not calculated to make larger timesteps possible
5419           IF ( .NOT. during_spinup ) THEN
5420              win_absorp = -log(surf_usm_h%transmissivity(m)) / surf_usm_h%zw_window(nzt_wall,m)
5421!
5422!--           prognostic equation for ground/roof window temperature t_window_h
5423!--           takes absorption of shortwave radiation into account
5424              wintend(:) = 0.0_wp
5425              wintend(nzb_wall) = (1.0_wp / surf_usm_h%rho_c_window(nzb_wall,m)) *   &
5426                                         ( surf_usm_h%lambda_h_window(nzb_wall,m) *  &
5427                                           ( t_window_h(nzb_wall+1,m)                &
5428                                           - t_window_h(nzb_wall,m) ) *              &
5429                                           surf_usm_h%ddz_window(nzb_wall+1,m)       &
5430                                         + surf_usm_h%wghf_eb_window(m)              &
5431                                         + surf_usm_h%rad_sw_in(m)                   &
5432                                           * (1.0_wp - exp(-win_absorp               &
5433                                           * surf_usm_h%zw_window(nzb_wall,m) ) )    &
5434                                         ) * surf_usm_h%ddz_window_stag(nzb_wall,m)
5435   
5436              IF ( indoor_model ) THEN
5437                 DO  kw = nzb_wall+1, nzt_wall-1
5438                     wintend(kw) = (1.0_wp / surf_usm_h%rho_c_window(kw,m))          &
5439                                    * (   surf_usm_h%lambda_h_window(kw,m)           &
5440                                       * ( t_window_h(kw+1,m) - t_window_h(kw,m) )   &
5441                                       * surf_usm_h%ddz_window(kw+1,m)               &
5442                                    - surf_usm_h%lambda_h_window(kw-1,m)             &
5443                                       * ( t_window_h(kw,m) - t_window_h(kw-1,m) )   &
5444                                       * surf_usm_h%ddz_window(kw,m)                 &
5445                                    + surf_usm_h%rad_sw_in(m)                        &
5446                                       * (exp(-win_absorp                            &
5447                                           * surf_usm_h%zw_window(kw-1,m) )          &
5448                                           - exp(-win_absorp                         &
5449                                           * surf_usm_h%zw_window(kw,m) ) )          &
5450                                      ) * surf_usm_h%ddz_window_stag(kw,m)
5451   
5452                 ENDDO
5453                 wintend(nzt_wall) = (1.0_wp / surf_usm_h%rho_c_window(nzt_wall,m)) *       &
5454                                            ( -surf_usm_h%lambda_h_window(nzt_wall-1,m) *   &
5455                                              ( t_window_h(nzt_wall,m)                      &
5456                                              - t_window_h(nzt_wall-1,m) ) *                &
5457                                              surf_usm_h%ddz_window(nzt_wall,m)             &
5458                                            + surf_usm_h%iwghf_eb_window(m)                 &
5459                                            + surf_usm_h%rad_sw_in(m)                       &
5460                                              * (exp(-win_absorp                            &
5461                                              * surf_usm_h%zw_window(nzt_wall-1,m) )        &
5462                                              - exp(-win_absorp                             &
5463                                              * surf_usm_h%zw_window(nzt_wall,m) ) )        &
5464                                            ) * surf_usm_h%ddz_window_stag(nzt_wall,m)
5465              ELSE
5466                 DO  kw = nzb_wall+1, nzt_wall
5467                     wintend(kw) = (1.0_wp / surf_usm_h%rho_c_window(kw,m))          &
5468                                    * (   surf_usm_h%lambda_h_window(kw,m)           &
5469                                       * ( t_window_h(kw+1,m) - t_window_h(kw,m) )   &
5470                                       * surf_usm_h%ddz_window(kw+1,m)               &
5471                                    - surf_usm_h%lambda_h_window(kw-1,m)             &
5472                                       * ( t_window_h(kw,m) - t_window_h(kw-1,m) )   &
5473                                       * surf_usm_h%ddz_window(kw,m)                 &
5474                                    + surf_usm_h%rad_sw_in(m)                        &
5475                                       * (exp(-win_absorp                            &
5476                                           * surf_usm_h%zw_window(kw-1,m) )          &
5477                                           - exp(-win_absorp                         &
5478                                           * surf_usm_h%zw_window(kw,m) ) )          &
5479                                      ) * surf_usm_h%ddz_window_stag(kw,m)
5480   
5481                 ENDDO
5482              ENDIF
5483
5484              t_window_h_p(nzb_wall:nzt_wall,m) = t_window_h(nzb_wall:nzt_wall,m) &
5485                                 + dt_3d * ( tsc(2)                               &
5486                                 * wintend(nzb_wall:nzt_wall) + tsc(3)            &
5487                                 * surf_usm_h%tt_window_m(nzb_wall:nzt_wall,m) )   
5488
5489           ENDIF
5490
5491!
5492!--        calculate t_wall tendencies for the next Runge-Kutta step
5493           IF ( timestep_scheme(1:5) == 'runge' )  THEN
5494               IF ( intermediate_timestep_count == 1 )  THEN
5495                  DO  kw = nzb_wall, nzt_wall
5496                     surf_usm_h%tt_wall_m(kw,m) = wtend(kw)
5497                  ENDDO
5498               ELSEIF ( intermediate_timestep_count <                          &
5499                        intermediate_timestep_count_max )  THEN
5500                   DO  kw = nzb_wall, nzt_wall
5501                      surf_usm_h%tt_wall_m(kw,m) = -9.5625_wp * wtend(kw) +    &
5502                                         5.3125_wp * surf_usm_h%tt_wall_m(kw,m)
5503                   ENDDO
5504               ENDIF
5505           ENDIF
5506
5507           IF ( .NOT. during_spinup )  THEN
5508!
5509!--           calculate t_window tendencies for the next Runge-Kutta step
5510              IF ( timestep_scheme(1:5) == 'runge' )  THEN
5511                  IF ( intermediate_timestep_count == 1 )  THEN
5512                     DO  kw = nzb_wall, nzt_wall
5513                        surf_usm_h%tt_window_m(kw,m) = wintend(kw)
5514                     ENDDO
5515                  ELSEIF ( intermediate_timestep_count <                            &
5516                           intermediate_timestep_count_max )  THEN
5517                      DO  kw = nzb_wall, nzt_wall
5518                         surf_usm_h%tt_window_m(kw,m) = -9.5625_wp * wintend(kw) +  &
5519                                            5.3125_wp * surf_usm_h%tt_window_m(kw,m)
5520                      ENDDO
5521                  ENDIF
5522              ENDIF
5523           ENDIF
5524
5525        ENDDO
5526
5527!
5528!--     For vertical surfaces     
5529        !$OMP DO SCHEDULE (STATIC)
5530        DO  l = 0, 3                             
5531           DO  m = 1, surf_usm_v(l)%ns
5532!
5533!--           Obtain indices
5534              i = surf_usm_v(l)%i(m)           
5535              j = surf_usm_v(l)%j(m)
5536              k = surf_usm_v(l)%k(m)
5537!
5538!--           prognostic equation for wall temperature t_wall_v
5539              wtend(:) = 0.0_wp
5540
5541              wtend(nzb_wall) = (1.0_wp / surf_usm_v(l)%rho_c_wall(nzb_wall,m)) *    &
5542                                      ( surf_usm_v(l)%lambda_h(nzb_wall,m) * wall_mod(nzb_wall)  *      &
5543                                        ( t_wall_v(l)%t(nzb_wall+1,m)                &
5544                                        - t_wall_v(l)%t(nzb_wall,m) ) *              &
5545                                        surf_usm_v(l)%ddz_wall(nzb_wall+1,m)         &
5546                                      + surf_usm_v(l)%frac(ind_veg_wall,m)           &
5547                                        / (surf_usm_v(l)%frac(ind_veg_wall,m)        &
5548                                          + surf_usm_v(l)%frac(ind_pav_green,m) )    &
5549                                        * surf_usm_v(l)%wghf_eb(m)                   &
5550                                      - surf_usm_v(l)%frac(ind_pav_green,m)          &
5551                                        / (surf_usm_v(l)%frac(ind_veg_wall,m)        &
5552                                          + surf_usm_v(l)%frac(ind_pav_green,m) )    &
5553                                        * ( surf_usm_v(l)%lambda_h_green(nzt_wall,m)* wall_mod(nzt_wall) &
5554                                          * surf_usm_v(l)%ddz_green(nzt_wall,m)      &
5555                                          + surf_usm_v(l)%lambda_h(nzb_wall,m)* wall_mod(nzb_wall)       &
5556                                          * surf_usm_v(l)%ddz_wall(nzb_wall,m) )     &
5557                                        / ( surf_usm_v(l)%ddz_green(nzt_wall,m)      &
5558                                          + surf_usm_v(l)%ddz_wall(nzb_wall,m) )     &
5559                                        * ( t_wall_v(l)%t(nzb_wall,m)                &
5560                                          - t_green_v(l)%t(nzt_wall,m) ) ) *         &
5561                                        surf_usm_v(l)%ddz_wall_stag(nzb_wall,m)
5562
5563              IF ( indoor_model ) THEN
5564                 DO  kw = nzb_wall+1, nzt_wall-1
5565                     wtend(kw) = (1.0_wp / surf_usm_v(l)%rho_c_wall(kw,m))        &
5566                              * (   surf_usm_v(l)%lambda_h(kw,m)  * wall_mod(kw)  &
5567                                 * ( t_wall_v(l)%t(kw+1,m) - t_wall_v(l)%t(kw,m) )&
5568                                 * surf_usm_v(l)%ddz_wall(kw+1,m)                 &
5569                              - surf_usm_v(l)%lambda_h(kw-1,m)  * wall_mod(kw-1)  &
5570                                 * ( t_wall_v(l)%t(kw,m) - t_wall_v(l)%t(kw-1,m) )&
5571                                 * surf_usm_v(l)%ddz_wall(kw,m)                   &
5572                                 ) * surf_usm_v(l)%ddz_wall_stag(kw,m)
5573                 ENDDO
5574                 wtend(nzt_wall) = (1.0_wp / surf_usm_v(l)%rho_c_wall(nzt_wall,m)) * &
5575                                         ( -surf_usm_v(l)%lambda_h(nzt_wall-1,m) * wall_mod(nzt_wall-1)*    &
5576                                           ( t_wall_v(l)%t(nzt_wall,m)               &
5577                                           - t_wall_v(l)%t(nzt_wall-1,m) ) *         &
5578                                           surf_usm_v(l)%ddz_wall(nzt_wall,m)        &
5579                                         + surf_usm_v(l)%iwghf_eb(m) ) *             &
5580                                           surf_usm_v(l)%ddz_wall_stag(nzt_wall,m)
5581              ELSE
5582                 DO  kw = nzb_wall+1, nzt_wall
5583                     wtend(kw) = (1.0_wp / surf_usm_v(l)%rho_c_wall(kw,m))        &
5584                              * (   surf_usm_v(l)%lambda_h(kw,m) * wall_mod(kw)   &
5585                                 * ( t_wall_v(l)%t(kw+1,m) - t_wall_v(l)%t(kw,m) )&
5586                                 * surf_usm_v(l)%ddz_wall(kw+1,m)                 &
5587                              - surf_usm_v(l)%lambda_h(kw-1,m)  * wall_mod(kw-1)  &
5588                                 * ( t_wall_v(l)%t(kw,m) - t_wall_v(l)%t(kw-1,m) )&
5589                                 * surf_usm_v(l)%ddz_wall(kw,m)                   &
5590                                 ) * surf_usm_v(l)%ddz_wall_stag(kw,m)
5591                 ENDDO
5592              ENDIF
5593
5594              t_wall_v_p(l)%t(nzb_wall:nzt_wall,m) =                           &
5595                                   t_wall_v(l)%t(nzb_wall:nzt_wall,m)          &
5596                                 + dt_3d * ( tsc(2)                            &
5597                                 * wtend(nzb_wall:nzt_wall) + tsc(3)           &
5598                                 * surf_usm_v(l)%tt_wall_m(nzb_wall:nzt_wall,m) )   
5599
5600              IF ( .NOT. during_spinup )  THEN
5601                 win_absorp = -log(surf_usm_v(l)%transmissivity(m)) / surf_usm_v(l)%zw_window(nzt_wall,m)
5602!
5603!--              prognostic equation for window temperature t_window_v
5604                 wintend(:) = 0.0_wp
5605                 wintend(nzb_wall) = (1.0_wp / surf_usm_v(l)%rho_c_window(nzb_wall,m)) * &
5606                                         ( surf_usm_v(l)%lambda_h_window(nzb_wall,m) *   &
5607                                           ( t_window_v(l)%t(nzb_wall+1,m)               &
5608                                           - t_window_v(l)%t(nzb_wall,m) ) *             &
5609                                           surf_usm_v(l)%ddz_window(nzb_wall+1,m)        &
5610                                         + surf_usm_v(l)%wghf_eb_window(m)               &
5611                                         + surf_usm_v(l)%rad_sw_in(m)                    &
5612                                           * (1.0_wp - exp(-win_absorp                   &
5613                                           * surf_usm_v(l)%zw_window(nzb_wall,m) ) )     &
5614                                         ) * surf_usm_v(l)%ddz_window_stag(nzb_wall,m)
5615   
5616                 IF ( indoor_model ) THEN
5617                    DO  kw = nzb_wall+1, nzt_wall -1
5618                        wintend(kw) = (1.0_wp / surf_usm_v(l)%rho_c_window(kw,m))         &
5619                                 * (   surf_usm_v(l)%lambda_h_window(kw,m)                &
5620                                    * ( t_window_v(l)%t(kw+1,m) - t_window_v(l)%t(kw,m) ) &
5621                                    * surf_usm_v(l)%ddz_window(kw+1,m)                    &
5622                                 - surf_usm_v(l)%lambda_h_window(kw-1,m)                  &
5623                                    * ( t_window_v(l)%t(kw,m) - t_window_v(l)%t(kw-1,m) ) &
5624                                    * surf_usm_v(l)%ddz_window(kw,m)                      &
5625                                 + surf_usm_v(l)%rad_sw_in(m)                             &
5626                                    * (exp(-win_absorp                                    &
5627                                       * surf_usm_v(l)%zw_window(kw-1,m)       )          &
5628                                           - exp(-win_absorp                              &
5629                                           * surf_usm_v(l)%zw_window(kw,m) ) )            &
5630                                    ) * surf_usm_v(l)%ddz_window_stag(kw,m)
5631                     ENDDO
5632                     wintend(nzt_wall) = (1.0_wp / surf_usm_v(l)%rho_c_window(nzt_wall,m)) *  &
5633                                             ( -surf_usm_v(l)%lambda_h_window(nzt_wall-1,m) * &
5634                                               ( t_window_v(l)%t(nzt_wall,m)                  &
5635                                               - t_window_v(l)%t(nzt_wall-1,m) ) *            &
5636                                               surf_usm_v(l)%ddz_window(nzt_wall,m)           &
5637                                             + surf_usm_v(l)%iwghf_eb_window(m)               &
5638                                             + surf_usm_v(l)%rad_sw_in(m)                     &
5639                                               * (exp(-win_absorp                             &
5640                                             * surf_usm_v(l)%zw_window(nzt_wall-1,m) )        &
5641                                           - exp(-win_absorp                                  &
5642                                               * surf_usm_v(l)%zw_window(nzt_wall,m) ) )      &
5643                                             ) * surf_usm_v(l)%ddz_window_stag(nzt_wall,m)
5644                 ELSE
5645                    DO  kw = nzb_wall+1, nzt_wall
5646                        wintend(kw) = (1.0_wp / surf_usm_v(l)%rho_c_window(kw,m))         &
5647                                 * (   surf_usm_v(l)%lambda_h_window(kw,m)                &
5648                                    * ( t_window_v(l)%t(kw+1,m) - t_window_v(l)%t(kw,m) ) &
5649                                    * surf_usm_v(l)%ddz_window(kw+1,m)                    &
5650                                 - surf_usm_v(l)%lambda_h_window(kw-1,m)                  &
5651                                    * ( t_window_v(l)%t(kw,m) - t_window_v(l)%t(kw-1,m) ) &
5652                                    * surf_usm_v(l)%ddz_window(kw,m)                      &
5653                                 + surf_usm_v(l)%rad_sw_in(m)                             &
5654                                    * (exp(-win_absorp                                    &
5655                                       * surf_usm_v(l)%zw_window(kw-1,m)       )          &
5656                                           - exp(-win_absorp                              &
5657                                           * surf_usm_v(l)%zw_window(kw,m) ) )            &
5658                                    ) * surf_usm_v(l)%ddz_window_stag(kw,m)
5659                    ENDDO
5660                 ENDIF
5661   
5662                 t_window_v_p(l)%t(nzb_wall:nzt_wall,m) =                           &
5663                                      t_window_v(l)%t(nzb_wall:nzt_wall,m)          &
5664                                    + dt_3d * ( tsc(2)                              &
5665                                    * wintend(nzb_wall:nzt_wall) + tsc(3)           &
5666                                    * surf_usm_v(l)%tt_window_m(nzb_wall:nzt_wall,m) )   
5667              ENDIF
5668
5669!
5670!--           calculate t_wall tendencies for the next Runge-Kutta step
5671              IF ( timestep_scheme(1:5) == 'runge' )  THEN
5672                  IF ( intermediate_timestep_count == 1 )  THEN
5673                     DO  kw = nzb_wall, nzt_wall
5674                        surf_usm_v(l)%tt_wall_m(kw,m) = wtend(kw)
5675                     ENDDO
5676                  ELSEIF ( intermediate_timestep_count <                       &
5677                           intermediate_timestep_count_max )  THEN
5678                      DO  kw = nzb_wall, nzt_wall
5679                         surf_usm_v(l)%tt_wall_m(kw,m) =                       &
5680                                     - 9.5625_wp * wtend(kw) +                 &
5681                                       5.3125_wp * surf_usm_v(l)%tt_wall_m(kw,m)
5682                      ENDDO
5683                  ENDIF
5684              ENDIF
5685
5686
5687              IF ( .NOT. during_spinup )  THEN
5688!
5689!--              calculate t_window tendencies for the next Runge-Kutta step
5690                 IF ( timestep_scheme(1:5) == 'runge' )  THEN
5691                     IF ( intermediate_timestep_count == 1 )  THEN
5692                        DO  kw = nzb_wall, nzt_wall
5693                           surf_usm_v(l)%tt_window_m(kw,m) = wintend(kw)
5694                        ENDDO
5695                     ELSEIF ( intermediate_timestep_count <                       &
5696                              intermediate_timestep_count_max )  THEN
5697                         DO  kw = nzb_wall, nzt_wall
5698                            surf_usm_v(l)%tt_window_m(kw,m) =                     &
5699                                        - 9.5625_wp * wintend(kw) +               &
5700                                          5.3125_wp * surf_usm_v(l)%tt_window_m(kw,m)
5701                         ENDDO
5702                     ENDIF
5703                 ENDIF
5704              ENDIF
5705
5706           ENDDO
5707        ENDDO
5708        !$OMP END PARALLEL
5709
5710        IF ( debug_output_timestep )  THEN
5711           WRITE( debug_string, * ) 'usm_material_heat_model | during_spinup: ',&
5712                                    during_spinup
5713           CALL debug_message( debug_string, 'end' )
5714        ENDIF
5715
5716    END SUBROUTINE usm_material_heat_model
5717
5718!------------------------------------------------------------------------------!
5719! Description:
5720! ------------
5721!
5722!> Green and substrate model as part of the urban surface model. The model predicts ground
5723!> temperatures.
5724!>
5725!> Important: gree-heat model crashes due to unknown reason. Green fraction
5726!> is thus set to zero (in favor of wall fraction).
5727!------------------------------------------------------------------------------!
5728    SUBROUTINE usm_green_heat_model
5729
5730
5731        IMPLICIT NONE
5732
5733        INTEGER(iwp) ::  i,j,k,l,kw, m              !< running indices
5734
5735        REAL(wp)     :: ke, lambda_h_green_sat      !< heat conductivity for saturated soil
5736        REAL(wp)     :: h_vg                        !< Van Genuchten coef. h
5737        REAL(wp)     :: drho_l_lv                   !< frequently used parameter
5738
5739        REAL(wp), DIMENSION(nzb_wall:nzt_wall) :: gtend,tend  !< tendency
5740
5741        REAL(wp), DIMENSION(nzb_wall:nzt_wall) :: root_extr_green
5742
5743        REAL(wp), DIMENSION(nzb_wall:nzt_wall+1) :: lambda_green_temp  !< temp. lambda
5744        REAL(wp), DIMENSION(nzb_wall:nzt_wall+1) :: gamma_green_temp   !< temp. gamma
5745
5746        LOGICAL :: conserve_water_content = .true.
5747
5748
5749        IF ( debug_output_timestep )  CALL debug_message( 'usm_green_heat_model', 'start' )
5750
5751        drho_l_lv = 1.0_wp / (rho_l * l_v)
5752
5753!
5754!--     For horizontal surfaces.
5755!--     Set tendency array for soil moisture to zero
5756        IF ( surf_usm_h%ns > 0 )  THEN
5757           IF ( intermediate_timestep_count == 1 )  surf_usm_h%tswc_h_m = 0.0_wp
5758        ENDIF
5759       
5760        !$OMP PARALLEL PRIVATE (m, i, j, k, kw, lambda_h_green_sat, ke, lambda_green_temp, gtend,  &
5761        !$OMP&                  tend, h_vg, gamma_green_temp, m_total, root_extr_green)
5762        !$OMP DO SCHEDULE (STATIC)
5763        DO  m = 1, surf_usm_h%ns
5764           IF (surf_usm_h%frac(ind_pav_green,m) > 0.0_wp) THEN
5765!
5766!--           Obtain indices
5767              i = surf_usm_h%i(m)           
5768              j = surf_usm_h%j(m)
5769              k = surf_usm_h%k(m)
5770   
5771              DO  kw = nzb_wall, nzt_wall
5772!
5773!--              Calculate volumetric heat capacity of the soil, taking
5774!--              into account water content
5775                 surf_usm_h%rho_c_total_green(kw,m) = (surf_usm_h%rho_c_green(kw,m) * (1.0_wp - swc_sat_h(kw,m)) &
5776                                      + rho_c_water * swc_h(kw,m))
5777     
5778!
5779!--              Calculate soil heat conductivity at the center of the soil
5780!--              layers
5781                 lambda_h_green_sat = lambda_h_green_sm ** (1.0_wp - swc_sat_h(kw,m)) *    &
5782                                lambda_h_water ** swc_h(kw,m)
5783     
5784                 ke = 1.0_wp + LOG10(MAX(0.1_wp,swc_h(kw,m)             &
5785                      / swc_sat_h(kw,m)))
5786     
5787                 lambda_green_temp(kw) = ke * (lambda_h_green_sat - lambda_h_green_dry) +    &
5788                                  lambda_h_green_dry
5789   
5790              ENDDO
5791              lambda_green_temp(nzt_wall+1) = lambda_green_temp(nzt_wall)
5792   
5793   
5794!
5795!--           Calculate soil heat conductivity (lambda_h) at the _stag level
5796!--           using linear interpolation. For pavement surface, the
5797!--           true pavement depth is considered
5798              DO  kw = nzb_wall, nzt_wall
5799                surf_usm_h%lambda_h_green(kw,m) = ( lambda_green_temp(kw+1) + lambda_green_temp(kw) )  &
5800                                      * 0.5_wp
5801              ENDDO
5802
5803              t_green_h(nzt_wall+1,m) = t_wall_h(nzb_wall,m)
5804!
5805!--        prognostic equation for ground/roof temperature t_green_h
5806              gtend(:) = 0.0_wp
5807              gtend(nzb_wall) = (1.0_wp / surf_usm_h%rho_c_total_green(nzb_wall,m)) *    &
5808                                         ( surf_usm_h%lambda_h_green(nzb_wall,m) * &
5809                                           ( t_green_h(nzb_wall+1,m)               &
5810                                           - t_green_h(nzb_wall,m) ) *             &
5811                                           surf_usm_h%ddz_green(nzb_wall+1,m)      &
5812                                         + surf_usm_h%wghf_eb_green(m) ) *         &
5813                                           surf_usm_h%ddz_green_stag(nzb_wall,m)
5814             
5815               DO  kw = nzb_wall+1, nzt_wall
5816                   gtend(kw) = (1.0_wp / surf_usm_h%rho_c_total_green(kw,m))       &
5817                                  * (   surf_usm_h%lambda_h_green(kw,m)            &
5818                                     * ( t_green_h(kw+1,m) - t_green_h(kw,m) )     &
5819                                     * surf_usm_h%ddz_green(kw+1,m)                &
5820                                  - surf_usm_h%lambda_h_green(kw-1,m)              &
5821                                     * ( t_green_h(kw,m) - t_green_h(kw-1,m) )     &
5822                                     * surf_usm_h%ddz_green(kw,m)                  &
5823                                    ) * surf_usm_h%ddz_green_stag(kw,m)
5824               ENDDO
5825   
5826              t_green_h_p(nzb_wall:nzt_wall,m) = t_green_h(nzb_wall:nzt_wall,m)    &
5827                                    + dt_3d * ( tsc(2)                             &
5828                                    * gtend(nzb_wall:nzt_wall) + tsc(3)            &
5829                                    * surf_usm_h%tt_green_m(nzb_wall:nzt_wall,m) )   
5830   
5831             
5832!
5833!--        calculate t_green tendencies for the next Runge-Kutta step
5834              IF ( timestep_scheme(1:5) == 'runge' )  THEN
5835                  IF ( intermediate_timestep_count == 1 )  THEN
5836                     DO  kw = nzb_wall, nzt_wall
5837                        surf_usm_h%tt_green_m(kw,m) = gtend(kw)
5838                     ENDDO
5839                  ELSEIF ( intermediate_timestep_count <                           &
5840                           intermediate_timestep_count_max )  THEN
5841                      DO  kw = nzb_wall, nzt_wall
5842                         surf_usm_h%tt_green_m(kw,m) = -9.5625_wp * gtend(kw) +    &
5843                                            5.3125_wp * surf_usm_h%tt_green_m(kw,m)
5844                      ENDDO
5845                  ENDIF
5846              ENDIF
5847
5848              DO  kw = nzb_wall, nzt_wall
5849
5850!
5851!--              Calculate soil diffusivity at the center of the soil layers
5852                 lambda_green_temp(kw) = (- b_ch * surf_usm_h%gamma_w_green_sat(kw,m) * psi_sat       &
5853                                   / swc_sat_h(kw,m) ) * ( MAX( swc_h(kw,m),    &
5854                                   wilt_h(kw,m) ) / swc_sat_h(kw,m) )**(        &
5855                                   b_ch + 2.0_wp )
5856
5857!
5858!--              Parametrization of Van Genuchten
5859                 IF ( soil_type /= 7 )  THEN
5860!
5861!--                 Calculate the hydraulic conductivity after Van Genuchten
5862!--                 (1980)
5863                    h_vg = ( ( (swc_res_h(kw,m) - swc_sat_h(kw,m)) / ( swc_res_h(kw,m) -    &
5864                               MAX( swc_h(kw,m), wilt_h(kw,m) ) ) )**(      &
5865                               surf_usm_h%n_vg_green(m) / (surf_usm_h%n_vg_green(m) - 1.0_wp ) ) - 1.0_wp  &
5866                           )**( 1.0_wp / surf_usm_h%n_vg_green(m) ) / surf_usm_h%alpha_vg_green(m)
5867
5868
5869                    gamma_green_temp(kw) = surf_usm_h%gamma_w_green_sat(kw,m) * ( ( (1.0_wp +         &
5870                                    ( surf_usm_h%alpha_vg_green(m) * h_vg )**surf_usm_h%n_vg_green(m))**(  &
5871                                    1.0_wp - 1.0_wp / surf_usm_h%n_vg_green(m) ) - (        &
5872                                    surf_usm_h%alpha_vg_green(m) * h_vg )**( surf_usm_h%n_vg_green(m)      &
5873                                    - 1.0_wp) )**2 )                         &
5874                                    / ( ( 1.0_wp + ( surf_usm_h%alpha_vg_green(m) * h_vg    &
5875                                    )**surf_usm_h%n_vg_green(m) )**( ( 1.0_wp  - 1.0_wp     &
5876                                    / surf_usm_h%n_vg_green(m) ) *( surf_usm_h%l_vg_green(m) + 2.0_wp) ) )
5877
5878!
5879!--              Parametrization of Clapp & Hornberger
5880                 ELSE
5881                    gamma_green_temp(kw) = surf_usm_h%gamma_w_green_sat(kw,m) * ( swc_h(kw,m)       &
5882                                    / swc_sat_h(kw,m) )**(2.0_wp * b_ch + 3.0_wp)
5883                 ENDIF
5884
5885              ENDDO
5886
5887!
5888!--           Prognostic equation for soil moisture content. Only performed,
5889!--           when humidity is enabled in the atmosphere
5890              IF ( humidity )  THEN
5891!
5892!--              Calculate soil diffusivity (lambda_w) at the _stag level
5893!--              using linear interpolation. To do: replace this with
5894!--              ECMWF-IFS Eq. 8.81
5895                 DO  kw = nzb_wall, nzt_wall-1
5896                   
5897                    surf_usm_h%lambda_w_green(kw,m) = ( lambda_green_temp(kw+1) + lambda_green_temp(kw) )  &
5898                                      * 0.5_wp
5899                    surf_usm_h%gamma_w_green(kw,m)  = ( gamma_green_temp(kw+1) + gamma_green_temp(kw) )    &
5900                                      * 0.5_wp
5901
5902                 ENDDO
5903
5904!
5905!--              In case of a closed bottom (= water content is conserved),
5906!--              set hydraulic conductivity to zero to that no water will be
5907!--              lost in the bottom layer.
5908                 IF ( conserve_water_content )  THEN
5909                    surf_usm_h%gamma_w_green(kw,m) = 0.0_wp
5910                 ELSE
5911                    surf_usm_h%gamma_w_green(kw,m) = gamma_green_temp(nzt_wall)
5912                 ENDIF     
5913
5914!--              The root extraction (= root_extr * qsws_veg / (rho_l     
5915!--              * l_v)) ensures the mass conservation for water. The         
5916!--              transpiration of plants equals the cumulative withdrawals by
5917!--              the roots in the soil. The scheme takes into account the
5918!--              availability of water in the soil layers as well as the root
5919!--              fraction in the respective layer. Layer with moisture below
5920!--              wilting point will not contribute, which reflects the
5921!--              preference of plants to take water from moister layers.
5922
5923!
5924!--              Calculate the root extraction (ECMWF 7.69, the sum of
5925!--              root_extr = 1). The energy balance solver guarantees a
5926!--              positive transpiration, so that there is no need for an
5927!--              additional check.
5928                 m_total = 0.0_wp
5929                 DO  kw = nzb_wall, nzt_wall
5930                     IF ( swc_h(kw,m) > wilt_h(kw,m) )  THEN
5931                        m_total = m_total + rootfr_h(kw,m) * swc_h(kw,m)
5932                     ENDIF
5933                 ENDDO 
5934
5935                 IF ( m_total > 0.0_wp )  THEN
5936                    DO  kw = nzb_wall, nzt_wall
5937                       IF ( swc_h(kw,m) > wilt_h(kw,m) )  THEN
5938                          root_extr_green(kw) = rootfr_h(kw,m) * swc_h(kw,m)      &
5939                                                          / m_total
5940                       ELSE
5941                          root_extr_green(kw) = 0.0_wp
5942                       ENDIF
5943                    ENDDO
5944                 ENDIF
5945
5946!
5947!--              Prognostic equation for soil water content m_soil.
5948                 tend(:) = 0.0_wp
5949
5950                 tend(nzb_wall) = ( surf_usm_h%lambda_w_green(nzb_wall,m) * (            &
5951                          swc_h(nzb_wall+1,m) - swc_h(nzb_wall,m) )    &
5952                          * surf_usm_h%ddz_green(nzb_wall+1,m) - surf_usm_h%gamma_w_green(nzb_wall,m) - ( &
5953                             root_extr_green(nzb_wall) * surf_usm_h%qsws_veg(m)          &
5954!                                + surf_usm_h%qsws_soil_green(m)
5955                                ) * drho_l_lv )             &
5956                               * surf_usm_h%ddz_green_stag(nzb_wall,m)
5957
5958                 DO  kw = nzb_wall+1, nzt_wall-1
5959                    tend(kw) = ( surf_usm_h%lambda_w_green(kw,m) * ( swc_h(kw+1,m)        &
5960                              - swc_h(kw,m) ) * surf_usm_h%ddz_green(kw+1,m)              &
5961                              - surf_usm_h%gamma_w_green(kw,m)                            &
5962                              - surf_usm_h%lambda_w_green(kw-1,m) * (swc_h(kw,m) -        &
5963                              swc_h(kw-1,m)) * surf_usm_h%ddz_green(kw,m)                 &
5964                              + surf_usm_h%gamma_w_green(kw-1,m) - (root_extr_green(kw)   &
5965                              * surf_usm_h%qsws_veg(m) * drho_l_lv)                       &
5966                              ) * surf_usm_h%ddz_green_stag(kw,m)
5967
5968                 ENDDO
5969                 tend(nzt_wall) = ( - surf_usm_h%gamma_w_green(nzt_wall,m)                  &
5970                                         - surf_usm_h%lambda_w_green(nzt_wall-1,m)          &
5971                                         * (swc_h(nzt_wall,m)             &
5972                                         - swc_h(nzt_wall-1,m))           &
5973                                         * surf_usm_h%ddz_green(nzt_wall,m)                 &
5974                                         + surf_usm_h%gamma_w_green(nzt_wall-1,m) - (       &
5975                                           root_extr_green(nzt_wall)               &
5976                                         * surf_usm_h%qsws_veg(m) * drho_l_lv  )   &
5977                                   ) * surf_usm_h%ddz_green_stag(nzt_wall,m)             
5978
5979                 swc_h_p(nzb_wall:nzt_wall,m) = swc_h(nzb_wall:nzt_wall,m)&
5980                                                 + dt_3d * ( tsc(2) * tend(:)   &
5981                                                 + tsc(3) * surf_usm_h%tswc_h_m(:,m) )   
5982 
5983!
5984!--              Account for dry soils (find a better solution here!)
5985                 DO  kw = nzb_wall, nzt_wall
5986                    IF ( swc_h_p(kw,m) < 0.0_wp )  swc_h_p(kw,m) = 0.0_wp
5987                 ENDDO
5988
5989!
5990!--              Calculate m_soil tendencies for the next Runge-Kutta step
5991                 IF ( timestep_scheme(1:5) == 'runge' )  THEN
5992                    IF ( intermediate_timestep_count == 1 )  THEN
5993                       DO  kw = nzb_wall, nzt_wall
5994                          surf_usm_h%tswc_h_m(kw,m) = tend(kw)
5995                       ENDDO
5996                    ELSEIF ( intermediate_timestep_count <                   &
5997                             intermediate_timestep_count_max )  THEN
5998                       DO  kw = nzb_wall, nzt_wall
5999                          surf_usm_h%tswc_h_m(kw,m) = -9.5625_wp * tend(kw) + 5.3125_wp&
6000                                   * surf_usm_h%tswc_h_m(kw,m)
6001                       ENDDO
6002                    ENDIF
6003                 ENDIF
6004              ENDIF
6005
6006           ENDIF
6007           
6008        ENDDO
6009        !$OMP END PARALLEL
6010
6011!
6012!--     For vertical surfaces     
6013        DO  l = 0, 3                             
6014           DO  m = 1, surf_usm_v(l)%ns
6015
6016              IF (surf_usm_v(l)%frac(ind_pav_green,m) > 0.0_wp) THEN
6017!
6018!-- no substrate layer for green walls / only groundbase green walls (ivy i.e.) -> green layers get same
6019!-- temperature as first wall layer
6020!-- there fore no temperature calculations for vertical green substrate layers now
6021
6022!
6023! !
6024! !--              Obtain indices
6025!                  i = surf_usm_v(l)%i(m)           
6026!                  j = surf_usm_v(l)%j(m)
6027!                  k = surf_usm_v(l)%k(m)
6028!   
6029!                  t_green_v(l)%t(nzt_wall+1,m) = t_wall_v(l)%t(nzb_wall,m)
6030! !
6031! !--              prognostic equation for green temperature t_green_v
6032!                  gtend(:) = 0.0_wp
6033!                  gtend(nzb_wall) = (1.0_wp / surf_usm_v(l)%rho_c_green(nzb_wall,m)) * &
6034!                                          ( surf_usm_v(l)%lambda_h_green(nzb_wall,m) * &
6035!                                            ( t_green_v(l)%t(nzb_wall+1,m)             &
6036!                                            - t_green_v(l)%t(nzb_wall,m) ) *           &
6037!                                            surf_usm_v(l)%ddz_green(nzb_wall+1,m)      &
6038!                                          + surf_usm_v(l)%wghf_eb(m) ) *               &
6039!                                            surf_usm_v(l)%ddz_green_stag(nzb_wall,m)
6040!               
6041!                  DO  kw = nzb_wall+1, nzt_wall
6042!                     gtend(kw) = (1.0_wp / surf_usm_v(l)%rho_c_green(kw,m))          &
6043!                               * (   surf_usm_v(l)%lambda_h_green(kw,m)              &
6044!                                 * ( t_green_v(l)%t(kw+1,m) - t_green_v(l)%t(kw,m) ) &
6045!                                 * surf_usm_v(l)%ddz_green(kw+1,m)                   &
6046!                               - surf_usm_v(l)%lambda_h(kw-1,m)                      &
6047!                                 * ( t_green_v(l)%t(kw,m) - t_green_v(l)%t(kw-1,m) ) &
6048!                                 * surf_usm_v(l)%ddz_green(kw,m) )                   &
6049!                               * surf_usm_v(l)%ddz_green_stag(kw,m)
6050!                  ENDDO
6051!   
6052!                  t_green_v_p(l)%t(nzb_wall:nzt_wall,m) =                              &
6053!                                       t_green_v(l)%t(nzb_wall:nzt_wall,m)             &
6054!                                     + dt_3d * ( tsc(2)                                &
6055!                                     * gtend(nzb_wall:nzt_wall) + tsc(3)               &
6056!                                     * surf_usm_v(l)%tt_green_m(nzb_wall:nzt_wall,m) )   
6057!   
6058! !
6059! !--              calculate t_green tendencies for the next Runge-Kutta step
6060!                  IF ( timestep_scheme(1:5) == 'runge' )  THEN
6061!                      IF ( intermediate_timestep_count == 1 )  THEN
6062!                         DO  kw = nzb_wall, nzt_wall
6063!                            surf_usm_v(l)%tt_green_m(kw,m) = gtend(kw)
6064!                         ENDDO
6065!                      ELSEIF ( intermediate_timestep_count <                           &
6066!                               intermediate_timestep_count_max )  THEN
6067!                          DO  kw = nzb_wall, nzt_wall
6068!                             surf_usm_v(l)%tt_green_m(kw,m) =                          &
6069!                                         - 9.5625_wp * gtend(kw) +                     &
6070!                                           5.3125_wp * surf_usm_v(l)%tt_green_m(kw,m)
6071!                          ENDDO
6072!                      ENDIF
6073!                  ENDIF
6074
6075                 DO  kw = nzb_wall, nzt_wall+1
6076                     t_green_v(l)%t(kw,m) = t_wall_v(l)%t(nzb_wall,m)
6077                 ENDDO
6078             
6079              ENDIF
6080
6081           ENDDO
6082        ENDDO
6083
6084        IF ( debug_output_timestep )  CALL debug_message( 'usm_green_heat_model', 'end' )
6085
6086    END SUBROUTINE usm_green_heat_model
6087
6088!------------------------------------------------------------------------------!
6089! Description:
6090! ------------
6091!> Parin for &usm_par for urban surface model
6092!------------------------------------------------------------------------------!
6093    SUBROUTINE usm_parin
6094
6095       IMPLICIT NONE
6096
6097       CHARACTER (LEN=80) ::  line  !< string containing current line of file PARIN
6098
6099       NAMELIST /urban_surface_par/                                            &
6100                           building_type,                                      &
6101                           land_category,                                      &
6102                           naheatlayers,                                       &
6103                           pedestrian_category,                                &
6104                           roughness_concrete,                                 &
6105                           read_wall_temp_3d,                                  &
6106                           roof_category,                                      &
6107                           urban_surface,                                      &
6108                           usm_anthropogenic_heat,                             &
6109                           usm_material_model,                                 &
6110                           wall_category,                                      &
6111                           wall_inner_temperature,                             &
6112                           roof_inner_temperature,                             &
6113                           soil_inner_temperature,                             &
6114                           window_inner_temperature,                           &
6115                           usm_wall_mod
6116
6117       NAMELIST /urban_surface_parameters/                                     &
6118                           building_type,                                      &
6119                           land_category,                                      &
6120                           naheatlayers,                                       &
6121                           pedestrian_category,                                &
6122                           roughness_concrete,                                 &
6123                           read_wall_temp_3d,                                  &
6124                           roof_category,                                      &
6125                           urban_surface,                                      &
6126                           usm_anthropogenic_heat,                             &
6127                           usm_material_model,                                 &
6128                           wall_category,                                      &
6129                           wall_inner_temperature,                             &
6130                           roof_inner_temperature,                             &
6131                           soil_inner_temperature,                             &
6132                           window_inner_temperature,                           &
6133                           usm_wall_mod
6134                           
6135 
6136!
6137!--    Try to find urban surface model package
6138       REWIND ( 11 )
6139       line = ' '
6140       DO WHILE ( INDEX( line, '&urban_surface_parameters' ) == 0 )
6141          READ ( 11, '(A)', END=12 )  line
6142       ENDDO
6143       BACKSPACE ( 11 )
6144
6145!
6146!--    Read user-defined namelist
6147       READ ( 11, urban_surface_parameters, ERR = 10 )
6148
6149!
6150!--    Set flag that indicates that the urban surface model is switched on
6151       urban_surface = .TRUE.
6152
6153       GOTO 14
6154
6155 10    BACKSPACE( 11 )
6156       READ( 11 , '(A)') line
6157       CALL parin_fail_message( 'urban_surface_parameters', line )
6158!
6159!--    Try to find old namelist
6160 12    REWIND ( 11 )
6161       line = ' '
6162       DO WHILE ( INDEX( line, '&urban_surface_par' ) == 0 )
6163          READ ( 11, '(A)', END=14 )  line
6164       ENDDO
6165       BACKSPACE ( 11 )
6166
6167!
6168!--    Read user-defined namelist
6169       READ ( 11, urban_surface_par, ERR = 13, END = 14 )
6170
6171       message_string = 'namelist urban_surface_par is deprecated and will be ' // &
6172                     'removed in near future. Please use namelist ' //   &
6173                     'urban_surface_parameters instead'
6174       CALL message( 'usm_parin', 'PA0487', 0, 1, 0, 6, 0 )
6175
6176!
6177!--    Set flag that indicates that the urban surface model is switched on
6178       urban_surface = .TRUE.
6179
6180       GOTO 14
6181
6182 13    BACKSPACE( 11 )
6183       READ( 11 , '(A)') line
6184       CALL parin_fail_message( 'urban_surface_par', line )
6185
6186
6187 14    CONTINUE
6188
6189
6190    END SUBROUTINE usm_parin
6191
6192 
6193!------------------------------------------------------------------------------!
6194! Description:
6195! ------------
6196!
6197!> This subroutine is part of the urban surface model.
6198!> It reads daily heat produced by anthropogenic sources
6199!> and the diurnal cycle of the heat.
6200!------------------------------------------------------------------------------!
6201    SUBROUTINE usm_read_anthropogenic_heat
6202   
6203        INTEGER(iwp)                  :: i,j,k,ii  !< running indices
6204        REAL(wp)                      :: heat      !< anthropogenic heat
6205
6206!
6207!--     allocation of array of sources of anthropogenic heat and their diural profile
6208        ALLOCATE( aheat(naheatlayers,nys:nyn,nxl:nxr) )
6209        ALLOCATE( aheatprof(naheatlayers,0:24) )
6210
6211!
6212!--     read daily amount of heat and its daily cycle
6213        aheat = 0.0_wp
6214        DO  ii = 0, io_blocks-1
6215            IF ( ii == io_group )  THEN
6216
6217!--             open anthropogenic heat file
6218                OPEN( 151, file='ANTHROPOGENIC_HEAT'//TRIM(coupling_char), action='read', &
6219                           status='old', form='formatted', err=11 )
6220                i = 0
6221                j = 0
6222                DO
6223                    READ( 151, *, err=12, end=13 )  i, j, k, heat
6224                    IF ( i >= nxl  .AND.  i <= nxr  .AND.  j >= nys  .AND.  j <= nyn )  THEN
6225                        IF ( k <= naheatlayers  .AND.  k > topo_top_ind(j,i,0) )  THEN
6226!--                         write heat into the array
6227                            aheat(k,j,i) = heat
6228                        ENDIF
6229                    ENDIF
6230                    CYCLE
6231 12                 WRITE(message_string,'(a,2i4)') 'error in file ANTHROPOGENIC_HEAT'//TRIM(coupling_char)//' after line ',i,j
6232                    CALL message( 'usm_read_anthropogenic_heat', 'PA0515', 0, 1, 0, 6, 0 )
6233                ENDDO
6234 13             CLOSE(151)
6235                CYCLE
6236 11             message_string = 'file ANTHROPOGENIC_HEAT'//TRIM(coupling_char)//' does not exist'
6237                CALL message( 'usm_read_anthropogenic_heat', 'PA0516', 1, 2, 0, 6, 0 )
6238            ENDIF
6239           
6240#if defined( __parallel )
6241            CALL MPI_BARRIER( comm2d, ierr )
6242#endif
6243        ENDDO
6244       
6245!
6246!--     read diurnal profiles of heat sources
6247        aheatprof = 0.0_wp
6248        DO  ii = 0, io_blocks-1
6249            IF ( ii == io_group )  THEN
6250!
6251!--             open anthropogenic heat profile file
6252                OPEN( 151, file='ANTHROPOGENIC_HEAT_PROFILE'//TRIM(coupling_char), action='read', &
6253                           status='old', form='formatted', err=21 )
6254                i = 0
6255                DO
6256                    READ( 151, *, err=22, end=23 )  i, k, heat
6257                    IF ( i >= 0  .AND.  i <= 24  .AND.  k <= naheatlayers )  THEN
6258!--                     write heat into the array
6259                        aheatprof(k,i) = heat
6260                    ENDIF
6261                    CYCLE
6262 22                 WRITE(message_string,'(a,i4)') 'error in file ANTHROPOGENIC_HEAT_PROFILE'// &
6263                                                     TRIM(coupling_char)//' after line ',i
6264                    CALL message( 'usm_read_anthropogenic_heat', 'PA0517', 0, 1, 0, 6, 0 )
6265                ENDDO
6266                aheatprof(:,24) = aheatprof(:,0)
6267 23             CLOSE(151)
6268                CYCLE
6269 21             message_string = 'file ANTHROPOGENIC_HEAT_PROFILE'//TRIM(coupling_char)//' does not exist'
6270                CALL message( 'usm_read_anthropogenic_heat', 'PA0518', 1, 2, 0, 6, 0 )
6271            ENDIF
6272           
6273#if defined( __parallel )
6274            CALL MPI_BARRIER( comm2d, ierr )
6275#endif
6276        ENDDO
6277       
6278    END SUBROUTINE usm_read_anthropogenic_heat
6279   
6280
6281!------------------------------------------------------------------------------!
6282! Description:
6283! ------------
6284!> Soubroutine reads t_surf and t_wall data from restart files
6285!------------------------------------------------------------------------------!
6286    SUBROUTINE usm_rrd_local( k, nxlf, nxlc, nxl_on_file, nxrf, nxr_on_file, nynf, nyn_on_file,    &
6287                              nysf, nysc, nys_on_file, found )
6288
6289
6290       USE control_parameters,                                                 &
6291           ONLY: length, restart_string
6292           
6293       IMPLICIT NONE
6294
6295       INTEGER(iwp)       ::  k                 !< running index over previous input files covering current local domain
6296       INTEGER(iwp)       ::  l                 !< index variable for surface type
6297       INTEGER(iwp)       ::  ns_h_on_file_usm  !< number of horizontal surface elements (urban type) on file
6298       INTEGER(iwp)       ::  nxlc              !< index of left boundary on current subdomain
6299       INTEGER(iwp)       ::  nxlf              !< index of left boundary on former subdomain
6300       INTEGER(iwp)       ::  nxl_on_file       !< index of left boundary on former local domain
6301       INTEGER(iwp)       ::  nxrf              !< index of right boundary on former subdomain
6302       INTEGER(iwp)       ::  nxr_on_file       !< index of right boundary on former local domain
6303       INTEGER(iwp)       ::  nynf              !< index of north boundary on former subdomain
6304       INTEGER(iwp)       ::  nyn_on_file       !< index of north boundary on former local domain
6305       INTEGER(iwp)       ::  nysc              !< index of south boundary on current subdomain
6306       INTEGER(iwp)       ::  nysf              !< index of south boundary on former subdomain
6307       INTEGER(iwp)       ::  nys_on_file       !< index of south boundary on former local domain
6308       
6309       INTEGER(iwp)       ::  ns_v_on_file_usm(0:3)  !< number of vertical surface elements (urban type) on file
6310       
6311       INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  start_index_on_file 
6312       INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  end_index_on_file
6313
6314       LOGICAL, INTENT(OUT)  ::  found 
6315!!!    suehring: Why the SAVE attribute?       
6316       REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE   ::  tmp_surf_wall_h
6317       REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE   ::  tmp_surf_window_h
6318       REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE   ::  tmp_surf_green_h
6319       REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE   ::  tmp_surf_waste_h
6320       
6321       REAL(wp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  tmp_wall_h
6322       REAL(wp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  tmp_window_h
6323       REAL(wp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  tmp_green_h
6324       
6325       TYPE( t_surf_vertical ), DIMENSION(0:3), SAVE ::  tmp_surf_wall_v
6326       TYPE( t_surf_vertical ), DIMENSION(0:3), SAVE ::  tmp_surf_window_v
6327       TYPE( t_surf_vertical ), DIMENSION(0:3), SAVE ::  tmp_surf_green_v
6328       TYPE( t_surf_vertical ), DIMENSION(0:3), SAVE ::  tmp_surf_waste_v
6329       
6330       TYPE( t_wall_vertical ), DIMENSION(0:3), SAVE ::  tmp_wall_v
6331       TYPE( t_wall_vertical ), DIMENSION(0:3), SAVE ::  tmp_window_v
6332       TYPE( t_wall_vertical ), DIMENSION(0:3), SAVE ::  tmp_green_v
6333
6334
6335       found = .TRUE.
6336
6337
6338          SELECT CASE ( restart_string(1:length) ) 
6339
6340             CASE ( 'ns_h_on_file_usm') 
6341                IF ( k == 1 )  THEN
6342                   READ ( 13 ) ns_h_on_file_usm
6343               
6344                   IF ( ALLOCATED( tmp_surf_wall_h ) ) DEALLOCATE( tmp_surf_wall_h )
6345                   IF ( ALLOCATED( tmp_wall_h ) ) DEALLOCATE( tmp_wall_h ) 
6346                   IF ( ALLOCATED( tmp_surf_window_h ) )                       &
6347                      DEALLOCATE( tmp_surf_window_h ) 
6348                   IF ( ALLOCATED( tmp_window_h) ) DEALLOCATE( tmp_window_h ) 
6349                   IF ( ALLOCATED( tmp_surf_green_h) )                         &
6350                      DEALLOCATE( tmp_surf_green_h ) 
6351                   IF ( ALLOCATED( tmp_green_h) ) DEALLOCATE( tmp_green_h )
6352                   IF ( ALLOCATED( tmp_surf_waste_h) )                         &
6353                      DEALLOCATE( tmp_surf_waste_h )
6354 
6355!
6356!--                Allocate temporary arrays for reading data on file. Note,
6357!--                the size of allocated surface elements do not necessarily
6358!--                need  to match the size of present surface elements on
6359!--                current processor, as the number of processors between
6360!--                restarts can change.
6361                   ALLOCATE( tmp_surf_wall_h(1:ns_h_on_file_usm) )
6362                   ALLOCATE( tmp_wall_h(nzb_wall:nzt_wall+1,                   &
6363                                        1:ns_h_on_file_usm) )
6364                   ALLOCATE( tmp_surf_window_h(1:ns_h_on_file_usm) )
6365                   ALLOCATE( tmp_window_h(nzb_wall:nzt_wall+1,                 &
6366                                          1:ns_h_on_file_usm) )
6367                   ALLOCATE( tmp_surf_green_h(1:ns_h_on_file_usm) )
6368                   ALLOCATE( tmp_green_h(nzb_wall:nzt_wall+1,                  &
6369                                         1:ns_h_on_file_usm) )
6370                   ALLOCATE( tmp_surf_waste_h(1:ns_h_on_file_usm) )
6371
6372                ENDIF
6373
6374             CASE ( 'ns_v_on_file_usm')
6375                IF ( k == 1 )  THEN
6376                   READ ( 13 ) ns_v_on_file_usm 
6377
6378                   DO  l = 0, 3
6379                      IF ( ALLOCATED( tmp_surf_wall_v(l)%t ) )                 &
6380                         DEALLOCATE( tmp_surf_wall_v(l)%t )
6381                      IF ( ALLOCATED( tmp_wall_v(l)%t ) )                      &
6382                         DEALLOCATE( tmp_wall_v(l)%t )
6383                      IF ( ALLOCATED( tmp_surf_window_v(l)%t ) )               & 
6384                         DEALLOCATE( tmp_surf_window_v(l)%t )
6385                      IF ( ALLOCATED( tmp_window_v(l)%t ) )                    &
6386                         DEALLOCATE( tmp_window_v(l)%t )
6387                      IF ( ALLOCATED( tmp_surf_green_v(l)%t ) )                &
6388                         DEALLOCATE( tmp_surf_green_v(l)%t )
6389                      IF ( ALLOCATED( tmp_green_v(l)%t ) )                     &
6390                         DEALLOCATE( tmp_green_v(l)%t )
6391                      IF ( ALLOCATED( tmp_surf_waste_v(l)%t ) )                &
6392                         DEALLOCATE( tmp_surf_waste_v(l)%t )
6393                   ENDDO 
6394
6395!
6396!--                Allocate temporary arrays for reading data on file. Note,
6397!--                the size of allocated surface elements do not necessarily
6398!--                need to match the size of present surface elements on
6399!--                current processor, as the number of processors between
6400!--                restarts can change.
6401                   DO  l = 0, 3
6402                      ALLOCATE( tmp_surf_wall_v(l)%t(1:ns_v_on_file_usm(l)) )
6403                      ALLOCATE( tmp_wall_v(l)%t(nzb_wall:nzt_wall+1,           &
6404                                                1:ns_v_on_file_usm(l) ) )
6405                      ALLOCATE( tmp_surf_window_v(l)%t(1:ns_v_on_file_usm(l)) )
6406                      ALLOCATE( tmp_window_v(l)%t(nzb_wall:nzt_wall+1,         & 
6407                                                  1:ns_v_on_file_usm(l) ) )
6408                      ALLOCATE( tmp_surf_green_v(l)%t(1:ns_v_on_file_usm(l)) )
6409                      ALLOCATE( tmp_green_v(l)%t(nzb_wall:nzt_wall+1,          &
6410                                                 1:ns_v_on_file_usm(l) ) )
6411                      ALLOCATE( tmp_surf_waste_v(l)%t(1:ns_v_on_file_usm(l)) )
6412                   ENDDO
6413
6414                ENDIF   
6415         
6416             CASE ( 'usm_start_index_h', 'usm_start_index_v'  )   
6417                IF ( k == 1 )  THEN
6418
6419                   IF ( ALLOCATED( start_index_on_file ) )                     &
6420                      DEALLOCATE( start_index_on_file )
6421
6422                   ALLOCATE ( start_index_on_file(nys_on_file:nyn_on_file,     &
6423                                                  nxl_on_file:nxr_on_file) )
6424
6425                   READ ( 13 )  start_index_on_file
6426
6427                ENDIF
6428               
6429             CASE ( 'usm_end_index_h', 'usm_end_index_v' )   
6430                IF ( k == 1 )  THEN
6431
6432                   IF ( ALLOCATED( end_index_on_file ) )                       &
6433                      DEALLOCATE( end_index_on_file )
6434
6435                   ALLOCATE ( end_index_on_file(nys_on_file:nyn_on_file,       &
6436                                                nxl_on_file:nxr_on_file) )
6437
6438                   READ ( 13 )  end_index_on_file
6439
6440                ENDIF
6441         
6442             CASE ( 't_surf_wall_h' )
6443                IF ( k == 1 )  THEN
6444                   IF ( .NOT.  ALLOCATED( t_surf_wall_h_1 ) )                  &
6445                      ALLOCATE( t_surf_wall_h_1(1:surf_usm_h%ns) )
6446                   READ ( 13 )  tmp_surf_wall_h
6447                ENDIF             
6448                CALL surface_restore_elements(                                 &
6449                                        t_surf_wall_h_1, tmp_surf_wall_h,      &
6450                                        surf_usm_h%start_index,                &
6451                                        start_index_on_file,                   &
6452                                        end_index_on_file,                     &
6453                                        nxlc, nysc,                            &
6454                                        nxlf, nxrf, nysf, nynf,                &
6455                                        nys_on_file, nyn_on_file,              &
6456                                        nxl_on_file,nxr_on_file )
6457
6458             CASE ( 't_surf_wall_v(0)' )
6459                IF ( k == 1 )  THEN
6460                   IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(0)%t ) )             &
6461                      ALLOCATE( t_surf_wall_v_1(0)%t(1:surf_usm_v(0)%ns) )
6462                   READ ( 13 )  tmp_surf_wall_v(0)%t
6463                ENDIF
6464                CALL surface_restore_elements(                                 &
6465                                        t_surf_wall_v_1(0)%t, tmp_surf_wall_v(0)%t,      &
6466                                        surf_usm_v(0)%start_index,             & 
6467                                        start_index_on_file,                   &
6468                                        end_index_on_file,                     &
6469                                        nxlc, nysc,                            &
6470                                        nxlf, nxrf, nysf, nynf,                &
6471                                        nys_on_file, nyn_on_file,              &
6472                                        nxl_on_file,nxr_on_file )
6473                     
6474             CASE ( 't_surf_wall_v(1)' )
6475                IF ( k == 1 )  THEN
6476                   IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(1)%t ) )             &
6477                      ALLOCATE( t_surf_wall_v_1(1)%t(1:surf_usm_v(1)%ns) )
6478                   READ ( 13 )  tmp_surf_wall_v(1)%t
6479                ENDIF
6480                CALL surface_restore_elements(                                 &
6481                                        t_surf_wall_v_1(1)%t, tmp_surf_wall_v(1)%t,      &
6482                                        surf_usm_v(1)%start_index,             & 
6483                                        start_index_on_file,                   &
6484                                        end_index_on_file,                     &
6485                                        nxlc, nysc,                            &
6486                                        nxlf, nxrf, nysf, nynf,                &
6487                                        nys_on_file, nyn_on_file,              &
6488                                        nxl_on_file,nxr_on_file )
6489
6490             CASE ( 't_surf_wall_v(2)' )
6491                IF ( k == 1 )  THEN
6492                   IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(2)%t ) )             &
6493                      ALLOCATE( t_surf_wall_v_1(2)%t(1:surf_usm_v(2)%ns) )
6494                   READ ( 13 )  tmp_surf_wall_v(2)%t
6495                ENDIF
6496                CALL surface_restore_elements(                                 &
6497                                        t_surf_wall_v_1(2)%t, tmp_surf_wall_v(2)%t,      &
6498                                        surf_usm_v(2)%start_index,             & 
6499                                        start_index_on_file,                   &
6500                                        end_index_on_file,                     &
6501                                        nxlc, nysc,                            &
6502                                        nxlf, nxrf, nysf, nynf,                &
6503                                        nys_on_file, nyn_on_file,              &
6504                                        nxl_on_file,nxr_on_file )
6505                     
6506             CASE ( 't_surf_wall_v(3)' )
6507                IF ( k == 1 )  THEN
6508                   IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(3)%t ) )             &
6509                      ALLOCATE( t_surf_wall_v_1(3)%t(1:surf_usm_v(3)%ns) )
6510                   READ ( 13 )  tmp_surf_wall_v(3)%t
6511                ENDIF
6512                CALL surface_restore_elements(                                 &
6513                                        t_surf_wall_v_1(3)%t, tmp_surf_wall_v(3)%t,      &
6514                                        surf_usm_v(3)%start_index,             & 
6515                                        start_index_on_file,                   &
6516                                        end_index_on_file,                     &
6517                                        nxlc, nysc,                            &
6518                                        nxlf, nxrf, nysf, nynf,                &
6519                                        nys_on_file, nyn_on_file,              &
6520                                        nxl_on_file,nxr_on_file )
6521
6522             CASE ( 't_surf_green_h' )
6523                IF ( k == 1 )  THEN
6524                   IF ( .NOT.  ALLOCATED( t_surf_green_h_1 ) )                 &
6525                      ALLOCATE( t_surf_green_h_1(1:surf_usm_h%ns) )
6526                   READ ( 13 )  tmp_surf_green_h
6527                ENDIF
6528                CALL surface_restore_elements(                                 &
6529                                        t_surf_green_h_1, tmp_surf_green_h,    &
6530                                        surf_usm_h%start_index,                & 
6531                                        start_index_on_file,                   &
6532                                        end_index_on_file,                     &
6533                                        nxlc, nysc,                            &
6534                                        nxlf, nxrf, nysf, nynf,                &
6535                                        nys_on_file, nyn_on_file,              &
6536                                        nxl_on_file,nxr_on_file )
6537
6538             CASE ( 't_surf_green_v(0)' )
6539                IF ( k == 1 )  THEN
6540                   IF ( .NOT.  ALLOCATED( t_surf_green_v_1(0)%t ) )            &
6541                      ALLOCATE( t_surf_green_v_1(0)%t(1:surf_usm_v(0)%ns) )
6542                   READ ( 13 )  tmp_surf_green_v(0)%t
6543                ENDIF
6544                CALL surface_restore_elements(                                 &
6545                                        t_surf_green_v_1(0)%t,                 &
6546                                        tmp_surf_green_v(0)%t,                 &
6547                                        surf_usm_v(0)%start_index,             & 
6548                                        start_index_on_file,                   &
6549                                        end_index_on_file,                     &
6550                                        nxlc, nysc,                            &
6551                                        nxlf, nxrf, nysf, nynf,                &
6552                                        nys_on_file, nyn_on_file,              &
6553                                        nxl_on_file,nxr_on_file )
6554                   
6555             CASE ( 't_surf_green_v(1)' )
6556                IF ( k == 1 )  THEN
6557                   IF ( .NOT.  ALLOCATED( t_surf_green_v_1(1)%t ) )            &
6558                      ALLOCATE( t_surf_green_v_1(1)%t(1:surf_usm_v(1)%ns) )
6559                   READ ( 13 )  tmp_surf_green_v(1)%t
6560                ENDIF
6561                CALL surface_restore_elements(                                 &
6562                                        t_surf_green_v_1(1)%t,                 &
6563                                        tmp_surf_green_v(1)%t,                 &
6564                                        surf_usm_v(1)%start_index,             & 
6565                                        start_index_on_file,                   &
6566                                        end_index_on_file,                     &
6567                                        nxlc, nysc,                            &
6568                                        nxlf, nxrf, nysf, nynf,                &
6569                                        nys_on_file, nyn_on_file,              &
6570                                        nxl_on_file,nxr_on_file )
6571
6572             CASE ( 't_surf_green_v(2)' )
6573                IF ( k == 1 )  THEN
6574                   IF ( .NOT.  ALLOCATED( t_surf_green_v_1(2)%t ) )            &
6575                      ALLOCATE( t_surf_green_v_1(2)%t(1:surf_usm_v(2)%ns) )
6576                   READ ( 13 )  tmp_surf_green_v(2)%t
6577                ENDIF
6578                CALL surface_restore_elements(                                 &
6579                                        t_surf_green_v_1(2)%t,                 &
6580                                        tmp_surf_green_v(2)%t,                 &
6581                                        surf_usm_v(2)%start_index,             & 
6582                                        start_index_on_file,                   &
6583                                        end_index_on_file,                     &
6584                                        nxlc, nysc,                            &
6585                                        nxlf, nxrf, nysf, nynf,                &
6586                                        nys_on_file, nyn_on_file,              &
6587                                        nxl_on_file,nxr_on_file )
6588                   
6589             CASE ( 't_surf_green_v(3)' )
6590                IF ( k == 1 )  THEN
6591                   IF ( .NOT.  ALLOCATED( t_surf_green_v_1(3)%t ) )            &
6592                      ALLOCATE( t_surf_green_v_1(3)%t(1:surf_usm_v(3)%ns) )
6593                   READ ( 13 )  tmp_surf_green_v(3)%t
6594                ENDIF
6595                CALL surface_restore_elements(                                 &
6596                                        t_surf_green_v_1(3)%t,                 & 
6597                                        tmp_surf_green_v(3)%t,                 &
6598                                        surf_usm_v(3)%start_index,             & 
6599                                        start_index_on_file,                   &
6600                                        end_index_on_file,                     &
6601                                        nxlc, nysc,                            &
6602                                        nxlf, nxrf, nysf, nynf,                &
6603                                        nys_on_file, nyn_on_file,              &
6604                                        nxl_on_file,nxr_on_file )
6605
6606             CASE ( 't_surf_window_h' )
6607                IF ( k == 1 )  THEN
6608                   IF ( .NOT.  ALLOCATED( t_surf_window_h_1 ) )                &
6609                      ALLOCATE( t_surf_window_h_1(1:surf_usm_h%ns) )
6610                   READ ( 13 )  tmp_surf_window_h
6611                ENDIF
6612                CALL surface_restore_elements(                                 &
6613                                        t_surf_window_h_1,                     &
6614                                        tmp_surf_window_h,                     &
6615                                        surf_usm_h%start_index,                & 
6616                                        start_index_on_file,                   &
6617                                        end_index_on_file,                     &
6618                                        nxlc, nysc,                            &
6619                                        nxlf, nxrf, nysf, nynf,                &
6620                                        nys_on_file, nyn_on_file,              &
6621                                        nxl_on_file,nxr_on_file )
6622
6623             CASE ( 't_surf_window_v(0)' )
6624                IF ( k == 1 )  THEN
6625                   IF ( .NOT.  ALLOCATED( t_surf_window_v_1(0)%t ) )           &
6626                      ALLOCATE( t_surf_window_v_1(0)%t(1:surf_usm_v(0)%ns) )
6627                   READ ( 13 )  tmp_surf_window_v(0)%t
6628                ENDIF
6629                CALL surface_restore_elements(                                 &
6630                                        t_surf_window_v_1(0)%t,                &
6631                                        tmp_surf_window_v(0)%t,                &
6632                                        surf_usm_v(0)%start_index,             & 
6633                                        start_index_on_file,                   &
6634                                        end_index_on_file,                     &
6635                                        nxlc, nysc,                            &
6636                                        nxlf, nxrf, nysf, nynf,                &
6637                                        nys_on_file, nyn_on_file,              &
6638                                        nxl_on_file,nxr_on_file )
6639                   
6640             CASE ( 't_surf_window_v(1)' )
6641                IF ( k == 1 )  THEN
6642                   IF ( .NOT.  ALLOCATED( t_surf_window_v_1(1)%t ) )           &
6643                      ALLOCATE( t_surf_window_v_1(1)%t(1:surf_usm_v(1)%ns) )
6644                   READ ( 13 )  tmp_surf_window_v(1)%t
6645                ENDIF
6646                CALL surface_restore_elements(                                 &
6647                                        t_surf_window_v_1(1)%t,                &
6648                                        tmp_surf_window_v(1)%t,                &
6649                                        surf_usm_v(1)%start_index,             & 
6650                                        start_index_on_file,                   &
6651                                        end_index_on_file,                     &
6652                                        nxlc, nysc,                            &
6653                                        nxlf, nxrf, nysf, nynf,                &
6654                                        nys_on_file, nyn_on_file,              &
6655                                        nxl_on_file,nxr_on_file )
6656
6657             CASE ( 't_surf_window_v(2)' )
6658                IF ( k == 1 )  THEN
6659                   IF ( .NOT.  ALLOCATED( t_surf_window_v_1(2)%t ) )           &
6660                      ALLOCATE( t_surf_window_v_1(2)%t(1:surf_usm_v(2)%ns) )
6661                   READ ( 13 )  tmp_surf_window_v(2)%t
6662                ENDIF
6663                CALL surface_restore_elements(                                 &
6664                                        t_surf_window_v_1(2)%t,                & 
6665                                        tmp_surf_window_v(2)%t,                &
6666                                        surf_usm_v(2)%start_index,             & 
6667                                        start_index_on_file,                   &
6668                                        end_index_on_file,                     &
6669                                        nxlc, nysc,                            &
6670                                        nxlf, nxrf, nysf, nynf,                &
6671                                        nys_on_file, nyn_on_file,              &
6672                                        nxl_on_file,nxr_on_file )
6673                   
6674             CASE ( 't_surf_window_v(3)' )
6675                IF ( k == 1 )  THEN
6676                   IF ( .NOT.  ALLOCATED( t_surf_window_v_1(3)%t ) )           &
6677                      ALLOCATE( t_surf_window_v_1(3)%t(1:surf_usm_v(3)%ns) )
6678                   READ ( 13 )  tmp_surf_window_v(3)%t
6679                ENDIF
6680                CALL surface_restore_elements(                                 &
6681                                        t_surf_window_v_1(3)%t,                & 
6682                                        tmp_surf_window_v(3)%t,                &
6683                                        surf_usm_v(3)%start_index,             & 
6684                                        start_index_on_file,                   &
6685                                        end_index_on_file,                     &
6686                                        nxlc, nysc,                            &
6687                                        nxlf, nxrf, nysf, nynf,                &
6688                                        nys_on_file, nyn_on_file,              &
6689                                        nxl_on_file,nxr_on_file )
6690
6691             CASE ( 'waste_heat_h' )
6692                IF ( k == 1 )  THEN
6693                   IF ( .NOT.  ALLOCATED( surf_usm_h%waste_heat ) )            &
6694                      ALLOCATE( surf_usm_h%waste_heat(1:surf_usm_h%ns) )
6695                   READ ( 13 )  tmp_surf_waste_h
6696                ENDIF             
6697                CALL surface_restore_elements(                                 &
6698                                        surf_usm_h%waste_heat,                 &
6699                                        tmp_surf_waste_h,                      &
6700                                        surf_usm_h%start_index,                &
6701                                        start_index_on_file,                   &
6702                                        end_index_on_file,                     &
6703                                        nxlc, nysc,                            &
6704                                        nxlf, nxrf, nysf, nynf,                &
6705                                        nys_on_file, nyn_on_file,              &
6706                                        nxl_on_file,nxr_on_file )                 
6707                                       
6708             CASE ( 'waste_heat_v(0)' )
6709                IF ( k == 1 )  THEN
6710                   IF ( .NOT.  ALLOCATED( surf_usm_v(0)%waste_heat ) )         &
6711                      ALLOCATE( surf_usm_v(0)%waste_heat(1:surf_usm_v(0)%ns) )
6712                   READ ( 13 )  tmp_surf_waste_v(0)%t
6713                ENDIF
6714                CALL surface_restore_elements(                                 &
6715                                        surf_usm_v(0)%waste_heat,              &
6716                                        tmp_surf_waste_v(0)%t,                 &
6717                                        surf_usm_v(0)%start_index,             & 
6718                                        start_index_on_file,                   &
6719                                        end_index_on_file,                     &
6720                                        nxlc, nysc,                            &
6721                                        nxlf, nxrf, nysf, nynf,                &
6722                                        nys_on_file, nyn_on_file,              &
6723                                        nxl_on_file,nxr_on_file )
6724                     
6725             CASE ( 'waste_heat_v(1)' )
6726                IF ( k == 1 )  THEN
6727                   IF ( .NOT.  ALLOCATED( surf_usm_v(1)%waste_heat ) )         &
6728                      ALLOCATE( surf_usm_v(1)%waste_heat(1:surf_usm_v(1)%ns) )
6729                   READ ( 13 )  tmp_surf_waste_v(1)%t
6730                ENDIF
6731                CALL surface_restore_elements(                                 &
6732                                        surf_usm_v(1)%waste_heat,              &
6733                                        tmp_surf_waste_v(1)%t,                 &
6734                                        surf_usm_v(1)%start_index,             & 
6735                                        start_index_on_file,                   &
6736                                        end_index_on_file,                     &
6737                                        nxlc, nysc,                            &
6738                                        nxlf, nxrf, nysf, nynf,                &
6739                                        nys_on_file, nyn_on_file,              &
6740                                        nxl_on_file,nxr_on_file )
6741
6742             CASE ( 'waste_heat_v(2)' )
6743                IF ( k == 1 )  THEN
6744                   IF ( .NOT.  ALLOCATED( surf_usm_v(2)%waste_heat ) )         &
6745                      ALLOCATE( surf_usm_v(2)%waste_heat(1:surf_usm_v(2)%ns) )
6746                   READ ( 13 )  tmp_surf_waste_v(2)%t
6747                ENDIF
6748                CALL surface_restore_elements(                                 &
6749                                        surf_usm_v(2)%waste_heat,              &
6750                                        tmp_surf_waste_v(2)%t,                 &
6751                                        surf_usm_v(2)%start_index,             & 
6752                                        start_index_on_file,                   &
6753                                        end_index_on_file,                     &
6754                                        nxlc, nysc,                            &
6755                                        nxlf, nxrf, nysf, nynf,                &
6756                                        nys_on_file, nyn_on_file,              &
6757                                        nxl_on_file,nxr_on_file )
6758                     
6759             CASE ( 'waste_heat_v(3)' )
6760                IF ( k == 1 )  THEN
6761                   IF ( .NOT.  ALLOCATED( surf_usm_v(3)%waste_heat ) )         &
6762                      ALLOCATE( surf_usm_v(3)%waste_heat(1:surf_usm_v(3)%ns) )
6763                   READ ( 13 )  tmp_surf_waste_v(3)%t
6764                ENDIF
6765                CALL surface_restore_elements(                                 &
6766                                        surf_usm_v(3)%waste_heat,              &
6767                                        tmp_surf_waste_v(3)%t,                 &
6768                                        surf_usm_v(3)%start_index,             & 
6769                                        start_index_on_file,                   &
6770                                        end_index_on_file,                     &
6771                                        nxlc, nysc,                            &
6772                                        nxlf, nxrf, nysf, nynf,                &
6773                                        nys_on_file, nyn_on_file,              &
6774                                        nxl_on_file,nxr_on_file )
6775
6776             CASE ( 't_wall_h' )
6777                IF ( k == 1 )  THEN
6778                   IF ( .NOT.  ALLOCATED( t_wall_h_1 ) )                       &
6779                      ALLOCATE( t_wall_h_1(nzb_wall:nzt_wall+1,                &
6780                                           1:surf_usm_h%ns) )
6781                   READ ( 13 )  tmp_wall_h
6782                ENDIF
6783                CALL surface_restore_elements(                                 &
6784                                        t_wall_h_1, tmp_wall_h,                &
6785                                        surf_usm_h%start_index,                & 
6786                                        start_index_on_file,                   &
6787                                        end_index_on_file,                     &
6788                                        nxlc, nysc,                            &
6789                                        nxlf, nxrf, nysf, nynf,                &
6790                                        nys_on_file, nyn_on_file,              &
6791                                        nxl_on_file,nxr_on_file )
6792
6793             CASE ( 't_wall_v(0)' )
6794                IF ( k == 1 )  THEN
6795                   IF ( .NOT.  ALLOCATED( t_wall_v_1(0)%t ) )                  &
6796                      ALLOCATE( t_wall_v_1(0)%t(nzb_wall:nzt_wall+1,           &
6797                                                1:surf_usm_v(0)%ns) )
6798                   READ ( 13 )  tmp_wall_v(0)%t
6799                ENDIF
6800                CALL surface_restore_elements(                                 &
6801                                        t_wall_v_1(0)%t, tmp_wall_v(0)%t,      &
6802                                        surf_usm_v(0)%start_index,             & 
6803                                        start_index_on_file,                   &
6804                                        end_index_on_file,                     &
6805                                        nxlc, nysc,                            &
6806                                        nxlf, nxrf, nysf, nynf,                &
6807                                        nys_on_file, nyn_on_file,              &
6808                                        nxl_on_file,nxr_on_file )
6809
6810             CASE ( 't_wall_v(1)' )
6811                IF ( k == 1 )  THEN
6812                   IF ( .NOT.  ALLOCATED( t_wall_v_1(1)%t ) )                  &
6813                      ALLOCATE( t_wall_v_1(1)%t(nzb_wall:nzt_wall+1,           &
6814                                                1:surf_usm_v(1)%ns) )
6815                   READ ( 13 )  tmp_wall_v(1)%t
6816                ENDIF
6817                CALL surface_restore_elements(                                 &
6818                                        t_wall_v_1(1)%t, tmp_wall_v(1)%t,      &
6819                                        surf_usm_v(1)%start_index,             & 
6820                                        start_index_on_file,                   &
6821                                        end_index_on_file,                     &
6822                                        nxlc, nysc,                            &
6823                                        nxlf, nxrf, nysf, nynf,                &
6824                                        nys_on_file, nyn_on_file,              &
6825                                        nxl_on_file,nxr_on_file )
6826
6827             CASE ( 't_wall_v(2)' )
6828                IF ( k == 1 )  THEN
6829                   IF ( .NOT.  ALLOCATED( t_wall_v_1(2)%t ) )                  &
6830                      ALLOCATE( t_wall_v_1(2)%t(nzb_wall:nzt_wall+1,           &
6831                                                1:surf_usm_v(2)%ns) )
6832                   READ ( 13 )  tmp_wall_v(2)%t
6833                ENDIF
6834                CALL surface_restore_elements(                                 &
6835                                        t_wall_v_1(2)%t, tmp_wall_v(2)%t,      &
6836                                        surf_usm_v(2)%start_index,             & 
6837                                        start_index_on_file,                   &
6838                                        end_index_on_file ,                    &
6839                                        nxlc, nysc,                            &
6840                                        nxlf, nxrf, nysf, nynf,                &
6841                                        nys_on_file, nyn_on_file,              &
6842                                        nxl_on_file,nxr_on_file )
6843
6844             CASE ( 't_wall_v(3)' )
6845                IF ( k == 1 )  THEN
6846                   IF ( .NOT.  ALLOCATED( t_wall_v_1(3)%t ) )                  &
6847                      ALLOCATE( t_wall_v_1(3)%t(nzb_wall:nzt_wall+1,           &
6848                                                1:surf_usm_v(3)%ns) )
6849                   READ ( 13 )  tmp_wall_v(3)%t
6850                ENDIF
6851                CALL surface_restore_elements(                                 &
6852                                        t_wall_v_1(3)%t, tmp_wall_v(3)%t,      &
6853                                        surf_usm_v(3)%start_index,             &   
6854                                        start_index_on_file,                   &
6855                                        end_index_on_file,                     &
6856                                        nxlc, nysc,                            &
6857                                        nxlf, nxrf, nysf, nynf,                &
6858                                        nys_on_file, nyn_on_file,              &
6859                                        nxl_on_file,nxr_on_file )
6860
6861             CASE ( 't_green_h' )
6862                IF ( k == 1 )  THEN
6863                   IF ( .NOT.  ALLOCATED( t_green_h_1 ) )                      &
6864                      ALLOCATE( t_green_h_1(nzb_wall:nzt_wall+1,               &
6865                                            1:surf_usm_h%ns) )
6866                   READ ( 13 )  tmp_green_h
6867                ENDIF
6868                CALL surface_restore_elements(                                 &
6869                                        t_green_h_1, tmp_green_h,              &
6870                                        surf_usm_h%start_index,                & 
6871                                        start_index_on_file,                   &
6872                                        end_index_on_file,                     &
6873                                        nxlc, nysc,                            &
6874                                        nxlf, nxrf, nysf, nynf,                &
6875                                        nys_on_file, nyn_on_file,              &
6876                                        nxl_on_file,nxr_on_file )
6877
6878             CASE ( 't_green_v(0)' )
6879                IF ( k == 1 )  THEN
6880                   IF ( .NOT.  ALLOCATED( t_green_v_1(0)%t ) )                 &
6881                      ALLOCATE( t_green_v_1(0)%t(nzb_wall:nzt_wall+1,          &
6882                                                 1:surf_usm_v(0)%ns) )
6883                   READ ( 13 )  tmp_green_v(0)%t
6884                ENDIF
6885                CALL surface_restore_elements(                                 &
6886                                        t_green_v_1(0)%t, tmp_green_v(0)%t,    &
6887                                        surf_usm_v(0)%start_index,             & 
6888                                        start_index_on_file,                   &
6889                                        end_index_on_file,                     &
6890                                        nxlc, nysc,                            &
6891                                        nxlf, nxrf, nysf, nynf,                &
6892                                        nys_on_file, nyn_on_file,              &
6893                                        nxl_on_file,nxr_on_file )
6894
6895             CASE ( 't_green_v(1)' )
6896                IF ( k == 1 )  THEN
6897                   IF ( .NOT.  ALLOCATED( t_green_v_1(1)%t ) )                 &
6898                      ALLOCATE( t_green_v_1(1)%t(nzb_wall:nzt_wall+1,          &
6899                                                 1:surf_usm_v(1)%ns) )
6900                   READ ( 13 )  tmp_green_v(1)%t
6901                ENDIF
6902                CALL surface_restore_elements(                                 &
6903                                        t_green_v_1(1)%t, tmp_green_v(1)%t,    &
6904                                        surf_usm_v(1)%start_index,             & 
6905                                        start_index_on_file,                   &
6906                                        end_index_on_file,                     &
6907                                        nxlc, nysc,                            &
6908                                        nxlf, nxrf, nysf, nynf,                &
6909                                        nys_on_file, nyn_on_file,              &
6910                                        nxl_on_file,nxr_on_file )
6911
6912             CASE ( 't_green_v(2)' )
6913                IF ( k == 1 )  THEN
6914                   IF ( .NOT.  ALLOCATED( t_green_v_1(2)%t ) )                 &
6915                      ALLOCATE( t_green_v_1(2)%t(nzb_wall:nzt_wall+1,          &
6916                                                 1:surf_usm_v(2)%ns) )
6917                   READ ( 13 )  tmp_green_v(2)%t
6918                ENDIF
6919                CALL surface_restore_elements(                                 &
6920                                        t_green_v_1(2)%t, tmp_green_v(2)%t,    &
6921                                        surf_usm_v(2)%start_index,             & 
6922                                        start_index_on_file,                   &
6923                                        end_index_on_file ,                    &
6924                                        nxlc, nysc,                            &
6925                                        nxlf, nxrf, nysf, nynf,                &
6926                                        nys_on_file, nyn_on_file,              &
6927                                        nxl_on_file,nxr_on_file )
6928
6929             CASE ( 't_green_v(3)' )
6930                IF ( k == 1 )  THEN
6931                   IF ( .NOT.  ALLOCATED( t_green_v_1(3)%t ) )                 &
6932                      ALLOCATE( t_green_v_1(3)%t(nzb_wall:nzt_wall+1,          &
6933                                                 1:surf_usm_v(3)%ns) )
6934                   READ ( 13 )  tmp_green_v(3)%t
6935                ENDIF
6936                CALL surface_restore_elements(                                 &
6937                                        t_green_v_1(3)%t, tmp_green_v(3)%t,    &
6938                                        surf_usm_v(3)%start_index,             & 
6939                                        start_index_on_file,                   &
6940                                        end_index_on_file,                     &
6941                                        nxlc, nysc,                            &
6942                                        nxlf, nxrf, nysf, nynf,                &
6943                                        nys_on_file, nyn_on_file,              &
6944                                        nxl_on_file,nxr_on_file )
6945
6946             CASE ( 't_window_h' )
6947                IF ( k == 1 )  THEN
6948                   IF ( .NOT.  ALLOCATED( t_window_h_1 ) )                     &
6949                      ALLOCATE( t_window_h_1(nzb_wall:nzt_wall+1,              &
6950                                             1:surf_usm_h%ns) )
6951                   READ ( 13 )  tmp_window_h
6952                ENDIF
6953                CALL surface_restore_elements(                                 &
6954                                        t_window_h_1, tmp_window_h,            &
6955                                        surf_usm_h%start_index,                & 
6956                                        start_index_on_file,                   &
6957                                        end_index_on_file,                     &
6958                                        nxlc, nysc,                            &
6959                                        nxlf, nxrf, nysf, nynf,                &
6960                                        nys_on_file, nyn_on_file,              &
6961                                        nxl_on_file, nxr_on_file )
6962
6963             CASE ( 't_window_v(0)' )
6964                IF ( k == 1 )  THEN
6965                   IF ( .NOT.  ALLOCATED( t_window_v_1(0)%t ) )                &
6966                      ALLOCATE( t_window_v_1(0)%t(nzb_wall:nzt_wall+1,         &
6967                                                  1:surf_usm_v(0)%ns) )
6968                   READ ( 13 )  tmp_window_v(0)%t
6969                ENDIF
6970                CALL surface_restore_elements(                                 &
6971                                        t_window_v_1(0)%t,                     & 
6972                                        tmp_window_v(0)%t,                     &
6973                                        surf_usm_v(0)%start_index,             &
6974                                        start_index_on_file,                   &
6975                                        end_index_on_file,                     &
6976                                        nxlc, nysc,                            &
6977                                        nxlf, nxrf, nysf, nynf,                &
6978                                        nys_on_file, nyn_on_file,              &
6979                                        nxl_on_file,nxr_on_file )
6980
6981             CASE ( 't_window_v(1)' )
6982                IF ( k == 1 )  THEN
6983                   IF ( .NOT.  ALLOCATED( t_window_v_1(1)%t ) )                &
6984                      ALLOCATE( t_window_v_1(1)%t(nzb_wall:nzt_wall+1,         &
6985                                                  1:surf_usm_v(1)%ns) )
6986                   READ ( 13 )  tmp_window_v(1)%t
6987                ENDIF
6988                CALL surface_restore_elements(                                 &
6989                                        t_window_v_1(1)%t,                     & 
6990                                        tmp_window_v(1)%t,                     &
6991                                        surf_usm_v(1)%start_index,             & 
6992                                        start_index_on_file,                   &
6993                                        end_index_on_file,                     &
6994                                        nxlc, nysc,                            &
6995                                        nxlf, nxrf, nysf, nynf,                &
6996                                        nys_on_file, nyn_on_file,              &
6997                                        nxl_on_file,nxr_on_file )
6998
6999             CASE ( 't_window_v(2)' )
7000                IF ( k == 1 )  THEN
7001                   IF ( .NOT.  ALLOCATED( t_window_v_1(2)%t ) )                &
7002                      ALLOCATE( t_window_v_1(2)%t(nzb_wall:nzt_wall+1,         &
7003                                                  1:surf_usm_v(2)%ns) )
7004                   READ ( 13 )  tmp_window_v(2)%t
7005                ENDIF
7006                CALL surface_restore_elements(                                 &
7007                                        t_window_v_1(2)%t,                     & 
7008                                        tmp_window_v(2)%t,                     &
7009                                        surf_usm_v(2)%start_index,             & 
7010                                        start_index_on_file,                   &
7011                                        end_index_on_file ,                    &
7012                                        nxlc, nysc,                            &
7013                                        nxlf, nxrf, nysf, nynf,                &
7014                                        nys_on_file, nyn_on_file,              &
7015                                        nxl_on_file,nxr_on_file )
7016
7017             CASE ( 't_window_v(3)' )
7018                IF ( k == 1 )  THEN
7019                   IF ( .NOT.  ALLOCATED( t_window_v_1(3)%t ) )                &
7020                      ALLOCATE( t_window_v_1(3)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(3)%ns) )
7021                   READ ( 13 )  tmp_window_v(3)%t
7022                ENDIF
7023                CALL surface_restore_elements(                                 &
7024                                        t_window_v_1(3)%t,                     & 
7025                                        tmp_window_v(3)%t,                     &
7026                                        surf_usm_v(3)%start_index,             & 
7027                                        start_index_on_file,                   &
7028                                        end_index_on_file,                     &
7029                                        nxlc, nysc,                            &
7030                                        nxlf, nxrf, nysf, nynf,                &
7031                                        nys_on_file, nyn_on_file,              &
7032                                        nxl_on_file,nxr_on_file )
7033
7034             CASE DEFAULT
7035
7036                   found = .FALSE.
7037
7038          END SELECT
7039
7040       
7041    END SUBROUTINE usm_rrd_local
7042
7043   
7044!------------------------------------------------------------------------------!
7045! Description:
7046! ------------
7047!
7048!> This subroutine reads walls, roofs and land categories and it parameters
7049!> from input files.
7050!------------------------------------------------------------------------------!
7051    SUBROUTINE usm_read_urban_surface_types
7052   
7053        USE netcdf_data_input_mod,                                             &
7054            ONLY:  building_pars_f, building_type_f
7055
7056        IMPLICIT NONE
7057
7058        CHARACTER(12)                                         :: wtn
7059        INTEGER(iwp)                                          :: wtc
7060        REAL(wp), DIMENSION(n_surface_params)                 :: wtp
7061        LOGICAL                                               :: ascii_file = .FALSE.
7062        INTEGER(iwp), DIMENSION(0:17, nysg:nyng, nxlg:nxrg)   :: usm_par
7063        REAL(wp), DIMENSION(1:14, nysg:nyng, nxlg:nxrg)       :: usm_val
7064        INTEGER(iwp)                                          :: k, l, iw, jw, kw, it, ip, ii, ij, m
7065        INTEGER(iwp)                                          :: i, j
7066        INTEGER(iwp)                                          :: nz, roof, dirwe, dirsn
7067        INTEGER(iwp)                                          :: category
7068        INTEGER(iwp)                                          :: weheight1, wecat1, snheight1, sncat1
7069        INTEGER(iwp)                                          :: weheight2, wecat2, snheight2, sncat2
7070        INTEGER(iwp)                                          :: weheight3, wecat3, snheight3, sncat3
7071        REAL(wp)                                              :: height, albedo, thick
7072        REAL(wp)                                              :: wealbedo1, wethick1, snalbedo1, snthick1
7073        REAL(wp)                                              :: wealbedo2, wethick2, snalbedo2, snthick2
7074        REAL(wp)                                              :: wealbedo3, wethick3, snalbedo3, snthick3
7075
7076
7077        IF ( debug_output )  CALL debug_message( 'usm_read_urban_surface_types', 'start' )
7078!
7079!--     If building_pars or building_type are already read from static input
7080!--     file, skip reading ASCII file.
7081        IF ( building_type_f%from_file  .OR.  building_pars_f%from_file )      &
7082           RETURN
7083!
7084!--     Check if ASCII input file exists. If not, return and initialize USM
7085!--     with default settings.
7086        INQUIRE( FILE = 'SURFACE_PARAMETERS' // coupling_char,                 &
7087                 EXIST = ascii_file )
7088                 
7089        IF ( .NOT. ascii_file )  RETURN
7090
7091!
7092!--     read categories of walls and their parameters
7093        DO  ii = 0, io_blocks-1
7094            IF ( ii == io_group )  THEN
7095!
7096!--             open urban surface file
7097                OPEN( 151, file='SURFACE_PARAMETERS'//coupling_char, action='read', &
7098                           status='old', form='formatted', err=15 )
7099!
7100!--             first test and get n_surface_types
7101                k = 0
7102                l = 0
7103                DO
7104                    l = l+1
7105                    READ( 151, *, err=11, end=12 )  wtc, wtp, wtn
7106                    k = k+1
7107                    CYCLE
7108 11                 CONTINUE
7109                ENDDO
7110 12             n_surface_types = k
7111                ALLOCATE( surface_type_names(n_surface_types) )
7112                ALLOCATE( surface_type_codes(n_surface_types) )
7113                ALLOCATE( surface_params(n_surface_params, n_surface_types) )
7114!
7115!--             real reading
7116                rewind( 151 )
7117                k = 0
7118                DO
7119                    READ( 151, *, err=13, end=14 )  wtc, wtp, wtn
7120                    k = k+1
7121                    surface_type_codes(k) = wtc
7122                    surface_params(:,k) = wtp
7123                    surface_type_names(k) = wtn
7124                    CYCLE
712513                  WRITE(6,'(i3,a,2i5)') myid, 'readparams2 error k=', k
7126                    FLUSH(6)
7127                    CONTINUE
7128                ENDDO
7129 14             CLOSE(151)
7130                CYCLE
7131 15             message_string = 'file SURFACE_PARAMETERS'//TRIM(coupling_char)//' does not exist'
7132                CALL message( 'usm_read_urban_surface_types', 'PA0513', 1, 2, 0, 6, 0 )
7133            ENDIF
7134        ENDDO
7135   
7136!
7137!--     read types of surfaces
7138        usm_par = 0
7139        DO  ii = 0, io_blocks-1
7140            IF ( ii == io_group )  THEN
7141
7142!
7143!--             open csv urban surface file
7144                OPEN( 151, file='URBAN_SURFACE'//TRIM(coupling_char), action='read', &
7145                      status='old', form='formatted', err=23 )
7146               
7147                l = 0
7148                DO
7149                    l = l+1
7150!
7151!--                 i, j, height, nz, roof, dirwe, dirsn, category, soilcat,
7152!--                 weheight1, wecat1, snheight1, sncat1, weheight2, wecat2, snheight2, sncat2,
7153!--                 weheight3, wecat3, snheight3, sncat3
7154                    READ( 151, *, err=21, end=25 )  i, j, height, nz, roof, dirwe, dirsn,            &
7155                                            category, albedo, thick,                                 &
7156                                            weheight1, wecat1, wealbedo1, wethick1,                  &
7157                                            weheight2, wecat2, wealbedo2, wethick2,                  &
7158                                            weheight3, wecat3, wealbedo3, wethick3,                  &
7159                                            snheight1, sncat1, snalbedo1, snthick1,                  &
7160                                            snheight2, sncat2, snalbedo2, snthick2,                  &
7161                                            snheight3, sncat3, snalbedo3, snthick3
7162
7163                    IF ( i >= nxlg  .AND.  i <= nxrg  .AND.  j >= nysg  .AND.  j <= nyng )  THEN
7164!
7165!--                     write integer variables into array
7166                        usm_par(:,j,i) = (/1, nz, roof, dirwe, dirsn, category,                      &
7167                                          weheight1, wecat1, weheight2, wecat2, weheight3, wecat3,   &
7168                                          snheight1, sncat1, snheight2, sncat2, snheight3, sncat3 /)
7169!
7170!--                     write real values into array
7171                        usm_val(:,j,i) = (/ albedo, thick,                                           &
7172                                           wealbedo1, wethick1, wealbedo2, wethick2,                 &
7173                                           wealbedo3, wethick3, snalbedo1, snthick1,                 &
7174                                           snalbedo2, snthick2, snalbedo3, snthick3 /)
7175                    ENDIF
7176                    CYCLE
7177 21                 WRITE (message_string, "(A,I5)") 'errors in file URBAN_SURFACE'//TRIM(coupling_char)//' on line ', l
7178                    CALL message( 'usm_read_urban_surface_types', 'PA0512', 0, 1, 0, 6, 0 )
7179                ENDDO
7180         
7181 23             message_string = 'file URBAN_SURFACE'//TRIM(coupling_char)//' does not exist'
7182                CALL message( 'usm_read_urban_surface_types', 'PA0514', 1, 2, 0, 6, 0 )
7183
7184 25             CLOSE( 151 )
7185
7186            ENDIF
7187#if defined( __parallel )
7188            CALL MPI_BARRIER( comm2d, ierr )
7189#endif
7190        ENDDO
7191       
7192!
7193!--     check completeness and formal correctness of the data
7194        DO i = nxlg, nxrg
7195            DO j = nysg, nyng
7196                IF ( usm_par(0,j,i) /= 0  .AND.  (        &  !< incomplete data,supply default values later
7197                     usm_par(1,j,i) < nzb  .OR.           &
7198                     usm_par(1,j,i) > nzt  .OR.           &  !< incorrect height (nz < nzb  .OR.  nz > nzt)
7199                     usm_par(2,j,i) < 0  .OR.             &
7200                     usm_par(2,j,i) > 1  .OR.             &  !< incorrect roof sign
7201                     usm_par(3,j,i) < nzb-nzt  .OR.       & 
7202                     usm_par(3,j,i) > nzt-nzb  .OR.       &  !< incorrect west-east wall direction sign
7203                     usm_par(4,j,i) < nzb-nzt  .OR.       &
7204                     usm_par(4,j,i) > nzt-nzb  .OR.       &  !< incorrect south-north wall direction sign
7205                     usm_par(6,j,i) < nzb  .OR.           & 
7206                     usm_par(6,j,i) > nzt  .OR.           &  !< incorrect pedestrian level height for west-east wall
7207                     usm_par(8,j,i) > nzt  .OR.           &
7208                     usm_par(10,j,i) > nzt  .OR.          &  !< incorrect wall or roof level height for west-east wall
7209                     usm_par(12,j,i) < nzb  .OR.          & 
7210                     usm_par(12,j,i) > nzt  .OR.          &  !< incorrect pedestrian level height for south-north wall
7211                     usm_par(14,j,i) > nzt  .OR.          &
7212                     usm_par(16,j,i) > nzt                &  !< incorrect wall or roof level height for south-north wall
7213                    ) )  THEN
7214!
7215!--                 incorrect input data
7216                    WRITE (message_string, "(A,2I5)") 'missing or incorrect data in file URBAN_SURFACE'// &
7217                                                       TRIM(coupling_char)//' for i,j=', i,j
7218                    CALL message( 'usm_read_urban_surface', 'PA0504', 1, 2, 0, 6, 0 )
7219                ENDIF
7220               
7221            ENDDO
7222        ENDDO
7223!       
7224!--     Assign the surface types to the respective data type.
7225!--     First, for horizontal upward-facing surfaces.
7226!--     Further, set flag indicating that albedo is initialized via ASCII
7227!--     format, else it would be overwritten in the radiation model.
7228        surf_usm_h%albedo_from_ascii = .TRUE.
7229        DO  m = 1, surf_usm_h%ns
7230           iw = surf_usm_h%i(m)
7231           jw = surf_usm_h%j(m)
7232           kw = surf_usm_h%k(m)
7233
7234           IF ( usm_par(5,jw,iw) == 0 )  THEN
7235
7236              IF ( zu(kw) >= roof_height_limit )  THEN
7237                 surf_usm_h%isroof_surf(m)   = .TRUE.
7238                 surf_usm_h%surface_types(m) = roof_category         !< default category for root surface
7239              ELSE
7240                 surf_usm_h%isroof_surf(m)   = .FALSE.
7241                 surf_usm_h%surface_types(m) = land_category         !< default category for land surface
7242              ENDIF
7243
7244              surf_usm_h%albedo(:,m)    = -1.0_wp
7245              surf_usm_h%thickness_wall(m) = -1.0_wp
7246              surf_usm_h%thickness_green(m) = -1.0_wp
7247              surf_usm_h%thickness_window(m) = -1.0_wp
7248           ELSE
7249              IF ( usm_par(2,jw,iw)==0 )  THEN
7250                 surf_usm_h%isroof_surf(m)    = .FALSE.
7251                 surf_usm_h%thickness_wall(m) = -1.0_wp
7252                 surf_usm_h%thickness_window(m) = -1.0_wp
7253                 surf_usm_h%thickness_green(m)  = -1.0_wp
7254              ELSE
7255                 surf_usm_h%isroof_surf(m)    = .TRUE.
7256                 surf_usm_h%thickness_wall(m) = usm_val(2,jw,iw)
7257                 surf_usm_h%thickness_window(m) = usm_val(2,jw,iw)
7258                 surf_usm_h%thickness_green(m)  = usm_val(2,jw,iw)
7259              ENDIF
7260              surf_usm_h%surface_types(m) = usm_par(5,jw,iw)
7261              surf_usm_h%albedo(:,m)   = usm_val(1,jw,iw)
7262              surf_usm_h%transmissivity(m)    = 0.0_wp
7263           ENDIF
7264!
7265!--        Find the type position
7266           it = surf_usm_h%surface_types(m)
7267           ip = -99999
7268           DO k = 1, n_surface_types
7269              IF ( surface_type_codes(k) == it )  THEN
7270                 ip = k
7271                 EXIT
7272              ENDIF
7273           ENDDO
7274           IF ( ip == -99999 )  THEN
7275!
7276!--           land/roof category not found
7277              WRITE (9,"(A,I5,A,3I5)") 'land/roof category ', it,     &
7278                                       ' not found  for i,j,k=', iw,jw,kw
7279              FLUSH(9)
7280              IF ( surf_usm_h%isroof_surf(m) ) THEN
7281                 category = roof_category
7282              ELSE
7283                 category = land_category
7284              ENDIF
7285              DO k = 1, n_surface_types
7286                 IF ( surface_type_codes(k) == roof_category ) THEN
7287                    ip = k
7288                    EXIT
7289                 ENDIF
7290              ENDDO
7291              IF ( ip == -99999 )  THEN
7292!
7293!--              default land/roof category not found
7294                 WRITE (9,"(A,I5,A,3I5)") 'Default land/roof category', category, ' not found!'
7295                 FLUSH(9)
7296                 ip = 1
7297              ENDIF
7298           ENDIF
7299!
7300!--        Albedo
7301           IF ( surf_usm_h%albedo(ind_veg_wall,m) < 0.0_wp )  THEN
7302              surf_usm_h%albedo(:,m) = surface_params(ialbedo,ip)
7303           ENDIF
7304!
7305!--        Albedo type is 0 (custom), others are replaced later
7306           surf_usm_h%albedo_type(:,m) = 0
7307!
7308!--        Transmissivity
7309           IF ( surf_usm_h%transmissivity(m) < 0.0_wp )  THEN
7310              surf_usm_h%transmissivity(m) = 0.0_wp
7311           ENDIF
7312!
7313!--        emissivity of the wall
7314           surf_usm_h%emissivity(:,m) = surface_params(iemiss,ip)
7315!           
7316!--        heat conductivity λS between air and wall ( W m−2 K−1 )
7317           surf_usm_h%lambda_surf(m) = surface_params(ilambdas,ip)
7318           surf_usm_h%lambda_surf_window(m) = surface_params(ilambdas,ip)
7319           surf_usm_h%lambda_surf_green(m)  = surface_params(ilambdas,ip)
7320!           
7321!--        roughness length for momentum, heat and humidity
7322           surf_usm_h%z0(m) = surface_params(irough,ip)
7323           surf_usm_h%z0h(m) = surface_params(iroughh,ip)
7324           surf_usm_h%z0q(m) = surface_params(iroughh,ip)
7325!
7326!--        Surface skin layer heat capacity (J m−2 K−1 )
7327           surf_usm_h%c_surface(m) = surface_params(icsurf,ip)
7328           surf_usm_h%c_surface_window(m) = surface_params(icsurf,ip)
7329           surf_usm_h%c_surface_green(m)  = surface_params(icsurf,ip)
7330!           
7331!--        wall material parameters:
7332!--        thickness of the wall (m)
7333!--        missing values are replaced by default value for category
7334           IF ( surf_usm_h%thickness_wall(m) <= 0.001_wp )  THEN
7335                surf_usm_h%thickness_wall(m) = surface_params(ithick,ip)
7336           ENDIF
7337           IF ( surf_usm_h%thickness_window(m) <= 0.001_wp )  THEN
7338                surf_usm_h%thickness_window(m) = surface_params(ithick,ip)
7339           ENDIF
7340           IF ( surf_usm_h%thickness_green(m) <= 0.001_wp )  THEN
7341                surf_usm_h%thickness_green(m) = surface_params(ithick,ip)
7342           ENDIF
7343!           
7344!--        volumetric heat capacity rho*C of the wall ( J m−3 K−1 )
7345           surf_usm_h%rho_c_wall(:,m) = surface_params(irhoC,ip)
7346           surf_usm_h%rho_c_window(:,m) = surface_params(irhoC,ip)
7347           surf_usm_h%rho_c_green(:,m)  = surface_params(irhoC,ip)
7348!           
7349!--        thermal conductivity λH of the wall (W m−1 K−1 )
7350           surf_usm_h%lambda_h(:,m) = surface_params(ilambdah,ip)
7351           surf_usm_h%lambda_h_window(:,m) = surface_params(ilambdah,ip)
7352           surf_usm_h%lambda_h_green(:,m)  = surface_params(ilambdah,ip)
7353
7354        ENDDO
7355!
7356!--     For vertical surface elements ( 0 -- northward-facing, 1 -- southward-facing,
7357!--     2 -- eastward-facing, 3 -- westward-facing )
7358        DO  l = 0, 3
7359!
7360!--        Set flag indicating that albedo is initialized via ASCII format.
7361!--        Else it would be overwritten in the radiation model.
7362           surf_usm_v(l)%albedo_from_ascii = .TRUE.
7363           DO  m = 1, surf_usm_v(l)%ns
7364              i  = surf_usm_v(l)%i(m)
7365              j  = surf_usm_v(l)%j(m)
7366              kw = surf_usm_v(l)%k(m)
7367             
7368              IF ( l == 3 )  THEN ! westward facing
7369                 iw = i
7370                 jw = j
7371                 ii = 6
7372                 ij = 3
7373              ELSEIF ( l == 2 )  THEN
7374                 iw = i-1
7375                 jw = j
7376                 ii = 6
7377                 ij = 3
7378              ELSEIF ( l == 1 )  THEN
7379                 iw = i
7380                 jw = j
7381                 ii = 12
7382                 ij = 9
7383              ELSEIF ( l == 0 )  THEN
7384                 iw = i
7385                 jw = j-1
7386                 ii = 12
7387                 ij = 9
7388              ENDIF
7389
7390              IF ( iw < 0 .OR. jw < 0 ) THEN
7391!
7392!--              wall on west or south border of the domain - assign default category
7393                 IF ( kw <= roof_height_limit ) THEN
7394                     surf_usm_v(l)%surface_types(m) = wall_category   !< default category for wall surface in wall zone
7395                 ELSE
7396                     surf_usm_v(l)%surface_types(m) = roof_category   !< default category for wall surface in roof zone
7397                 END IF
7398                 surf_usm_v(l)%albedo(:,m)         = -1.0_wp
7399                 surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
7400                 surf_usm_v(l)%thickness_window(m) = -1.0_wp
7401                 surf_usm_v(l)%thickness_green(m)  = -1.0_wp
7402                 surf_usm_v(l)%transmissivity(m)   = -1.0_wp
7403              ELSE IF ( kw <= usm_par(ii,jw,iw) )  THEN
7404!
7405!--                 pedestrian zone
7406                 IF ( usm_par(ii+1,jw,iw) == 0 )  THEN
7407                     surf_usm_v(l)%surface_types(m)  = pedestrian_category   !< default category for wall surface in
7408                                                                             !<pedestrian zone
7409                     surf_usm_v(l)%albedo(:,m)         = -1.0_wp
7410                     surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
7411                     surf_usm_v(l)%thickness_window(m) = -1.0_wp
7412                     surf_usm_v(l)%thickness_green(m)  = -1.0_wp
7413                     surf_usm_v(l)%transmissivity(m)   = -1.0_wp
7414                 ELSE
7415                     surf_usm_v(l)%surface_types(m)    = usm_par(ii+1,jw,iw)
7416                     surf_usm_v(l)%albedo(:,m)         = usm_val(ij,jw,iw)
7417                     surf_usm_v(l)%thickness_wall(m)   = usm_val(ij+1,jw,iw)
7418                     surf_usm_v(l)%thickness_window(m) = usm_val(ij+1,jw,iw)
7419                     surf_usm_v(l)%thickness_green(m)  = usm_val(ij+1,jw,iw)
7420                     surf_usm_v(l)%transmissivity(m)   = 0.0_wp
7421                 ENDIF
7422              ELSE IF ( kw <= usm_par(ii+2,jw,iw) )  THEN
7423!
7424!--              wall zone
7425                 IF ( usm_par(ii+3,jw,iw) == 0 )  THEN
7426                     surf_usm_v(l)%surface_types(m)    = wall_category         !< default category for wall surface
7427                     surf_usm_v(l)%albedo(:,m)         = -1.0_wp
7428                     surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
7429                     surf_usm_v(l)%thickness_window(m) = -1.0_wp
7430                     surf_usm_v(l)%thickness_green(m)  = -1.0_wp
7431                     surf_usm_v(l)%transmissivity(m)   = -1.0_wp
7432                 ELSE
7433                     surf_usm_v(l)%surface_types(m)    = usm_par(ii+3,jw,iw)
7434                     surf_usm_v(l)%albedo(:,m)         = usm_val(ij+2,jw,iw)
7435                     surf_usm_v(l)%thickness_wall(m)   = usm_val(ij+3,jw,iw)
7436                     surf_usm_v(l)%thickness_window(m) = usm_val(ij+3,jw,iw)
7437                     surf_usm_v(l)%thickness_green(m)  = usm_val(ij+3,jw,iw)
7438                     surf_usm_v(l)%transmissivity(m)   = 0.0_wp
7439                 ENDIF
7440              ELSE IF ( kw <= usm_par(ii+4,jw,iw) )  THEN
7441!
7442!--              roof zone
7443                 IF ( usm_par(ii+5,jw,iw) == 0 )  THEN
7444                     surf_usm_v(l)%surface_types(m)    = roof_category         !< default category for roof surface
7445                     surf_usm_v(l)%albedo(:,m)         = -1.0_wp
7446                     surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
7447                     surf_usm_v(l)%thickness_window(m) = -1.0_wp
7448                     surf_usm_v(l)%thickness_green(m)  = -1.0_wp
7449                     surf_usm_v(l)%transmissivity(m)   = -1.0_wp
7450                 ELSE
7451                     surf_usm_v(l)%surface_types(m)    = usm_par(ii+5,jw,iw)
7452                     surf_usm_v(l)%albedo(:,m)         = usm_val(ij+4,jw,iw)
7453                     surf_usm_v(l)%thickness_wall(m)   = usm_val(ij+5,jw,iw)
7454                     surf_usm_v(l)%thickness_window(m) = usm_val(ij+5,jw,iw)
7455                     surf_usm_v(l)%thickness_green(m)  = usm_val(ij+5,jw,iw)
7456                     surf_usm_v(l)%transmissivity(m)   = 0.0_wp
7457                 ENDIF
7458              ELSE
7459                 WRITE(9,*) 'Problem reading USM data:'
7460                 WRITE(9,*) l,i,j,kw,topo_top_ind(j,i,0)
7461                 WRITE(9,*) ii,iw,jw,kw,topo_top_ind(jw,iw,0)
7462                 WRITE(9,*) usm_par(ii,jw,iw),usm_par(ii+1,jw,iw)
7463                 WRITE(9,*) usm_par(ii+2,jw,iw),usm_par(ii+3,jw,iw)
7464                 WRITE(9,*) usm_par(ii+4,jw,iw),usm_par(ii+5,jw,iw)
7465                 WRITE(9,*) kw,roof_height_limit,wall_category,roof_category
7466                 FLUSH(9)
7467!
7468!--              supply the default category
7469                 IF ( kw <= roof_height_limit ) THEN
7470                     surf_usm_v(l)%surface_types(m) = wall_category   !< default category for wall surface in wall zone
7471                 ELSE
7472                     surf_usm_v(l)%surface_types(m) = roof_category   !< default category for wall surface in roof zone
7473                 END IF
7474                 surf_usm_v(l)%albedo(:,m)         = -1.0_wp
7475                 surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
7476                 surf_usm_v(l)%thickness_window(m) = -1.0_wp
7477                 surf_usm_v(l)%thickness_green(m)  = -1.0_wp
7478                 surf_usm_v(l)%transmissivity(m)   = -1.0_wp
7479              ENDIF
7480!
7481!--           Find the type position
7482              it = surf_usm_v(l)%surface_types(m)
7483              ip = -99999
7484              DO k = 1, n_surface_types
7485                 IF ( surface_type_codes(k) == it )  THEN
7486                    ip = k
7487                    EXIT
7488                 ENDIF
7489              ENDDO
7490              IF ( ip == -99999 )  THEN
7491!
7492!--              wall category not found
7493                 WRITE (9, "(A,I7,A,3I5)") 'wall category ', it,  &
7494                                           ' not found  for i,j,k=', iw,jw,kw
7495                 FLUSH(9)
7496                 category = wall_category 
7497                 DO k = 1, n_surface_types
7498                    IF ( surface_type_codes(k) == category ) THEN
7499                       ip = k
7500                       EXIT
7501                    ENDIF
7502                 ENDDO
7503                 IF ( ip == -99999 )  THEN
7504!
7505!--                 default wall category not found
7506                    WRITE (9, "(A,I5,A,3I5)") 'Default wall category', category, ' not found!'
7507                    FLUSH(9)
7508                    ip = 1
7509                 ENDIF
7510              ENDIF
7511
7512!
7513!--           Albedo
7514              IF ( surf_usm_v(l)%albedo(ind_veg_wall,m) < 0.0_wp )  THEN
7515                 surf_usm_v(l)%albedo(:,m) = surface_params(ialbedo,ip)
7516              ENDIF
7517!--           Albedo type is 0 (custom), others are replaced later
7518              surf_usm_v(l)%albedo_type(:,m) = 0
7519!--           Transmissivity of the windows
7520              IF ( surf_usm_v(l)%transmissivity(m) < 0.0_wp )  THEN
7521                 surf_usm_v(l)%transmissivity(m) = 0.0_wp
7522              ENDIF
7523!
7524!--           emissivity of the wall
7525              surf_usm_v(l)%emissivity(:,m) = surface_params(iemiss,ip)
7526!           
7527!--           heat conductivity lambda S between air and wall ( W m-2 K-1 )
7528              surf_usm_v(l)%lambda_surf(m) = surface_params(ilambdas,ip)
7529              surf_usm_v(l)%lambda_surf_window(m) = surface_params(ilambdas,ip)
7530              surf_usm_v(l)%lambda_surf_green(m) = surface_params(ilambdas,ip)
7531!           
7532!--           roughness length
7533              surf_usm_v(l)%z0(m) = surface_params(irough,ip)
7534              surf_usm_v(l)%z0h(m) = surface_params(iroughh,ip)
7535              surf_usm_v(l)%z0q(m) = surface_params(iroughh,ip)
7536!           
7537!--           Surface skin layer heat capacity (J m-2 K-1 )
7538              surf_usm_v(l)%c_surface(m) = surface_params(icsurf,ip)
7539              surf_usm_v(l)%c_surface_window(m) = surface_params(icsurf,ip)
7540              surf_usm_v(l)%c_surface_green(m) = surface_params(icsurf,ip)
7541!           
7542!--           wall material parameters:
7543!--           thickness of the wall (m)
7544!--           missing values are replaced by default value for category
7545              IF ( surf_usm_v(l)%thickness_wall(m) <= 0.001_wp )  THEN
7546                   surf_usm_v(l)%thickness_wall(m) = surface_params(ithick,ip)
7547              ENDIF
7548              IF ( surf_usm_v(l)%thickness_window(m) <= 0.001_wp )  THEN
7549                   surf_usm_v(l)%thickness_window(m) = surface_params(ithick,ip)
7550              ENDIF
7551              IF ( surf_usm_v(l)%thickness_green(m) <= 0.001_wp )  THEN
7552                   surf_usm_v(l)%thickness_green(m) = surface_params(ithick,ip)
7553              ENDIF
7554!
7555!--           volumetric heat capacity rho*C of the wall ( J m-3 K-1 )
7556              surf_usm_v(l)%rho_c_wall(:,m) = surface_params(irhoC,ip)
7557              surf_usm_v(l)%rho_c_window(:,m) = surface_params(irhoC,ip)
7558              surf_usm_v(l)%rho_c_green(:,m) = surface_params(irhoC,ip)
7559!           
7560!--           thermal conductivity lambda H of the wall (W m-1 K-1 )
7561              surf_usm_v(l)%lambda_h(:,m) = surface_params(ilambdah,ip)
7562              surf_usm_v(l)%lambda_h_window(:,m) = surface_params(ilambdah,ip)
7563              surf_usm_v(l)%lambda_h_green(:,m) = surface_params(ilambdah,ip)
7564
7565           ENDDO
7566        ENDDO 
7567
7568!
7569!--     Initialize wall layer thicknesses. Please note, this will be removed
7570!--     after migration to Palm input data standard. 
7571        DO k = nzb_wall, nzt_wall
7572           zwn(k) = zwn_default(k)
7573           zwn_green(k) = zwn_default_green(k)
7574           zwn_window(k) = zwn_default_window(k)
7575        ENDDO
7576!
7577!--     apply for all particular surface grids. First for horizontal surfaces
7578        DO  m = 1, surf_usm_h%ns
7579           surf_usm_h%zw(:,m) = zwn(:) * surf_usm_h%thickness_wall(m)
7580           surf_usm_h%zw_green(:,m) = zwn_green(:) * surf_usm_h%thickness_green(m)
7581           surf_usm_h%zw_window(:,m) = zwn_window(:) * surf_usm_h%thickness_window(m)
7582        ENDDO
7583        DO  l = 0, 3
7584           DO  m = 1, surf_usm_v(l)%ns
7585              surf_usm_v(l)%zw(:,m) = zwn(:) * surf_usm_v(l)%thickness_wall(m)
7586              surf_usm_v(l)%zw_green(:,m) = zwn_green(:) * surf_usm_v(l)%thickness_green(m)
7587              surf_usm_v(l)%zw_window(:,m) = zwn_window(:) * surf_usm_v(l)%thickness_window(m)
7588           ENDDO
7589        ENDDO
7590
7591        IF ( debug_output )  CALL debug_message( 'usm_read_urban_surface_types', 'end' )
7592   
7593    END SUBROUTINE usm_read_urban_surface_types
7594
7595
7596!------------------------------------------------------------------------------!
7597! Description:
7598! ------------
7599!
7600!> This function advances through the list of local surfaces to find given
7601!> x, y, d, z coordinates
7602!------------------------------------------------------------------------------!
7603    PURE FUNCTION find_surface( x, y, z, d ) result(isurfl)
7604
7605        INTEGER(iwp), INTENT(in)                :: x, y, z, d
7606        INTEGER(iwp)                            :: isurfl
7607        INTEGER(iwp)                            :: isx, isy, isz
7608
7609        IF ( d == 0 ) THEN
7610           DO  isurfl = 1, surf_usm_h%ns
7611              isx = surf_usm_h%i(isurfl)
7612              isy = surf_usm_h%j(isurfl)
7613              isz = surf_usm_h%k(isurfl)
7614              IF ( isx==x .and. isy==y .and. isz==z )  RETURN
7615           ENDDO
7616        ELSE
7617           DO  isurfl = 1, surf_usm_v(d-1)%ns
7618              isx = surf_usm_v(d-1)%i(isurfl)
7619              isy = surf_usm_v(d-1)%j(isurfl)
7620              isz = surf_usm_v(d-1)%k(isurfl)
7621              IF ( isx==x .and. isy==y .and. isz==z )  RETURN
7622           ENDDO
7623        ENDIF
7624!
7625!--     coordinate not found
7626        isurfl = -1
7627
7628    END FUNCTION
7629
7630
7631!------------------------------------------------------------------------------!
7632! Description:
7633! ------------
7634!
7635!> This subroutine reads temperatures of respective material layers in walls,
7636!> roofs and ground from input files. Data in the input file must be in
7637!> standard order, i.e. horizontal surfaces first ordered by x, y and then
7638!> vertical surfaces ordered by x, y, direction, z
7639!------------------------------------------------------------------------------!
7640    SUBROUTINE usm_read_wall_temperature
7641
7642        INTEGER(iwp)                                          :: i, j, k, d, ii, iline  !> running indices
7643        INTEGER(iwp)                                          :: isurfl
7644        REAL(wp)                                              :: rtsurf
7645        REAL(wp), DIMENSION(nzb_wall:nzt_wall+1)              :: rtwall
7646
7647
7648        IF ( debug_output )  CALL debug_message( 'usm_read_wall_temperature', 'start' )
7649
7650        DO  ii = 0, io_blocks-1
7651            IF ( ii == io_group )  THEN
7652!
7653!--             open wall temperature file
7654                OPEN( 152, file='WALL_TEMPERATURE'//coupling_char, action='read', &
7655                           status='old', form='formatted', err=15 )
7656
7657                isurfl = 0
7658                iline = 1
7659                DO
7660                    rtwall = -9999.0_wp  !< for incomplete lines
7661                    READ( 152, *, err=13, end=14 )  i, j, k, d, rtsurf, rtwall
7662
7663                    IF ( nxl <= i .and. i <= nxr .and. &
7664                        nys <= j .and. j <= nyn)  THEN  !< local processor
7665!--                     identify surface id
7666                        isurfl = find_surface( i, j, k, d )
7667                        IF ( isurfl == -1 )  THEN
7668                            WRITE(message_string, '(a,4i5,a,i5,a)') 'Coordinates (xyzd) ', i, j, k, d, &
7669                                ' on line ', iline, &
7670                                ' in file WALL_TEMPERATURE are either not present or out of standard order of surfaces.'
7671                            CALL message( 'usm_read_wall_temperature', 'PA0521', 1, 2, 0, 6, 0 )
7672                        ENDIF
7673!
7674!--                     assign temperatures
7675                        IF ( d == 0 ) THEN
7676                           t_surf_wall_h(isurfl) = rtsurf
7677                           t_wall_h(:,isurfl) = rtwall(:)
7678                           t_window_h(:,isurfl) = rtwall(:)
7679                           t_green_h(:,isurfl) = rtwall(:)
7680                        ELSE
7681                           t_surf_wall_v(d-1)%t(isurfl) = rtsurf
7682                           t_wall_v(d-1)%t(:,isurfl) = rtwall(:)
7683                           t_window_v(d-1)%t(:,isurfl) = rtwall(:)
7684                           t_green_v(d-1)%t(:,isurfl) = rtwall(:)
7685                        ENDIF
7686                    ENDIF
7687
7688                    iline = iline + 1
7689                    CYCLE
7690 13                 WRITE(message_string, '(a,i5,a)') 'Error reading line ', iline, &
7691                        ' in file WALL_TEMPERATURE.'
7692                    CALL message( 'usm_read_wall_temperature', 'PA0522', 1, 2, 0, 6, 0 )
7693                ENDDO
7694 14             CLOSE(152)
7695                CYCLE
7696 15             message_string = 'file WALL_TEMPERATURE'//TRIM(coupling_char)//' does not exist'
7697                CALL message( 'usm_read_wall_temperature', 'PA0523', 1, 2, 0, 6, 0 )
7698            ENDIF
7699#if defined( __parallel )
7700            CALL MPI_BARRIER( comm2d, ierr )
7701#endif
7702        ENDDO
7703
7704        IF ( debug_output )  CALL debug_message( 'usm_read_wall_temperature', 'end' )
7705
7706    END SUBROUTINE usm_read_wall_temperature
7707
7708
7709
7710!------------------------------------------------------------------------------!
7711! Description:
7712! ------------
7713!> Solver for the energy balance at the ground/roof/wall surface.
7714!> It follows basic ideas and structure of lsm_energy_balance
7715!> with many simplifications and adjustments.
7716!> TODO better description
7717!> No calculation of window surface temperatures during spinup to increase
7718!> maximum possible timstep
7719!------------------------------------------------------------------------------!
7720    SUBROUTINE usm_surface_energy_balance( during_spinup )
7721
7722
7723        IMPLICIT NONE
7724
7725        INTEGER(iwp)                          :: i, j, k, l, m   !< running indices
7726       
7727        INTEGER(iwp) ::  i_off     !< offset to determine index of surface element, seen from atmospheric grid point, for x
7728        INTEGER(iwp) ::  j_off     !< offset to determine index of surface element, seen from atmospheric grid point, for y
7729        INTEGER(iwp) ::  k_off     !< offset to determine index of surface element, seen from atmospheric grid point, for z
7730
7731        LOGICAL                               :: during_spinup      !< flag indicating soil/wall spinup phase
7732       
7733        REAL(wp)                              :: frac_win           !< window fraction, used to restore original values during spinup
7734        REAL(wp)                              :: frac_green         !< green fraction, used to restore original values during spinup
7735        REAL(wp)                              :: frac_wall          !< wall fraction, used to restore original values during spinup
7736        REAL(wp)                              :: stend_wall         !< surface tendency
7737       
7738        REAL(wp)                              :: stend_window       !< surface tendency
7739        REAL(wp)                              :: stend_green        !< surface tendency
7740        REAL(wp)                              :: coef_1             !< first coeficient for prognostic equation
7741        REAL(wp)                              :: coef_window_1      !< first coeficient for prognostic window equation
7742        REAL(wp)                              :: coef_green_1       !< first coeficient for prognostic green wall equation
7743        REAL(wp)                              :: coef_2             !< second  coeficient for prognostic equation
7744        REAL(wp)                              :: coef_window_2      !< second  coeficient for prognostic window equation
7745        REAL(wp)                              :: coef_green_2       !< second  coeficient for prognostic green wall equation
7746        REAL(wp)                              :: rho_cp             !< rho_wall_surface * c_p
7747        REAL(wp)                              :: f_shf              !< factor for shf_eb
7748        REAL(wp)                              :: f_shf_window       !< factor for shf_eb window
7749        REAL(wp)                              :: f_shf_green        !< factor for shf_eb green wall
7750        REAL(wp)                              :: lambda_surface     !< current value of lambda_surface (heat conductivity
7751                                                                    !<between air and wall)
7752        REAL(wp)                              :: lambda_surface_window  !< current value of lambda_surface (heat conductivity
7753                                                                        !< between air and window)
7754        REAL(wp)                              :: lambda_surface_green   !< current value of lambda_surface (heat conductivity
7755                                                                        !< between air and greeb wall)
7756       
7757        REAL(wp)                              :: dtime              !< simulated time of day (in UTC)
7758        INTEGER(iwp)                          :: dhour              !< simulated hour of day (in UTC)
7759        REAL(wp)                              :: acoef              !< actual coefficient of diurnal profile of anthropogenic heat
7760        REAL(wp) ::  f1,          &  !< resistance correction term 1
7761                     f2,          &  !< resistance correction term 2
7762                     f3,          &  !< resistance correction term 3
7763                     e,           &  !< water vapour pressure
7764                     e_s,         &  !< water vapour saturation pressure
7765                     e_s_dt,      &  !< derivate of e_s with respect to T
7766                     tend,        &  !< tendency
7767                     dq_s_dt,     &  !< derivate of q_s with respect to T
7768                     f_qsws,      &  !< factor for qsws
7769                     f_qsws_veg,  &  !< factor for qsws_veg
7770                     f_qsws_liq,  &  !< factor for qsws_liq
7771                     m_liq_max,   &  !< maxmimum value of the liq. water reservoir
7772                     qv1,         &  !< specific humidity at first grid level
7773                     m_max_depth = 0.0002_wp, &  !< Maximum capacity of the water reservoir (m)
7774                     rho_lv,      &  !< frequently used parameter for green layers
7775                     drho_l_lv,   &  !< frequently used parameter for green layers
7776                     q_s             !< saturation specific humidity
7777
7778
7779        IF ( debug_output_timestep )  THEN
7780           WRITE( debug_string, * ) 'usm_surface_energy_balance | during_spinup: ',&
7781                                    during_spinup
7782           CALL debug_message( debug_string, 'start' )
7783        ENDIF
7784!
7785!--     Index offset of surface element point with respect to adjoining
7786!--     atmospheric grid point
7787        k_off = surf_usm_h%koff
7788        j_off = surf_usm_h%joff
7789        i_off = surf_usm_h%ioff
7790       
7791!       
7792!--     First, treat horizontal surface elements
7793        !$OMP PARALLEL PRIVATE (m, i, j, k, lambda_surface, lambda_surface_window,                 &
7794        !$OMP&                  lambda_surface_green, qv1, rho_cp, rho_lv, drho_l_lv, f_shf,       &
7795        !$OMP&                  f_shf_window, f_shf_green, m_total, f1, f2, e_s, e, f3, f_qsws_veg,&
7796        !$OMP&                  q_s, f_qsws_liq, f_qsws, e_s_dt, dq_s_dt, coef_1, coef_window_1,   &
7797        !$OMP&                  coef_green_1, coef_2, coef_window_2, coef_green_2, stend_wall,     &
7798        !$OMP&                  stend_window, stend_green, tend, m_liq_max)
7799        !$OMP DO SCHEDULE (STATIC)
7800        DO  m = 1, surf_usm_h%ns
7801!
7802!--       During spinup set green and window fraction to zero and restore
7803!--       at the end of the loop.
7804!--       Note, this is a temporary fix and need to be removed later. 
7805           IF ( during_spinup )  THEN
7806              frac_win   = surf_usm_h%frac(ind_wat_win,m)
7807              frac_wall  = surf_usm_h%frac(ind_veg_wall,m)
7808              frac_green = surf_usm_h%frac(ind_pav_green,m)
7809              surf_usm_h%frac(ind_wat_win,m)   = 0.0_wp
7810              surf_usm_h%frac(ind_veg_wall,m)  = 1.0_wp
7811              surf_usm_h%frac(ind_pav_green,m) = 0.0_wp
7812           ENDIF
7813!
7814!--        Get indices of respective grid point
7815           i = surf_usm_h%i(m)
7816           j = surf_usm_h%j(m)
7817           k = surf_usm_h%k(m)
7818!
7819!--        TODO - how to calculate lambda_surface for horizontal surfaces
7820!--        (lambda_surface is set according to stratification in land surface model)
7821!--        MS: ???
7822           IF ( surf_usm_h%ol(m) >= 0.0_wp )  THEN
7823              lambda_surface = surf_usm_h%lambda_surf(m)
7824              lambda_surface_window = surf_usm_h%lambda_surf_window(m)
7825              lambda_surface_green = surf_usm_h%lambda_surf_green(m)
7826           ELSE
7827              lambda_surface = surf_usm_h%lambda_surf(m)
7828              lambda_surface_window = surf_usm_h%lambda_surf_window(m)
7829              lambda_surface_green = surf_usm_h%lambda_surf_green(m)
7830           ENDIF
7831
7832!            pt1  = pt(k,j,i)
7833           IF ( humidity )  THEN
7834              qv1 = q(k,j,i)
7835           ELSE
7836              qv1 = 0.0_wp
7837           ENDIF
7838!
7839!--        calculate rho * c_p coefficient at surface layer
7840           rho_cp  = c_p * hyp(k) / ( r_d * surf_usm_h%pt1(m) * exner(k) )
7841
7842           IF ( surf_usm_h%frac(ind_pav_green,m) > 0.0_wp )  THEN
7843!
7844!--           Calculate frequently used parameters
7845              rho_lv    = rho_cp / c_p * l_v
7846              drho_l_lv = 1.0_wp / (rho_l * l_v)
7847           ENDIF
7848
7849!
7850!--        Calculate aerodyamic resistance.
7851!--        Calculation for horizontal surfaces follows LSM formulation
7852!--        pt, us, ts are not available for the prognostic time step,
7853!--        data from the last time step is used here.
7854!
7855!--        Workaround: use single r_a as stability is only treated for the
7856!--        average temperature
7857           surf_usm_h%r_a(m) = ( surf_usm_h%pt1(m) - surf_usm_h%pt_surface(m) ) /&
7858                               ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )   
7859           surf_usm_h%r_a_window(m) = surf_usm_h%r_a(m)
7860           surf_usm_h%r_a_green(m)  = surf_usm_h%r_a(m)
7861
7862!            r_a = ( surf_usm_h%pt1(m) - t_surf_h(m) / exner(k) ) /                              &
7863!                  ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )
7864!            r_a_window = ( surf_usm_h%pt1(m) - t_surf_window_h(m) / exner(k) ) /                &
7865!                  ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )
7866!            r_a_green = ( surf_usm_h%pt1(m) - t_surf_green_h(m) / exner(k) ) /                  &
7867!                  ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )
7868               
7869!--        Make sure that the resistance does not drop to zero
7870           IF ( surf_usm_h%r_a(m)        < 1.0_wp )                            &
7871               surf_usm_h%r_a(m)        = 1.0_wp
7872           IF ( surf_usm_h%r_a_green(m)  < 1.0_wp )                            &
7873               surf_usm_h%r_a_green(m)  = 1.0_wp
7874           IF ( surf_usm_h%r_a_window(m) < 1.0_wp )                            &
7875               surf_usm_h%r_a_window(m) = 1.0_wp
7876             
7877!
7878!--        Make sure that the resistacne does not exceed a maxmium value in case
7879!--        of zero velocities
7880           IF ( surf_usm_h%r_a(m)        > 300.0_wp )                          &
7881               surf_usm_h%r_a(m)        = 300.0_wp
7882           IF ( surf_usm_h%r_a_green(m)  > 300.0_wp )                          &
7883               surf_usm_h%r_a_green(m)  = 300.0_wp
7884           IF ( surf_usm_h%r_a_window(m) > 300.0_wp )                          &
7885               surf_usm_h%r_a_window(m) = 300.0_wp               
7886               
7887!
7888!--        factor for shf_eb
7889           f_shf  = rho_cp / surf_usm_h%r_a(m)
7890           f_shf_window  = rho_cp / surf_usm_h%r_a_window(m)
7891           f_shf_green  = rho_cp / surf_usm_h%r_a_green(m)
7892       
7893
7894           IF ( surf_usm_h%frac(ind_pav_green,m) > 0.0_wp ) THEN
7895!--           Adapted from LSM:
7896!--           Second step: calculate canopy resistance r_canopy
7897!--           f1-f3 here are defined as 1/f1-f3 as in ECMWF documentation
7898 
7899!--           f1: correction for incoming shortwave radiation (stomata close at
7900!--           night)
7901              f1 = MIN( 1.0_wp, ( 0.004_wp * surf_usm_h%rad_sw_in(m) + 0.05_wp ) / &
7902                               (0.81_wp * (0.004_wp * surf_usm_h%rad_sw_in(m)      &
7903                                + 1.0_wp)) )
7904!
7905!--           f2: correction for soil moisture availability to plants (the
7906!--           integrated soil moisture must thus be considered here)
7907!--           f2 = 0 for very dry soils
7908              m_total = 0.0_wp
7909              DO  k = nzb_wall, nzt_wall+1
7910                  m_total = m_total + rootfr_h(nzb_wall,m)                              &
7911                            * MAX(swc_h(nzb_wall,m),wilt_h(nzb_wall,m))
7912              ENDDO 
7913   
7914              IF ( m_total > wilt_h(nzb_wall,m)  .AND.  m_total < fc_h(nzb_wall,m) )  THEN
7915                 f2 = ( m_total - wilt_h(nzb_wall,m) ) / (fc_h(nzb_wall,m) - wilt_h(nzb_wall,m) )
7916              ELSEIF ( m_total >= fc_h(nzb_wall,m) )  THEN
7917                 f2 = 1.0_wp
7918              ELSE
7919                 f2 = 1.0E-20_wp
7920              ENDIF
7921       
7922!
7923!--          Calculate water vapour pressure at saturation
7924              e_s = 0.01_wp * 610.78_wp * EXP( 17.269_wp * ( t_surf_green_h(m) &
7925                            - 273.16_wp ) / ( t_surf_green_h(m) - 35.86_wp ) )
7926!
7927!--           f3: correction for vapour pressure deficit
7928              IF ( surf_usm_h%g_d(m) /= 0.0_wp )  THEN
7929!
7930!--           Calculate vapour pressure
7931                 e  = qv1 * surface_pressure / ( qv1 + 0.622_wp )
7932                 f3 = EXP ( - surf_usm_h%g_d(m) * (e_s - e) )
7933              ELSE
7934                 f3 = 1.0_wp
7935              ENDIF
7936
7937!
7938!--           Calculate canopy resistance. In case that c_veg is 0 (bare soils),
7939!--           this calculation is obsolete, as r_canopy is not used below.
7940!--           To do: check for very dry soil -> r_canopy goes to infinity
7941              surf_usm_h%r_canopy(m) = surf_usm_h%r_canopy_min(m) /                   &
7942                              ( surf_usm_h%lai(m) * f1 * f2 * f3 + 1.0E-20_wp )
7943
7944!
7945!--           Calculate the maximum possible liquid water amount on plants and
7946!--           bare surface. For vegetated surfaces, a maximum depth of 0.2 mm is
7947!--           assumed, while paved surfaces might hold up 1 mm of water. The
7948!--           liquid water fraction for paved surfaces is calculated after
7949!--           Noilhan & Planton (1989), while the ECMWF formulation is used for
7950!--           vegetated surfaces and bare soils.
7951              m_liq_max = m_max_depth * ( surf_usm_h%lai(m) )
7952
7953              surf_usm_h%c_liq(m) = MIN( 1.0_wp, ( m_liq_usm_h%var_usm_1d(m) / m_liq_max )**0.67 )
7954!
7955!--           Calculate saturation specific humidity
7956              q_s = 0.622_wp * e_s / ( surface_pressure - e_s )
7957!
7958!--           In case of dewfall, set evapotranspiration to zero
7959!--           All super-saturated water is then removed from the air
7960              IF ( humidity  .AND.  q_s <= qv1 )  THEN
7961                 surf_usm_h%r_canopy(m) = 0.0_wp
7962              ENDIF
7963
7964!
7965!--           Calculate coefficients for the total evapotranspiration
7966!--           In case of water surface, set vegetation and soil fluxes to zero.
7967!--           For pavements, only evaporation of liquid water is possible.
7968              f_qsws_veg  = rho_lv *                                           &
7969                                ( 1.0_wp        - surf_usm_h%c_liq(m)    ) /   &
7970                                ( surf_usm_h%r_a_green(m) + surf_usm_h%r_canopy(m) )
7971              f_qsws_liq  = rho_lv * surf_usm_h%c_liq(m)   /                   &
7972                                  surf_usm_h%r_a_green(m)
7973       
7974              f_qsws = f_qsws_veg + f_qsws_liq
7975!
7976!--           Calculate derivative of q_s for Taylor series expansion
7977              e_s_dt = e_s * ( 17.269_wp / ( t_surf_green_h(m) - 35.86_wp) -   &
7978                               17.269_wp*( t_surf_green_h(m) - 273.16_wp)      &
7979                              / ( t_surf_green_h(m) - 35.86_wp)**2 )
7980       
7981              dq_s_dt = 0.622_wp * e_s_dt / ( surface_pressure - e_s_dt )
7982           ENDIF
7983!
7984!--        add LW up so that it can be removed in prognostic equation
7985           surf_usm_h%rad_net_l(m) = surf_usm_h%rad_sw_in(m)  -                &
7986                                     surf_usm_h%rad_sw_out(m) +                &
7987                                     surf_usm_h%rad_lw_in(m)  -                &
7988                                     surf_usm_h%rad_lw_out(m)
7989!
7990!--     numerator of the prognostic equation
7991!--     Todo: Adjust to tile approach. So far, emissivity for wall (element 0)
7992!--     is used
7993           coef_1 = surf_usm_h%rad_net_l(m) +                                  & 
7994                 ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity(ind_veg_wall,m) * &
7995                                       sigma_sb * t_surf_wall_h(m) ** 4 +      & 
7996                                       f_shf * surf_usm_h%pt1(m) +             &
7997                                       lambda_surface * t_wall_h(nzb_wall,m)
7998           IF ( ( .NOT. during_spinup ) .AND. (surf_usm_h%frac(ind_wat_win,m) > 0.0_wp ) ) THEN
7999              coef_window_1 = surf_usm_h%rad_net_l(m) +                           & 
8000                      ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity(ind_wat_win,m)  &
8001                                          * sigma_sb * t_surf_window_h(m) ** 4 +  & 
8002                                          f_shf_window * surf_usm_h%pt1(m) +      &
8003                                          lambda_surface_window * t_window_h(nzb_wall,m)
8004           ENDIF                 
8005           IF ( ( humidity ) .AND. ( surf_usm_h%frac(ind_pav_green,m) > 0.0_wp ) )  THEN
8006                    coef_green_1 = surf_usm_h%rad_net_l(m) +                                 & 
8007                   ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity(ind_pav_green,m) * sigma_sb * &
8008                                       t_surf_green_h(m) ** 4 +                  & 
8009                                          f_shf_green * surf_usm_h%pt1(m) + f_qsws * ( qv1 - q_s    &
8010                                          + dq_s_dt * t_surf_green_h(m) )        &
8011                                          +lambda_surface_green * t_green_h(nzb_wall,m)
8012           ELSE
8013           coef_green_1 = surf_usm_h%rad_net_l(m) +                            & 
8014                 ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity(ind_pav_green,m) *&
8015                                       sigma_sb * t_surf_green_h(m) ** 4 +     & 
8016                                       f_shf_green * surf_usm_h%pt1(m) +       &
8017                                       lambda_surface_green * t_green_h(nzb_wall,m)
8018          ENDIF
8019!
8020!--        denominator of the prognostic equation
8021           coef_2 = 4.0_wp * surf_usm_h%emissivity(ind_veg_wall,m) *           &
8022                             sigma_sb * t_surf_wall_h(m) ** 3                  &
8023                           + lambda_surface + f_shf / exner(k)
8024           IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_h%frac(ind_wat_win,m) > 0.0_wp ) ) THEN
8025              coef_window_2 = 4.0_wp * surf_usm_h%emissivity(ind_wat_win,m) *     &
8026                                sigma_sb * t_surf_window_h(m) ** 3                &
8027                              + lambda_surface_window + f_shf_window / exner(k)
8028           ENDIF
8029           IF ( ( humidity ) .AND. ( surf_usm_h%frac(ind_pav_green,m) > 0.0_wp ) )  THEN
8030              coef_green_2 = 4.0_wp * surf_usm_h%emissivity(ind_pav_green,m) * sigma_sb *    &
8031                                t_surf_green_h(m) ** 3 + f_qsws * dq_s_dt                    &
8032                              + lambda_surface_green + f_shf_green / exner(k)
8033           ELSE
8034           coef_green_2 = 4.0_wp * surf_usm_h%emissivity(ind_pav_green,m) * sigma_sb *    &
8035                             t_surf_green_h(m) ** 3                                       &
8036                           + lambda_surface_green + f_shf_green / exner(k)
8037           ENDIF
8038!
8039!--        implicit solution when the surface layer has no heat capacity,
8040!--        otherwise use RK3 scheme.
8041           t_surf_wall_h_p(m) = ( coef_1 * dt_3d * tsc(2) +                        &
8042                             surf_usm_h%c_surface(m) * t_surf_wall_h(m) ) /        & 
8043                           ( surf_usm_h%c_surface(m) + coef_2 * dt_3d * tsc(2) ) 
8044           IF (( .NOT. during_spinup ) .AND. (surf_usm_h%frac(ind_wat_win,m) > 0.0_wp)) THEN
8045              t_surf_window_h_p(m) = ( coef_window_1 * dt_3d * tsc(2) +                        &
8046                                surf_usm_h%c_surface_window(m) * t_surf_window_h(m) ) /        & 
8047                              ( surf_usm_h%c_surface_window(m) + coef_window_2 * dt_3d * tsc(2) )
8048           ENDIF
8049           t_surf_green_h_p(m) = ( coef_green_1 * dt_3d * tsc(2) +                        &
8050                             surf_usm_h%c_surface_green(m) * t_surf_green_h(m) ) /        & 
8051                           ( surf_usm_h%c_surface_green(m) + coef_green_2 * dt_3d * tsc(2) ) 
8052!
8053!--        add RK3 term
8054           t_surf_wall_h_p(m) = t_surf_wall_h_p(m) + dt_3d * tsc(3) *         &
8055                           surf_usm_h%tt_surface_wall_m(m)
8056
8057           t_surf_window_h_p(m) = t_surf_window_h_p(m) + dt_3d * tsc(3) *     &
8058                           surf_usm_h%tt_surface_window_m(m)
8059
8060           t_surf_green_h_p(m) = t_surf_green_h_p(m) + dt_3d * tsc(3) *       &
8061                           surf_usm_h%tt_surface_green_m(m)
8062!
8063!--        Store surface temperature on pt_surface. Further, in case humidity is used
8064!--        store also vpt_surface, which is, due to the lack of moisture on roofs simply
8065!--        assumed to be the surface temperature.
8066           surf_usm_h%pt_surface(m) = ( surf_usm_h%frac(ind_veg_wall,m) * t_surf_wall_h_p(m)   &
8067                               + surf_usm_h%frac(ind_wat_win,m) * t_surf_window_h_p(m)         &
8068                               + surf_usm_h%frac(ind_pav_green,m) * t_surf_green_h_p(m) )      &
8069                               / exner(k)
8070                               
8071           IF ( humidity )  surf_usm_h%vpt_surface(m) =                        &
8072                                                   surf_usm_h%pt_surface(m)
8073!
8074!--        calculate true tendency
8075           stend_wall = ( t_surf_wall_h_p(m) - t_surf_wall_h(m) - dt_3d * tsc(3) *              &
8076                     surf_usm_h%tt_surface_wall_m(m)) / ( dt_3d  * tsc(2) )
8077           stend_window = ( t_surf_window_h_p(m) - t_surf_window_h(m) - dt_3d * tsc(3) *        &
8078                     surf_usm_h%tt_surface_window_m(m)) / ( dt_3d  * tsc(2) )
8079           stend_green = ( t_surf_green_h_p(m) - t_surf_green_h(m) - dt_3d * tsc(3) *           &
8080                     surf_usm_h%tt_surface_green_m(m)) / ( dt_3d  * tsc(2) )
8081!
8082!--        calculate t_surf tendencies for the next Runge-Kutta step
8083           IF ( timestep_scheme(1:5) == 'runge' )  THEN
8084              IF ( intermediate_timestep_count == 1 )  THEN
8085                 surf_usm_h%tt_surface_wall_m(m) = stend_wall
8086                 surf_usm_h%tt_surface_window_m(m) = stend_window
8087                 surf_usm_h%tt_surface_green_m(m) = stend_green
8088              ELSEIF ( intermediate_timestep_count <                          &
8089                        intermediate_timestep_count_max )  THEN
8090                 surf_usm_h%tt_surface_wall_m(m) = -9.5625_wp * stend_wall +       &
8091                                     5.3125_wp * surf_usm_h%tt_surface_wall_m(m)
8092                 surf_usm_h%tt_surface_window_m(m) = -9.5625_wp * stend_window +   &
8093                                     5.3125_wp * surf_usm_h%tt_surface_window_m(m)
8094                 surf_usm_h%tt_surface_green_m(m) = -9.5625_wp * stend_green +     &
8095                                     5.3125_wp * surf_usm_h%tt_surface_green_m(m)
8096              ENDIF
8097           ENDIF
8098!
8099!--        in case of fast changes in the skin temperature, it is required to
8100!--        update the radiative fluxes in order to keep the solution stable
8101           IF ( ( ( ABS( t_surf_wall_h_p(m)   - t_surf_wall_h(m) )   > 1.0_wp )   .OR. &
8102                (   ABS( t_surf_green_h_p(m)  - t_surf_green_h(m) )  > 1.0_wp )   .OR. &
8103                (   ABS( t_surf_window_h_p(m) - t_surf_window_h(m) ) > 1.0_wp ) )      &
8104                   .AND.  unscheduled_radiation_calls  )  THEN
8105              force_radiation_call_l = .TRUE.
8106           ENDIF
8107!
8108!--        calculate fluxes
8109!--        rad_net_l is never used!
8110           surf_usm_h%rad_net_l(m) = surf_usm_h%rad_net_l(m) +                           &
8111                                     surf_usm_h%frac(ind_veg_wall,m) *                   &
8112                                     sigma_sb * surf_usm_h%emissivity(ind_veg_wall,m) *  &
8113                                     ( t_surf_wall_h_p(m)**4 - t_surf_wall_h(m)**4 )     &
8114                                    + surf_usm_h%frac(ind_wat_win,m) *                   &
8115                                     sigma_sb * surf_usm_h%emissivity(ind_wat_win,m) *   &
8116                                     ( t_surf_window_h_p(m)**4 - t_surf_window_h(m)**4 ) &
8117                                    + surf_usm_h%frac(ind_pav_green,m) *                 &
8118                                     sigma_sb * surf_usm_h%emissivity(ind_pav_green,m) * &
8119                                     ( t_surf_green_h_p(m)**4 - t_surf_green_h(m)**4 )
8120
8121           surf_usm_h%wghf_eb(m)   = lambda_surface *                                    &
8122                                      ( t_surf_wall_h_p(m) - t_wall_h(nzb_wall,m) )
8123           surf_usm_h%wghf_eb_green(m)  = lambda_surface_green *                         &
8124                                          ( t_surf_green_h_p(m) - t_green_h(nzb_wall,m) )
8125           surf_usm_h%wghf_eb_window(m) = lambda_surface_window *                        &
8126                                           ( t_surf_window_h_p(m) - t_window_h(nzb_wall,m) )
8127
8128!
8129!--        ground/wall/roof surface heat flux
8130           surf_usm_h%wshf_eb(m)   = - f_shf  * ( surf_usm_h%pt1(m) - t_surf_wall_h_p(m) / exner(k) ) *          &
8131                                       surf_usm_h%frac(ind_veg_wall,m)         &
8132                                     - f_shf_window  * ( surf_usm_h%pt1(m) - t_surf_window_h_p(m) / exner(k) ) * &
8133                                       surf_usm_h%frac(ind_wat_win,m)          &
8134                                     - f_shf_green  * ( surf_usm_h%pt1(m) - t_surf_green_h_p(m) / exner(k) ) *   &
8135                                       surf_usm_h%frac(ind_pav_green,m)
8136!           
8137!--        store kinematic surface heat fluxes for utilization in other processes
8138!--        diffusion_s, surface_layer_fluxes,...
8139           surf_usm_h%shf(m) = surf_usm_h%wshf_eb(m) / c_p
8140!
8141!--        If the indoor model is applied, further add waste heat from buildings to the
8142!--        kinematic flux.
8143           IF ( indoor_model )  THEN
8144              surf_usm_h%shf(m) = surf_usm_h%shf(m) + surf_usm_h%waste_heat(m) / c_p
8145           ENDIF
8146     
8147
8148           IF (surf_usm_h%frac(ind_pav_green,m) > 0.0_wp) THEN
8149             
8150           
8151              IF ( humidity )  THEN
8152                 surf_usm_h%qsws(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt                     &
8153                                 * t_surf_green_h(m) - dq_s_dt *               &
8154                                   t_surf_green_h_p(m) )
8155       
8156                 surf_usm_h%qsws_veg(m)  = - f_qsws_veg  * ( qv1 - q_s                      &
8157                                     + dq_s_dt * t_surf_green_h(m) - dq_s_dt   &
8158                                     * t_surf_green_h_p(m) )
8159       
8160                 surf_usm_h%qsws_liq(m)  = - f_qsws_liq  * ( qv1 - q_s                      &
8161                                     + dq_s_dt * t_surf_green_h(m) - dq_s_dt   &
8162                                     * t_surf_green_h_p(m) )
8163                                     
8164              ENDIF
8165 
8166!
8167!--           Calculate the true surface resistance
8168              IF ( .NOT.  humidity )  THEN
8169                 surf_usm_h%r_s(m) = 1.0E10_wp
8170              ELSE
8171                 surf_usm_h%r_s(m) = - rho_lv * ( qv1 - q_s + dq_s_dt                       &
8172                                 *  t_surf_green_h(m) - dq_s_dt *              &
8173                                   t_surf_green_h_p(m) ) /                     &
8174                                   (surf_usm_h%qsws(m) + 1.0E-20)  - surf_usm_h%r_a_green(m)
8175              ENDIF
8176 
8177!
8178!--           Calculate change in liquid water reservoir due to dew fall or
8179!--           evaporation of liquid water
8180              IF ( humidity )  THEN
8181!
8182!--              If precipitation is activated, add rain water to qsws_liq
8183!--              and qsws_soil according the the vegetation coverage.
8184!--              precipitation_rate is given in mm.
8185                 IF ( precipitation )  THEN
8186
8187!
8188!--                 Add precipitation to liquid water reservoir, if possible.
8189!--                 Otherwise, add the water to soil. In case of
8190!--                 pavements, the exceeding water amount is implicitely removed
8191!--                 as runoff as qsws_soil is then not used in the soil model
8192                    IF ( m_liq_usm_h%var_usm_1d(m) /= m_liq_max )  THEN
8193                       surf_usm_h%qsws_liq(m) = surf_usm_h%qsws_liq(m)                &
8194                                        + surf_usm_h%frac(ind_pav_green,m) * prr(k+k_off,j+j_off,i+i_off)&
8195                                        * hyrho(k+k_off)                              &
8196                                        * 0.001_wp * rho_l * l_v
8197                   ENDIF
8198
8199                 ENDIF
8200
8201!
8202!--              If the air is saturated, check the reservoir water level
8203                 IF ( surf_usm_h%qsws(m) < 0.0_wp )  THEN
8204!
8205!--                 Check if reservoir is full (avoid values > m_liq_max)
8206!--                 In that case, qsws_liq goes to qsws_soil. In this
8207!--                 case qsws_veg is zero anyway (because c_liq = 1),       
8208!--                 so that tend is zero and no further check is needed
8209                    IF ( m_liq_usm_h%var_usm_1d(m) == m_liq_max )  THEN
8210!                      surf_usm_h%qsws_soil(m) = surf_usm_h%qsws_soil(m) + surf_usm_h%qsws_liq(m)
8211                       surf_usm_h%qsws_liq(m)  = 0.0_wp
8212                    ENDIF
8213
8214!
8215!--                 In case qsws_veg becomes negative (unphysical behavior),
8216!--                 let the water enter the liquid water reservoir as dew on the
8217!--                 plant
8218                    IF ( surf_usm_h%qsws_veg(m) < 0.0_wp )  THEN
8219                       surf_usm_h%qsws_liq(m) = surf_usm_h%qsws_liq(m) + surf_usm_h%qsws_veg(m)
8220                       surf_usm_h%qsws_veg(m) = 0.0_wp
8221                    ENDIF
8222                 ENDIF                   
8223 
8224                 surf_usm_h%qsws(m) = surf_usm_h%qsws(m) / l_v
8225       
8226                 tend = - surf_usm_h%qsws_liq(m) * drho_l_lv
8227                 m_liq_usm_h_p%var_usm_1d(m) = m_liq_usm_h%var_usm_1d(m) + dt_3d *    &
8228                                               ( tsc(2) * tend +                      &
8229                                                 tsc(3) * tm_liq_usm_h_m%var_usm_1d(m) )
8230!
8231!--             Check if reservoir is overfull -> reduce to maximum
8232!--             (conservation of water is violated here)
8233                 m_liq_usm_h_p%var_usm_1d(m) = MIN( m_liq_usm_h_p%var_usm_1d(m),m_liq_max )
8234 
8235!
8236!--             Check if reservoir is empty (avoid values < 0.0)
8237!--             (conservation of water is violated here)
8238                 m_liq_usm_h_p%var_usm_1d(m) = MAX( m_liq_usm_h_p%var_usm_1d(m), 0.0_wp )
8239!
8240!--             Calculate m_liq tendencies for the next Runge-Kutta step
8241                 IF ( timestep_scheme(1:5) == 'runge' )  THEN
8242                    IF ( intermediate_timestep_count == 1 )  THEN
8243                       tm_liq_usm_h_m%var_usm_1d(m) = tend
8244                    ELSEIF ( intermediate_timestep_count <                            &
8245                             intermediate_timestep_count_max )  THEN
8246                       tm_liq_usm_h_m%var_usm_1d(m) = -9.5625_wp * tend +             &
8247                                                     5.3125_wp * tm_liq_usm_h_m%var_usm_1d(m)
8248                    ENDIF
8249                 ENDIF
8250 
8251              ENDIF
8252           ELSE
8253              surf_usm_h%r_s(m) = 1.0E10_wp
8254           ENDIF
8255!
8256!--        During spinup green and window fraction are set to zero. Here, the original
8257!--        values are restored.
8258           IF ( during_spinup )  THEN
8259              surf_usm_h%frac(ind_wat_win,m)   = frac_win
8260              surf_usm_h%frac(ind_veg_wall,m)  = frac_wall
8261              surf_usm_h%frac(ind_pav_green,m) = frac_green
8262           ENDIF
8263 
8264       ENDDO
8265!
8266!--    Now, treat vertical surface elements
8267       !$OMP DO SCHEDULE (STATIC)
8268       DO  l = 0, 3
8269           DO  m = 1, surf_usm_v(l)%ns
8270!
8271!--           During spinup set green and window fraction to zero and restore
8272!--           at the end of the loop.
8273!--           Note, this is a temporary fix and need to be removed later.
8274              IF ( during_spinup )  THEN
8275                 frac_win   = surf_usm_v(l)%frac(ind_wat_win,m)
8276                 frac_wall  = surf_usm_v(l)%frac(ind_veg_wall,m)
8277                 frac_green = surf_usm_v(l)%frac(ind_pav_green,m)
8278                 surf_usm_v(l)%frac(ind_wat_win,m)   = 0.0_wp
8279                 surf_usm_v(l)%frac(ind_veg_wall,m)  = 1.0_wp
8280                 surf_usm_v(l)%frac(ind_pav_green,m) = 0.0_wp
8281              ENDIF
8282!
8283!--          Get indices of respective grid point
8284              i = surf_usm_v(l)%i(m)
8285              j = surf_usm_v(l)%j(m)
8286              k = surf_usm_v(l)%k(m)
8287 
8288!
8289!--          TODO - how to calculate lambda_surface for horizontal (??? do you mean verical ???) surfaces
8290!--          (lambda_surface is set according to stratification in land surface model).
8291!--          Please note, for vertical surfaces no ol is defined, since
8292!--          stratification is not considered in this case.
8293              lambda_surface = surf_usm_v(l)%lambda_surf(m)
8294              lambda_surface_window = surf_usm_v(l)%lambda_surf_window(m)
8295              lambda_surface_green = surf_usm_v(l)%lambda_surf_green(m)
8296 
8297!            pt1  = pt(k,j,i)
8298              IF ( humidity )  THEN
8299                 qv1 = q(k,j,i)
8300              ELSE
8301                 qv1 = 0.0_wp
8302              ENDIF
8303!
8304!--          calculate rho * c_p coefficient at wall layer
8305              rho_cp  = c_p * hyp(k) / ( r_d * surf_usm_v(l)%pt1(m) * exner(k) )
8306             
8307              IF (surf_usm_v(l)%frac(1,m) > 0.0_wp )  THEN
8308!
8309!--            Calculate frequently used parameters
8310                 rho_lv    = rho_cp / c_p * l_v
8311                 drho_l_lv = 1.0_wp / (rho_l * l_v)
8312              ENDIF
8313 
8314!--          Calculation of r_a for vertical surfaces
8315!--
8316!--          heat transfer coefficient for forced convection along vertical walls
8317!--          follows formulation in TUF3d model (Krayenhoff & Voogt, 2006)
8318!--           
8319!--          H = httc (Tsfc - Tair)
8320!--          httc = rw * (11.8 + 4.2 * Ueff) - 4.0
8321!--           
8322!--                rw: wall patch roughness relative to 1.0 for concrete
8323!--                Ueff: effective wind speed
8324!--                - 4.0 is a reduction of Rowley et al (1930) formulation based on
8325!--                Cole and Sturrock (1977)
8326!--           
8327!--                Ucan: Canyon wind speed
8328!--                wstar: convective velocity
8329!--                Qs: surface heat flux
8330!--                zH: height of the convective layer
8331!--                wstar = (g/Tcan*Qs*zH)**(1./3.)
8332!--          Effective velocity components must always
8333!--          be defined at scalar grid point. The wall normal component is
8334!--          obtained by simple linear interpolation. ( An alternative would
8335!--          be an logarithmic interpolation. )
8336!--          Parameter roughness_concrete (default value = 0.001) is used
8337!--          to calculation of roughness relative to concrete
8338              surf_usm_v(l)%r_a(m) = rho_cp / ( surf_usm_v(l)%z0(m) /           &
8339                         roughness_concrete * ( 11.8_wp + 4.2_wp *              &
8340                         SQRT( MAX( ( ( u(k,j,i) + u(k,j,i+1) ) * 0.5_wp )**2 + &
8341                                    ( ( v(k,j,i) + v(k,j+1,i) ) * 0.5_wp )**2 + &
8342                                    ( ( w(k,j,i) + w(k-1,j,i) ) * 0.5_wp )**2,  &
8343                               0.01_wp ) )                                      &
8344                            )  - 4.0_wp  ) 
8345!
8346!--          Limit aerodynamic resistance
8347              IF ( surf_usm_v(l)%r_a(m) < 1.0_wp )  surf_usm_v(l)%r_a(m) = 1.0_wp   
8348             
8349                           
8350              f_shf         = rho_cp / surf_usm_v(l)%r_a(m)
8351              f_shf_window  = rho_cp / surf_usm_v(l)%r_a(m)
8352              f_shf_green   = rho_cp / surf_usm_v(l)%r_a(m)
8353 
8354
8355              IF ( surf_usm_v(l)%frac(ind_pav_green,m) > 0.0_wp ) THEN
8356!
8357!--             Adapted from LSM:
8358!--             Second step: calculate canopy resistance r_canopy
8359!--             f1-f3 here are defined as 1/f1-f3 as in ECMWF documentation
8360!--             f1: correction for incoming shortwave radiation (stomata close at
8361!--             night)
8362                 f1 = MIN( 1.0_wp, ( 0.004_wp * surf_usm_v(l)%rad_sw_in(m) + 0.05_wp ) / &
8363                                  (0.81_wp * (0.004_wp * surf_usm_v(l)%rad_sw_in(m)      &
8364                                   + 1.0_wp)) )
8365!
8366!--             f2: correction for soil moisture availability to plants (the
8367!--             integrated soil moisture must thus be considered here)
8368!--             f2 = 0 for very dry soils
8369 
8370                 f2=1.0_wp
8371 
8372!
8373!--              Calculate water vapour pressure at saturation
8374                 e_s = 0.01_wp * 610.78_wp * EXP( 17.269_wp * (  t_surf_green_v_p(l)%t(m) &
8375                               - 273.16_wp ) / (  t_surf_green_v_p(l)%t(m) - 35.86_wp ) )
8376!
8377!--              f3: correction for vapour pressure deficit
8378                 IF ( surf_usm_v(l)%g_d(m) /= 0.0_wp )  THEN
8379!
8380!--                 Calculate vapour pressure
8381                    e  = qv1 * surface_pressure / ( qv1 + 0.622_wp )
8382                    f3 = EXP ( - surf_usm_v(l)%g_d(m) * (e_s - e) )
8383                 ELSE
8384                    f3 = 1.0_wp
8385                 ENDIF
8386!
8387!--              Calculate canopy resistance. In case that c_veg is 0 (bare soils),
8388!--              this calculation is obsolete, as r_canopy is not used below.
8389!--              To do: check for very dry soil -> r_canopy goes to infinity
8390                 surf_usm_v(l)%r_canopy(m) = surf_usm_v(l)%r_canopy_min(m) /                  &
8391                                        ( surf_usm_v(l)%lai(m) * f1 * f2 * f3 + 1.0E-20_wp )
8392                               
8393!
8394!--              Calculate saturation specific humidity
8395                 q_s = 0.622_wp * e_s / ( surface_pressure - e_s )
8396!
8397!--              In case of dewfall, set evapotranspiration to zero
8398!--              All super-saturated water is then removed from the air
8399                 IF ( humidity  .AND.  q_s <= qv1 )  THEN
8400                    surf_usm_v(l)%r_canopy(m) = 0.0_wp
8401                 ENDIF
8402 
8403!
8404!--              Calculate coefficients for the total evapotranspiration
8405!--              In case of water surface, set vegetation and soil fluxes to zero.
8406!--              For pavements, only evaporation of liquid water is possible.
8407                 f_qsws_veg  = rho_lv *                                &
8408                                   ( 1.0_wp        - 0.0_wp ) / & !surf_usm_h%c_liq(m)    ) /   &
8409                                   ( surf_usm_v(l)%r_a(m) + surf_usm_v(l)%r_canopy(m) )
8410!                f_qsws_liq  = rho_lv * surf_usm_h%c_liq(m)   /             &
8411!                              surf_usm_h%r_a_green(m)
8412         
8413                 f_qsws = f_qsws_veg! + f_qsws_liq
8414!
8415!--              Calculate derivative of q_s for Taylor series expansion
8416                 e_s_dt = e_s * ( 17.269_wp / ( t_surf_green_v_p(l)%t(m) - 35.86_wp) -   &
8417                                  17.269_wp*( t_surf_green_v_p(l)%t(m) - 273.16_wp)      &
8418                                 / ( t_surf_green_v_p(l)%t(m) - 35.86_wp)**2 )
8419         
8420                 dq_s_dt = 0.622_wp * e_s_dt / ( surface_pressure - e_s_dt )
8421              ENDIF
8422
8423!
8424!--           add LW up so that it can be removed in prognostic equation
8425              surf_usm_v(l)%rad_net_l(m) = surf_usm_v(l)%rad_sw_in(m)  -        &
8426                                           surf_usm_v(l)%rad_sw_out(m) +        &
8427                                           surf_usm_v(l)%rad_lw_in(m)  -        &
8428                                           surf_usm_v(l)%rad_lw_out(m)
8429!
8430!--           numerator of the prognostic equation
8431              coef_1 = surf_usm_v(l)%rad_net_l(m) +                             & ! coef +1 corresponds to -lwout
8432                                                                                  ! included in calculation of radnet_l
8433              ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(ind_veg_wall,m) *  &
8434                                      sigma_sb *  t_surf_wall_v(l)%t(m) ** 4 +  & 
8435                                      f_shf * surf_usm_v(l)%pt1(m) +            &
8436                                      lambda_surface * t_wall_v(l)%t(nzb_wall,m)
8437              IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac(ind_wat_win,m) > 0.0_wp ) ) THEN
8438                 coef_window_1 = surf_usm_v(l)%rad_net_l(m) +                   & ! coef +1 corresponds to -lwout
8439                                                                                  ! included in calculation of radnet_l
8440                ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(ind_wat_win,m) * &
8441                                      sigma_sb * t_surf_window_v(l)%t(m) ** 4 + & 
8442                                      f_shf * surf_usm_v(l)%pt1(m) +            &
8443                                      lambda_surface_window * t_window_v(l)%t(nzb_wall,m)
8444              ENDIF
8445              IF ( ( humidity ) .AND. ( surf_usm_v(l)%frac(ind_pav_green,m) > 0.0_wp ) )  THEN
8446                 coef_green_1 = surf_usm_v(l)%rad_net_l(m) +                      & ! coef +1 corresponds to -lwout
8447                                                                                    ! included in calculation of radnet_l
8448                 ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(ind_pav_green,m) * sigma_sb *  &
8449                                      t_surf_green_v(l)%t(m) ** 4 +               & 
8450                                      f_shf * surf_usm_v(l)%pt1(m) +     f_qsws * ( qv1 - q_s  &
8451                                           + dq_s_dt * t_surf_green_v(l)%t(m) ) +              &
8452                                      lambda_surface_green * t_wall_v(l)%t(nzb_wall,m)
8453              ELSE
8454                coef_green_1 = surf_usm_v(l)%rad_net_l(m) +                       & ! coef +1 corresponds to -lwout included
8455                                                                                    ! in calculation of radnet_l
8456                ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(ind_pav_green,m) * sigma_sb *  &
8457                                      t_surf_green_v(l)%t(m) ** 4 +               & 
8458                                      f_shf * surf_usm_v(l)%pt1(m) +              &
8459                                      lambda_surface_green * t_wall_v(l)%t(nzb_wall,m)
8460              ENDIF
8461                                     
8462!
8463!--           denominator of the prognostic equation
8464              coef_2 = 4.0_wp * surf_usm_v(l)%emissivity(ind_veg_wall,m) * sigma_sb *   &
8465                                 t_surf_wall_v(l)%t(m) ** 3                             &
8466                               + lambda_surface + f_shf / exner(k) 
8467              IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac(ind_wat_win,m) > 0.0_wp ) ) THEN             
8468                 coef_window_2 = 4.0_wp * surf_usm_v(l)%emissivity(ind_wat_win,m) * sigma_sb *       &
8469                                   t_surf_window_v(l)%t(m) ** 3                         &
8470                                 + lambda_surface_window + f_shf / exner(k)
8471              ENDIF
8472              IF ( ( humidity ) .AND. ( surf_usm_v(l)%frac(ind_pav_green,m) > 0.0_wp ) )  THEN
8473                  coef_green_2 = 4.0_wp * surf_usm_v(l)%emissivity(ind_pav_green,m) * sigma_sb *     &
8474                                   t_surf_green_v(l)%t(m) ** 3  + f_qsws * dq_s_dt      &
8475                                 + lambda_surface_green + f_shf / exner(k)
8476              ELSE
8477                 coef_green_2 = 4.0_wp * surf_usm_v(l)%emissivity(ind_pav_green,m) * sigma_sb *      &
8478                                   t_surf_green_v(l)%t(m) ** 3                          &
8479                                 + lambda_surface_green + f_shf / exner(k)
8480              ENDIF
8481!
8482!--           implicit solution when the surface layer has no heat capacity,
8483!--           otherwise use RK3 scheme.
8484              t_surf_wall_v_p(l)%t(m) = ( coef_1 * dt_3d * tsc(2) +                 &
8485                             surf_usm_v(l)%c_surface(m) * t_surf_wall_v(l)%t(m) ) / & 
8486                             ( surf_usm_v(l)%c_surface(m) + coef_2 * dt_3d * tsc(2) ) 
8487              IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac(ind_wat_win,m) > 0.0_wp ) ) THEN
8488                 t_surf_window_v_p(l)%t(m) = ( coef_window_1 * dt_3d * tsc(2) +                 &
8489                                surf_usm_v(l)%c_surface_window(m) * t_surf_window_v(l)%t(m) ) / & 
8490                              ( surf_usm_v(l)%c_surface_window(m) + coef_window_2 * dt_3d * tsc(2) ) 
8491              ENDIF
8492              t_surf_green_v_p(l)%t(m) = ( coef_green_1 * dt_3d * tsc(2) +                 &
8493                             surf_usm_v(l)%c_surface_green(m) * t_surf_green_v(l)%t(m) ) / & 
8494                           ( surf_usm_v(l)%c_surface_green(m) + coef_green_2 * dt_3d * tsc(2) ) 
8495!
8496!--           add RK3 term
8497              t_surf_wall_v_p(l)%t(m) = t_surf_wall_v_p(l)%t(m) + dt_3d * tsc(3) *         &
8498                                surf_usm_v(l)%tt_surface_wall_m(m)
8499              t_surf_window_v_p(l)%t(m) = t_surf_window_v_p(l)%t(m) + dt_3d * tsc(3) *     &
8500                                surf_usm_v(l)%tt_surface_window_m(m)
8501              t_surf_green_v_p(l)%t(m) = t_surf_green_v_p(l)%t(m) + dt_3d * tsc(3) *       &
8502                                 surf_usm_v(l)%tt_surface_green_m(m)
8503!
8504!--           Store surface temperature. Further, in case humidity is used
8505!--           store also vpt_surface, which is, due to the lack of moisture on roofs simply
8506!--           assumed to be the surface temperature.     
8507              surf_usm_v(l)%pt_surface(m) =  ( surf_usm_v(l)%frac(ind_veg_wall,m) * t_surf_wall_v_p(l)%t(m)  &
8508                                      + surf_usm_v(l)%frac(ind_wat_win,m) * t_surf_window_v_p(l)%t(m)        &
8509                                      + surf_usm_v(l)%frac(ind_pav_green,m) * t_surf_green_v_p(l)%t(m) )     &
8510                                      / exner(k)
8511                                       
8512              IF ( humidity )  surf_usm_v(l)%vpt_surface(m) =                  &
8513                                                     surf_usm_v(l)%pt_surface(m)
8514!
8515!--           calculate true tendency
8516              stend_wall = ( t_surf_wall_v_p(l)%t(m) - t_surf_wall_v(l)%t(m) - dt_3d * tsc(3) *      &
8517                        surf_usm_v(l)%tt_surface_wall_m(m) ) / ( dt_3d  * tsc(2) )
8518              stend_window = ( t_surf_window_v_p(l)%t(m) - t_surf_window_v(l)%t(m) - dt_3d * tsc(3) *&
8519                        surf_usm_v(l)%tt_surface_window_m(m) ) / ( dt_3d  * tsc(2) )
8520              stend_green = ( t_surf_green_v_p(l)%t(m) - t_surf_green_v(l)%t(m) - dt_3d * tsc(3) *   &
8521                        surf_usm_v(l)%tt_surface_green_m(m) ) / ( dt_3d  * tsc(2) )
8522
8523!
8524!--           calculate t_surf_* tendencies for the next Runge-Kutta step
8525              IF ( timestep_scheme(1:5) == 'runge' )  THEN
8526                 IF ( intermediate_timestep_count == 1 )  THEN
8527                    surf_usm_v(l)%tt_surface_wall_m(m) = stend_wall
8528                    surf_usm_v(l)%tt_surface_window_m(m) = stend_window
8529                    surf_usm_v(l)%tt_surface_green_m(m) = stend_green
8530                 ELSEIF ( intermediate_timestep_count <                                 &
8531                          intermediate_timestep_count_max )  THEN
8532                    surf_usm_v(l)%tt_surface_wall_m(m) = -9.5625_wp * stend_wall +      &
8533                                     5.3125_wp * surf_usm_v(l)%tt_surface_wall_m(m)
8534                    surf_usm_v(l)%tt_surface_green_m(m) = -9.5625_wp * stend_green +    &
8535                                     5.3125_wp * surf_usm_v(l)%tt_surface_green_m(m)
8536                    surf_usm_v(l)%tt_surface_window_m(m) = -9.5625_wp * stend_window +  &
8537                                     5.3125_wp * surf_usm_v(l)%tt_surface_window_m(m)
8538                 ENDIF
8539              ENDIF
8540
8541!
8542!--           in case of fast changes in the skin temperature, it is required to
8543!--           update the radiative fluxes in order to keep the solution stable
8544 
8545              IF ( ( ( ABS( t_surf_wall_v_p(l)%t(m)   - t_surf_wall_v(l)%t(m) )   > 1.0_wp ) .OR. &
8546                   (   ABS( t_surf_green_v_p(l)%t(m)  - t_surf_green_v(l)%t(m) )  > 1.0_wp ) .OR. &
8547                   (   ABS( t_surf_window_v_p(l)%t(m) - t_surf_window_v(l)%t(m) ) > 1.0_wp ) )    &
8548                      .AND.  unscheduled_radiation_calls )  THEN
8549                 force_radiation_call_l = .TRUE.
8550              ENDIF
8551
8552!
8553!--           calculate fluxes
8554!--           prognostic rad_net_l is used just for output!           
8555              surf_usm_v(l)%rad_net_l(m) = surf_usm_v(l)%frac(ind_veg_wall,m) *                      &
8556                                           ( surf_usm_v(l)%rad_net_l(m) +                            &
8557                                           3.0_wp * sigma_sb *                                       &
8558                                           t_surf_wall_v(l)%t(m)**4 - 4.0_wp * sigma_sb *            &
8559                                           t_surf_wall_v(l)%t(m)**3 * t_surf_wall_v_p(l)%t(m) )      &
8560                                         + surf_usm_v(l)%frac(ind_wat_win,m) *                       &
8561                                           ( surf_usm_v(l)%rad_net_l(m) +                            &
8562                                           3.0_wp * sigma_sb *                                       &
8563                                           t_surf_window_v(l)%t(m)**4 - 4.0_wp * sigma_sb *          &
8564                                           t_surf_window_v(l)%t(m)**3 * t_surf_window_v_p(l)%t(m) )  &
8565                                         + surf_usm_v(l)%frac(ind_pav_green,m) *                     &
8566                                           ( surf_usm_v(l)%rad_net_l(m) +                            &
8567                                           3.0_wp * sigma_sb *                                       &
8568                                           t_surf_green_v(l)%t(m)**4 - 4.0_wp * sigma_sb *           &
8569                                           t_surf_green_v(l)%t(m)**3 * t_surf_green_v_p(l)%t(m) )
8570
8571              surf_usm_v(l)%wghf_eb_window(m) = lambda_surface_window * &
8572                                                ( t_surf_window_v_p(l)%t(m) - t_window_v(l)%t(nzb_wall,m) )
8573              surf_usm_v(l)%wghf_eb(m)   = lambda_surface *             &
8574                                                ( t_surf_wall_v_p(l)%t(m) - t_wall_v(l)%t(nzb_wall,m) )
8575              surf_usm_v(l)%wghf_eb_green(m)  = lambda_surface_green *  &
8576                                                ( t_surf_green_v_p(l)%t(m) - t_green_v(l)%t(nzb_wall,m) )
8577
8578!
8579!--           ground/wall/roof surface heat flux
8580              surf_usm_v(l)%wshf_eb(m)   =                                     &
8581                 - f_shf  * ( surf_usm_v(l)%pt1(m) -                           &
8582                 t_surf_wall_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac(ind_veg_wall,m)       &
8583                 - f_shf_window  * ( surf_usm_v(l)%pt1(m) -                    &
8584                 t_surf_window_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac(ind_wat_win,m)&
8585                 - f_shf_green  * ( surf_usm_v(l)%pt1(m) -                     &
8586                 t_surf_green_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac(ind_pav_green,m)
8587
8588!           
8589!--           store kinematic surface heat fluxes for utilization in other processes
8590!--           diffusion_s, surface_layer_fluxes,...
8591              surf_usm_v(l)%shf(m) = surf_usm_v(l)%wshf_eb(m) / c_p
8592!
8593!--           If the indoor model is applied, further add waste heat from buildings to the
8594!--           kinematic flux.
8595              IF ( indoor_model )  THEN
8596                 surf_usm_v(l)%shf(m) = surf_usm_v(l)%shf(m) +                       &
8597                                        surf_usm_v(l)%waste_heat(m) / c_p
8598              ENDIF             
8599
8600              IF ( surf_usm_v(l)%frac(ind_pav_green,m) > 0.0_wp ) THEN
8601 
8602
8603                 IF ( humidity )  THEN
8604                    surf_usm_v(l)%qsws(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt          &
8605                                    * t_surf_green_v(l)%t(m) - dq_s_dt *               &
8606                                      t_surf_green_v_p(l)%t(m) )
8607         
8608                    surf_usm_v(l)%qsws(m) = surf_usm_v(l)%qsws(m) / l_v
8609         
8610                    surf_usm_v(l)%qsws_veg(m)  = - f_qsws_veg  * ( qv1 - q_s           &
8611                                        + dq_s_dt * t_surf_green_v(l)%t(m) - dq_s_dt   &
8612                                        * t_surf_green_v_p(l)%t(m) )
8613         
8614!                    surf_usm_h%qsws_liq(m)  = - f_qsws_liq  * ( qv1 - q_s         &
8615!                                        + dq_s_dt * t_surf_green_h(m) - dq_s_dt   &
8616!                                        * t_surf_green_h_p(m) )
8617                 ENDIF
8618 
8619!
8620!--              Calculate the true surface resistance
8621                 IF ( .NOT.  humidity )  THEN
8622                    surf_usm_v(l)%r_s(m) = 1.0E10_wp
8623                 ELSE
8624                    surf_usm_v(l)%r_s(m) = - rho_lv * ( qv1 - q_s + dq_s_dt             &
8625                                    *  t_surf_green_v(l)%t(m) - dq_s_dt *               &
8626                                      t_surf_green_v_p(l)%t(m) ) /                      &
8627                                      (surf_usm_v(l)%qsws(m) + 1.0E-20)  - surf_usm_v(l)%r_a(m)
8628                 ENDIF
8629         
8630!
8631!--              Calculate change in liquid water reservoir due to dew fall or
8632!--              evaporation of liquid water
8633                 IF ( humidity )  THEN
8634!
8635!--                 If the air is saturated, check the reservoir water level
8636                    IF ( surf_usm_v(l)%qsws(m) < 0.0_wp )  THEN
8637       
8638!
8639!--                    In case qsws_veg becomes negative (unphysical behavior),
8640!--                    let the water enter the liquid water reservoir as dew on the
8641!--                    plant
8642                       IF ( surf_usm_v(l)%qsws_veg(m) < 0.0_wp )  THEN
8643          !                 surf_usm_h%qsws_liq(m) = surf_usm_h%qsws_liq(m) + surf_usm_h%qsws_veg(m)
8644                          surf_usm_v(l)%qsws_veg(m) = 0.0_wp
8645                       ENDIF
8646                    ENDIF
8647                 
8648                 ENDIF
8649              ELSE
8650                 surf_usm_v(l)%r_s(m) = 1.0E10_wp
8651              ENDIF
8652!
8653!--           During spinup green and window fraction are set to zero. Here, the original
8654!--           values are restored.
8655              IF ( during_spinup )  THEN
8656                 surf_usm_v(l)%frac(ind_wat_win,m)   = frac_win
8657                 surf_usm_v(l)%frac(ind_veg_wall,m)  = frac_wall
8658                 surf_usm_v(l)%frac(ind_pav_green,m) = frac_green
8659              ENDIF
8660
8661           ENDDO
8662 
8663       ENDDO
8664       !$OMP END PARALLEL
8665
8666!
8667!--     Add-up anthropogenic heat, for now only at upward-facing surfaces
8668         IF ( usm_anthropogenic_heat  .AND.  .NOT. during_spinup  .AND. &
8669              intermediate_timestep_count == intermediate_timestep_count_max )  THEN
8670!
8671!--        application of the additional anthropogenic heat sources
8672!--        we considere the traffic for now so all heat is absorbed
8673!--        to the first layer, generalization would be worth.
8674!--        calculation of actual profile coefficient
8675!--        ??? check time_since_reference_point ???
8676            CALL get_date_time( time_since_reference_point, hour=dhour, second_of_day=dtime )
8677
8678!--         TO_DO: activate, if testcase is available
8679!--         !$OMP PARALLEL DO PRIVATE (i, j, k, acoef, rho_cp)
8680!--         it may also improve performance to move topo_top_ind before the k-loop
8681            DO i = nxl, nxr
8682               DO j = nys, nyn
8683                  DO k = nz_urban_b, min(nz_urban_t,naheatlayers)
8684                     IF ( k > topo_top_ind(j,i,0) ) THEN
8685!
8686!--                    increase of pt in box i,j,k in time dt_3d
8687!--                    given to anthropogenic heat aheat*acoef (W*m-2)
8688!--                    linear interpolation of coeficient
8689                        acoef = (REAL(dhour+1,wp)-dtime/seconds_per_hour)*aheatprof(k,dhour) + &
8690                                (dtime/seconds_per_hour-REAL(dhour,wp))*aheatprof(k,dhour+1)
8691                        IF ( aheat(k,j,i) > 0.0_wp )  THEN
8692!
8693!--                       calculate rho * c_p coefficient at layer k
8694                           rho_cp  = c_p * hyp(k) / ( r_d * pt(k+1,j,i) * exner(k) )
8695                           pt(k,j,i) = pt(k,j,i) + aheat(k,j,i)*acoef*dt_3d/(exner(k)*rho_cp*dz(1))
8696                        ENDIF
8697                     ENDIF
8698                  ENDDO
8699               ENDDO
8700            ENDDO
8701 
8702         ENDIF
8703!
8704!--     pt and shf are defined on nxlg:nxrg,nysg:nyng
8705!--     get the borders from neighbours
8706         CALL exchange_horiz( pt, nbgp )
8707!
8708!--     calculation of force_radiation_call:
8709!--     Make logical OR for all processes.
8710!--     Force radiation call if at least one processor forces it.
8711         IF ( intermediate_timestep_count == intermediate_timestep_count_max-1 )&
8712         THEN
8713#if defined( __parallel )
8714           IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
8715           CALL MPI_ALLREDUCE( force_radiation_call_l, force_radiation_call,    &
8716                               1, MPI_LOGICAL, MPI_LOR, comm2d, ierr )
8717#else
8718           force_radiation_call = force_radiation_call_l
8719#endif
8720           force_radiation_call_l = .FALSE.
8721         ENDIF
8722 
8723! !
8724! !-- Calculate surface specific humidity
8725!     IF ( humidity )  THEN
8726!        CALL calc_q_surface_usm
8727!     ENDIF
8728 
8729 
8730!     CONTAINS
8731! !------------------------------------------------------------------------------!
8732! ! Description:
8733! ! ------------
8734! !> Calculation of specific humidity of the skin layer (surface). It is assumend
8735! !> that the skin is always saturated.
8736! !------------------------------------------------------------------------------!
8737!        SUBROUTINE calc_q_surface_usm
8738!
8739!           IMPLICIT NONE
8740!
8741!           REAL(wp) :: resistance    !< aerodynamic and soil resistance term
8742!
8743!           DO  m = 1, surf_usm_h%ns
8744!
8745!              i   = surf_usm_h%i(m)           
8746!              j   = surf_usm_h%j(m)
8747!              k   = surf_usm_h%k(m)
8748!
8749!!
8750!!--          Calculate water vapour pressure at saturation
8751!              e_s = 0.01_wp * 610.78_wp * EXP( 17.269_wp *                  &
8752!                                     ( t_surf_green_h_p(m) - 273.16_wp ) /  &
8753!                                     ( t_surf_green_h_p(m) - 35.86_wp  )    &
8754!                                          )
8755!
8756!!
8757!!--          Calculate specific humidity at saturation
8758!              q_s = 0.622_wp * e_s / ( surface_pressure - e_s )
8759!
8760!!              surf_usm_h%r_a_green(m) = ( surf_usm_h%pt1(m) - t_surf_green_h(m) / exner(k) ) /  &
8761!!                    ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-10_wp )
8762!!                 
8763!! !--          make sure that the resistance does not drop to zero
8764!!              IF ( ABS(surf_usm_h%r_a_green(m)) < 1.0E-10_wp )  surf_usm_h%r_a_green(m) = 1.0E-10_wp
8765!
8766!              resistance = surf_usm_h%r_a_green(m) / ( surf_usm_h%r_a_green(m) + surf_usm_h%r_s(m) + 1E-5_wp )
8767!
8768!!
8769!!--          Calculate specific humidity at surface
8770!              IF ( bulk_cloud_model )  THEN
8771!                 q(k,j,i) = resistance * q_s +                   &
8772!                                            ( 1.0_wp - resistance ) *              &
8773!                                            ( q(k,j,i) - ql(k,j,i) )
8774!              ELSE
8775!                 q(k,j,i) = resistance * q_s +                   &
8776!                                            ( 1.0_wp - resistance ) *              &
8777!                                              q(k,j,i)
8778!              ENDIF
8779!
8780!!
8781!!--          Update virtual potential temperature
8782!              vpt(k,j,i) = pt(k,j,i) *         &
8783!                         ( 1.0_wp + 0.61_wp * q(k,j,i) )
8784!
8785!           ENDDO
8786!
8787!!
8788!!--       Now, treat vertical surface elements
8789!           DO  l = 0, 3
8790!              DO  m = 1, surf_usm_v(l)%ns
8791!!
8792!!--             Get indices of respective grid point
8793!                 i = surf_usm_v(l)%i(m)
8794!                 j = surf_usm_v(l)%j(m)
8795!                 k = surf_usm_v(l)%k(m)
8796!
8797!!
8798!!--             Calculate water vapour pressure at saturation
8799!                 e_s = 0.01_wp * 610.78_wp * EXP( 17.269_wp *                       &
8800!                                        ( t_surf_green_v_p(l)%t(m) - 273.16_wp ) /  &
8801!                                        ( t_surf_green_v_p(l)%t(m) - 35.86_wp  )    &
8802!                                             )
8803!
8804!!
8805!!--             Calculate specific humidity at saturation
8806!                 q_s = 0.622_wp * e_s / ( surface_pressure -e_s )
8807!
8808!!
8809!!--             Calculate specific humidity at surface
8810!                 IF ( bulk_cloud_model )  THEN
8811!                    q(k,j,i) = ( q(k,j,i) - ql(k,j,i) )
8812!                 ELSE
8813!                    q(k,j,i) = q(k,j,i)
8814!                 ENDIF
8815!!
8816!!--             Update virtual potential temperature
8817!                 vpt(k,j,i) = pt(k,j,i) *         &
8818!                            ( 1.0_wp + 0.61_wp * q(k,j,i) )
8819!
8820!              ENDDO
8821!
8822!           ENDDO
8823!
8824!        END SUBROUTINE calc_q_surface_usm
8825
8826        IF ( debug_output_timestep )  THEN
8827           WRITE( debug_string, * ) 'usm_surface_energy_balance | during_spinup: ',&
8828                                    during_spinup
8829           CALL debug_message( debug_string, 'end' )
8830        ENDIF
8831
8832     END SUBROUTINE usm_surface_energy_balance
8833 
8834 
8835!------------------------------------------------------------------------------!
8836! Description:
8837! ------------
8838!> Swapping of timelevels for t_surf and t_wall
8839!> called out from subroutine swap_timelevel
8840!------------------------------------------------------------------------------!
8841     SUBROUTINE usm_swap_timelevel( mod_count )
8842 
8843        IMPLICIT NONE
8844 
8845        INTEGER(iwp), INTENT(IN) ::  mod_count
8846 
8847       
8848        SELECT CASE ( mod_count )
8849 
8850           CASE ( 0 )
8851!
8852!--          Horizontal surfaces
8853              t_surf_wall_h    => t_surf_wall_h_1;   t_surf_wall_h_p    => t_surf_wall_h_2
8854              t_wall_h         => t_wall_h_1;        t_wall_h_p         => t_wall_h_2
8855              t_surf_window_h  => t_surf_window_h_1; t_surf_window_h_p  => t_surf_window_h_2
8856              t_window_h       => t_window_h_1;      t_window_h_p       => t_window_h_2
8857              t_surf_green_h   => t_surf_green_h_1;  t_surf_green_h_p   => t_surf_green_h_2
8858              t_green_h        => t_green_h_1;       t_green_h_p        => t_green_h_2
8859!
8860!--          Vertical surfaces
8861              t_surf_wall_v    => t_surf_wall_v_1;   t_surf_wall_v_p    => t_surf_wall_v_2
8862              t_wall_v         => t_wall_v_1;        t_wall_v_p         => t_wall_v_2
8863              t_surf_window_v  => t_surf_window_v_1; t_surf_window_v_p  => t_surf_window_v_2
8864              t_window_v       => t_window_v_1;      t_window_v_p       => t_window_v_2
8865              t_surf_green_v   => t_surf_green_v_1;  t_surf_green_v_p   => t_surf_green_v_2
8866              t_green_v        => t_green_v_1;       t_green_v_p        => t_green_v_2
8867           CASE ( 1 )
8868!
8869!--          Horizontal surfaces
8870              t_surf_wall_h    => t_surf_wall_h_2;   t_surf_wall_h_p    => t_surf_wall_h_1
8871              t_wall_h         => t_wall_h_2;        t_wall_h_p         => t_wall_h_1
8872              t_surf_window_h  => t_surf_window_h_2; t_surf_window_h_p  => t_surf_window_h_1
8873              t_window_h       => t_window_h_2;      t_window_h_p       => t_window_h_1
8874              t_surf_green_h   => t_surf_green_h_2;  t_surf_green_h_p   => t_surf_green_h_1
8875              t_green_h        => t_green_h_2;       t_green_h_p        => t_green_h_1
8876!
8877!--          Vertical surfaces
8878              t_surf_wall_v    => t_surf_wall_v_2;   t_surf_wall_v_p    => t_surf_wall_v_1
8879              t_wall_v         => t_wall_v_2;        t_wall_v_p         => t_wall_v_1
8880              t_surf_window_v  => t_surf_window_v_2; t_surf_window_v_p  => t_surf_window_v_1
8881              t_window_v       => t_window_v_2;      t_window_v_p       => t_window_v_1
8882              t_surf_green_v   => t_surf_green_v_2;  t_surf_green_v_p   => t_surf_green_v_1
8883              t_green_v        => t_green_v_2;       t_green_v_p        => t_green_v_1
8884        END SELECT
8885         
8886     END SUBROUTINE usm_swap_timelevel
8887 
8888!------------------------------------------------------------------------------!
8889! Description:
8890! ------------
8891!> Subroutine writes t_surf and t_wall data into restart files
8892!------------------------------------------------------------------------------!
8893     SUBROUTINE usm_wrd_local
8894 
8895     
8896        IMPLICIT NONE
8897       
8898        CHARACTER(LEN=1) ::  dum     !< dummy string to create output-variable name 
8899        INTEGER(iwp)     ::  l       !< index surface type orientation
8900 
8901        CALL wrd_write_string( 'ns_h_on_file_usm' )
8902        WRITE ( 14 )  surf_usm_h%ns
8903 
8904        CALL wrd_write_string( 'ns_v_on_file_usm' )
8905        WRITE ( 14 )  surf_usm_v(0:3)%ns
8906 
8907        CALL wrd_write_string( 'usm_start_index_h' )
8908        WRITE ( 14 )  surf_usm_h%start_index
8909 
8910        CALL wrd_write_string( 'usm_end_index_h' )
8911        WRITE ( 14 )  surf_usm_h%end_index
8912 
8913        CALL wrd_write_string( 't_surf_wall_h' )
8914        WRITE ( 14 )  t_surf_wall_h
8915 
8916        CALL wrd_write_string( 't_surf_window_h' )
8917        WRITE ( 14 )  t_surf_window_h
8918 
8919        CALL wrd_write_string( 't_surf_green_h' )
8920        WRITE ( 14 )  t_surf_green_h
8921!
8922!--     Write restart data which is especially needed for the urban-surface
8923!--     model. In order to do not fill up the restart routines in
8924!--     surface_mod.
8925!--     Output of waste heat from indoor model. Restart data is required in
8926!--     this special case, because the indoor model where waste heat is
8927!--     computed is call each hour (current default), so that waste heat would
8928!--     have zero value until next call of indoor model.
8929        IF ( indoor_model )  THEN
8930           CALL wrd_write_string( 'waste_heat_h' )
8931           WRITE ( 14 )  surf_usm_h%waste_heat
8932        ENDIF   
8933           
8934        DO  l = 0, 3
8935 
8936           CALL wrd_write_string( 'usm_start_index_v' )
8937           WRITE ( 14 )  surf_usm_v(l)%start_index
8938 
8939           CALL wrd_write_string( 'usm_end_index_v' )
8940           WRITE ( 14 )  surf_usm_v(l)%end_index
8941 
8942           WRITE( dum, '(I1)')  l         
8943 
8944           CALL wrd_write_string( 't_surf_wall_v(' // dum // ')' )
8945           WRITE ( 14 )  t_surf_wall_v(l)%t
8946 
8947           CALL wrd_write_string( 't_surf_window_v(' // dum // ')' )
8948           WRITE ( 14 ) t_surf_window_v(l)%t     
8949 
8950           CALL wrd_write_string( 't_surf_green_v(' // dum // ')' )
8951           WRITE ( 14 ) t_surf_green_v(l)%t 
8952           
8953           IF ( indoor_model )  THEN
8954              CALL wrd_write_string( 'waste_heat_v(' // dum // ')' )
8955              WRITE ( 14 )  surf_usm_v(l)%waste_heat
8956           ENDIF
8957           
8958        ENDDO
8959 
8960        CALL wrd_write_string( 'usm_start_index_h' )
8961        WRITE ( 14 )  surf_usm_h%start_index
8962 
8963        CALL wrd_write_string( 'usm_end_index_h' )
8964        WRITE ( 14 )  surf_usm_h%end_index
8965 
8966        CALL wrd_write_string( 't_wall_h' )
8967        WRITE ( 14 )  t_wall_h
8968 
8969        CALL wrd_write_string( 't_window_h' )
8970        WRITE ( 14 )  t_window_h
8971 
8972        CALL wrd_write_string( 't_green_h' )
8973        WRITE ( 14 )  t_green_h
8974 
8975        DO  l = 0, 3
8976 
8977           CALL wrd_write_string( 'usm_start_index_v' )
8978           WRITE ( 14 )  surf_usm_v(l)%start_index
8979 
8980           CALL wrd_write_string( 'usm_end_index_v' )
8981           WRITE ( 14 )  surf_usm_v(l)%end_index
8982 
8983           WRITE( dum, '(I1)')  l     
8984 
8985           CALL wrd_write_string( 't_wall_v(' // dum // ')' )
8986           WRITE ( 14 )  t_wall_v(l)%t
8987 
8988           CALL wrd_write_string( 't_window_v(' // dum // ')' )
8989           WRITE ( 14 )  t_window_v(l)%t
8990 
8991           CALL wrd_write_string( 't_green_v(' // dum // ')' )
8992           WRITE ( 14 )  t_green_v(l)%t
8993       
8994        ENDDO
8995       
8996     END SUBROUTINE usm_wrd_local
8997     
8998     
8999!------------------------------------------------------------------------------!
9000! Description:
9001! ------------
9002!> Define building properties
9003!------------------------------------------------------------------------------!
9004     SUBROUTINE usm_define_pars     
9005!
9006!--     Define the building_pars
9007        building_pars(:,1) = (/   &
9008           0.7_wp,         &  !< parameter 0   - wall fraction above ground floor level
9009           0.3_wp,         &  !< parameter 1   - window fraction above ground floor level
9010           0.0_wp,         &  !< parameter 2   - green fraction above ground floor level
9011           0.0_wp,         &  !< parameter 3   - green fraction roof above ground floor level
9012           1.5_wp,         &  !< parameter 4   - LAI roof
9013           1.5_wp,         &  !< parameter 5   - LAI on wall above ground floor level
9014           2200000.0_wp,   &  !< parameter 6   - heat capacity 1st/2nd wall layer above ground floor level
9015           1400000.0_wp,   &  !< parameter 7   - heat capacity 3rd wall layer above ground floor level
9016           1300000.0_wp,   &  !< parameter 8   - heat capacity 4th wall layer above ground floor level
9017           0.35_wp,        &  !< parameter 9   - thermal conductivity 1st/2nd wall layer above ground floor level
9018           0.8_wp,         &  !< parameter 10  - thermal conductivity 3rd wall layer above ground floor level
9019           2.1_wp,         &  !< parameter 11  - thermal conductivity 4th wall layer above ground floor level
9020           299.15_wp,      &  !< parameter 12  - indoor target summer temperature
9021           293.15_wp,      &  !< parameter 13  - indoor target winter temperature
9022           0.93_wp,        &  !< parameter 14  - wall emissivity above ground floor level
9023           0.86_wp,        &  !< parameter 15  - green emissivity above ground floor level
9024           0.91_wp,        &  !< parameter 16  - window emissivity above ground floor level
9025           0.75_wp,        &  !< parameter 17  - window transmissivity above ground floor level
9026           0.001_wp,       &  !< parameter 18  - z0 roughness above ground floor level
9027           0.0001_wp,      &  !< parameter 19  - z0h/z0g roughness heat/humidity above ground floor level
9028           4.0_wp,         &  !< parameter 20  - ground floor level height
9029           0.75_wp,        &  !< parameter 21  - wall fraction ground floor level
9030           0.25_wp,        &  !< parameter 22  - window fraction ground floor level
9031           0.0_wp,         &  !< parameter 23  - green fraction ground floor level
9032           0.0_wp,         &  !< parameter 24  - green fraction roof ground floor level
9033           1.5_wp,         &  !< parameter 25  - LAI on wall ground floor level
9034           2200000.0_wp,   &  !< parameter 26  - heat capacity 1st/2nd wall layer ground floor level
9035           1400000.0_wp,   &  !< parameter 27  - heat capacity 3rd wall layer ground floor level
9036           1300000.0_wp,   &  !< parameter 28  - heat capacity 4th wall layer ground floor level
9037           0.35_wp,        &  !< parameter 29  - thermal conductivity 1st/2nd wall layer ground floor level
9038           0.8_wp,         &  !< parameter 30  - thermal conductivity 3rd wall layer ground floor level
9039           2.1_wp,         &  !< parameter 31  - thermal conductivity 4th wall layer ground floor level
9040           0.93_wp,        &  !< parameter 32  - wall emissivity ground floor level
9041           0.91_wp,        &  !< parameter 33  - window emissivity ground floor level
9042           0.86_wp,        &  !< parameter 34  - green emissivity ground floor level
9043           0.75_wp,        &  !< parameter 35  - window transmissivity ground floor level
9044           0.001_wp,       &  !< parameter 36  - z0 roughness ground floor level
9045           0.0001_wp,      &  !< parameter 37  - z0h/z0q roughness heat/humidity
9046           27.0_wp,        &  !< parameter 38  - wall albedo above ground floor level
9047           5.0_wp,         &  !< parameter 39  - green albedo above ground floor level
9048           27.0_wp,        &  !< parameter 40  - window albedo above ground floor level
9049           0.005_wp,       &  !< parameter 41  - 1st wall layer thickness above ground floor level
9050           0.01_wp,        &  !< parameter 42  - 2nd wall layer thickness above ground floor level
9051           0.39_wp,        &  !< parameter 43  - 3rd wall layer thickness above ground floor level
9052           0.63_wp,        &  !< parameter 44  - 4th wall layer thickness above ground floor level
9053           20000.0_wp,     &  !< parameter 45  - heat capacity wall surface
9054           23.0_wp,        &  !< parameter 46  - thermal conductivity of wall surface
9055           20000.0_wp,     &  !< parameter 47  - heat capacity of window surface
9056           20000.0_wp,     &  !< parameter 48  - heat capacity of green surface
9057           23.0_wp,        &  !< parameter 49  - thermal conductivity of window surface
9058           10.0_wp,        &  !< parameter 50  - thermal conductivty of green surface
9059           1.0_wp,         &  !< parameter 51  - wall fraction ground plate
9060           0.005_wp,       &  !< parameter 52  - 1st wall layer thickness ground plate
9061           0.01_wp,        &  !< parameter 53  - 2nd wall layer thickness ground plate
9062           0.39_wp,        &  !< parameter 54  - 3rd wall layer thickness ground plate
9063           0.63_wp,        &  !< parameter 55  - 4th wall layer thickness ground plate
9064           2200000.0_wp,   &  !< parameter 56  - heat capacity 1st/2nd wall layer ground plate
9065           1400000.0_wp,   &  !< parameter 57  - heat capacity 3rd wall layer ground plate
9066           1300000.0_wp,   &  !< parameter 58  - heat capacity 4th wall layer ground plate
9067           0.35_wp,        &  !< parameter 59  - thermal conductivity 1st/2nd wall layer ground plate
9068           0.8_wp,         &  !< parameter 60  - thermal conductivity 3rd wall layer ground plate
9069           2.1_wp,         &  !< parameter 61  - thermal conductivity 4th wall layer ground plate
9070           0.005_wp,       &  !< parameter 62  - 1st wall layer thickness ground floor level
9071           0.01_wp,        &  !< parameter 63  - 2nd wall layer thickness ground floor level
9072           0.39_wp,        &  !< parameter 64  - 3rd wall layer thickness ground floor level
9073           0.63_wp,        &  !< parameter 65  - 4th wall layer thickness ground floor level
9074           27.0_wp,        &  !< parameter 66  - wall albedo ground floor level
9075           0.003_wp,       &  !< parameter 67  - 1st window layer thickness ground floor level
9076           0.006_wp,       &  !< parameter 68  - 2nd window layer thickness ground floor level
9077           0.012_wp,       &  !< parameter 69  - 3rd window layer thickness ground floor level
9078           0.018_wp,       &  !< parameter 70  - 4th window layer thickness ground floor level
9079           1736000.0_wp,   &  !< parameter 71  - heat capacity 1st/2nd window layer ground floor level
9080           1736000.0_wp,   &  !< parameter 72  - heat capacity 3rd window layer ground floor level
9081           1736000.0_wp,   &  !< parameter 73  - heat capacity 4th window layer ground floor level
9082           0.57_wp,        &  !< parameter 74  - thermal conductivity 1st/2nd window layer ground floor level
9083           0.57_wp,        &  !< parameter 75  - thermal conductivity 3rd window layer ground floor level
9084           0.57_wp,        &  !< parameter 76  - thermal conductivity 4th window layer ground floor level
9085           27.0_wp,        &  !< parameter 77  - window albedo ground floor level
9086           5.0_wp,         &  !< parameter 78  - green albedo ground floor level
9087           0.003_wp,       &  !< parameter 79  - 1st window layer thickness above ground floor level
9088           0.006_wp,       &  !< parameter 80  - 2nd thickness window layer above ground floor level
9089           0.012_wp,       &  !< parameter 81  - 3rd window layer thickness above ground floor level
9090           0.018_wp,       &  !< parameter 82  - 4th window layer thickness above ground floor level
9091           1736000.0_wp,   &  !< parameter 83  - heat capacity 1st/2nd window layer above ground floor level
9092           1736000.0_wp,   &  !< parameter 84  - heat capacity 3rd window layer above ground floor level
9093           1736000.0_wp,   &  !< parameter 85  - heat capacity 4th window layer above ground floor level
9094           0.57_wp,        &  !< parameter 86  - thermal conductivity 1st/2nd window layer above ground floor level
9095           0.57_wp,        &  !< parameter 87  - thermal conductivity 3rd window layer above ground floor level
9096           0.57_wp,        &  !< parameter 88  - thermal conductivity 4th window layer above ground floor level
9097           1.0_wp,         &  !< parameter 89  - wall fraction roof
9098           0.005_wp,       &  !< parameter 90  - 1st wall layer thickness roof
9099           0.01_wp,        &  !< parameter 91  - 2nd wall layer thickness roof
9100           0.31_wp,        &  !< parameter 92  - 3rd wall layer thickness roof
9101           0.63_wp,        &  !< parameter 93  - 4th wall layer thickness roof
9102           2200000.0_wp,   &  !< parameter 94  - heat capacity 1st/2nd wall layer roof
9103           1400000.0_wp,   &  !< parameter 95  - heat capacity 3rd wall layer roof
9104           1300000.0_wp,   &  !< parameter 96  - heat capacity 4th wall layer roof
9105           0.35_wp,        &  !< parameter 97  - thermal conductivity 1st/2nd wall layer roof
9106           0.8_wp,         &  !< parameter 98  - thermal conductivity 3rd wall layer roof
9107           2.1_wp,         &  !< parameter 99  - thermal conductivity 4th wall layer roof
9108           0.93_wp,        &  !< parameter 100 - wall emissivity roof
9109           27.0_wp,        &  !< parameter 101 - wall albedo roof
9110           0.0_wp,         &  !< parameter 102 - window fraction roof
9111           0.003_wp,       &  !< parameter 103 - window 1st layer thickness roof
9112           0.006_wp,       &  !< parameter 104 - window 2nd layer thickness roof
9113           0.012_wp,       &  !< parameter 105 - window 3rd layer thickness roof
9114           0.018_wp,       &  !< parameter 106 - window 4th layer thickness roof
9115           1736000.0_wp,   &  !< parameter 107 - heat capacity 1st/2nd window layer roof
9116           1736000.0_wp,   &  !< parameter 108 - heat capacity 3rd window layer roof
9117           1736000.0_wp,   &  !< parameter 109 - heat capacity 4th window layer roof
9118           0.57_wp,        &  !< parameter 110 - thermal conductivity 1st/2nd window layer roof
9119           0.57_wp,        &  !< parameter 111 - thermal conductivity 3rd window layer roof
9120           0.57_wp,        &  !< parameter 112 - thermal conductivity 4th window layer roof
9121           0.91_wp,        &  !< parameter 113 - window emissivity roof
9122           0.75_wp,        &  !< parameter 114 - window transmissivity roof
9123           27.0_wp,        &  !< parameter 115 - window albedo roof
9124           0.86_wp,        &  !< parameter 116 - green emissivity roof
9125           5.0_wp,         &  !< parameter 117 - green albedo roof
9126           0.0_wp,         &  !< parameter 118 - green type roof
9127           0.8_wp,         &  !< parameter 119 - shading factor
9128           0.76_wp,        &  !< parameter 120 - g-value windows
9129           5.0_wp,         &  !< parameter 121 - u-value windows
9130           0.1_wp,         &  !< parameter 122 - basical airflow without occupancy of the room
9131           0.5_wp,         &  !< parameter 123 - additional airflow depend of occupancy of the room
9132           0.0_wp,         &  !< parameter 124 - heat recovery efficiency
9133           3.5_wp,         &  !< parameter 125 - dynamic parameter specific effective surface
9134           370000.0_wp,    &  !< parameter 126 - dynamic parameter innner heatstorage
9135           4.5_wp,         &  !< parameter 127 - ratio internal surface/floor area
9136           100000.0_wp,    &  !< parameter 128 - maximal heating capacity
9137           0.0_wp,         &  !< parameter 129 - maximal cooling capacity
9138           3.0_wp,         &  !< parameter 130 - additional internal heat gains dependent on occupancy of the room
9139           10.0_wp,        &  !< parameter 131 - basic internal heat gains without occupancy of the room
9140           3.0_wp,         &  !< parameter 132 - storey height
9141           0.2_wp,         &  !< parameter 133 - ceiling construction height
9142           0.1_wp,         &  !< parameter 134 - anthropogenic heat output for heating
9143           1.333_wp        &  !< parameter 135 - anthropogenic heat output for cooling
9144                            /)
9145                           
9146        building_pars(:,2) = (/   &
9147           0.73_wp,        &  !< parameter 0   - wall fraction above ground floor level
9148           0.27_wp,        &  !< parameter 1   - window fraction above ground floor level
9149           0.0_wp,         &  !< parameter 2   - green fraction above ground floor level
9150           0.0_wp,         &  !< parameter 3   - green fraction roof above ground floor level
9151           1.5_wp,         &  !< parameter 4   - LAI roof
9152           1.5_wp,         &  !< parameter 5   - LAI on wall above ground floor level
9153           2000000.0_wp,   &  !< parameter 6   - heat capacity 1st/2nd wall layer above ground floor level
9154           103000.0_wp,    &  !< parameter 7   - heat capacity 3rd wall layer above ground floor level
9155           900000.0_wp,    &  !< parameter 8   - heat capacity 4th wall layer above ground floor level
9156           0.35_wp,        &  !< parameter 9   - thermal conductivity 1st/2nd wall layer above ground floor level
9157           0.38_wp,        &  !< parameter 10  - thermal conductivity 3rd wall layer above ground floor level
9158           0.04_wp,        &  !< parameter 11  - thermal conductivity 4th wall layer above ground floor level
9159           299.15_wp,      &  !< parameter 12  - indoor target summer temperature
9160           293.15_wp,      &  !< parameter 13  - indoor target winter temperature
9161           0.92_wp,        &  !< parameter 14  - wall emissivity above ground floor level
9162           0.86_wp,        &  !< parameter 15  - green emissivity above ground floor level
9163           0.87_wp,        &  !< parameter 16  - window emissivity above ground floor level
9164           0.7_wp,         &  !< parameter 17  - window transmissivity above ground floor level
9165           0.001_wp,       &  !< parameter 18  - z0 roughness above ground floor level
9166           0.0001_wp,      &  !< parameter 19  - z0h/z0g roughness heat/humidity above ground floor level
9167           4.0_wp,         &  !< parameter 20  - ground floor level height
9168           0.78_wp,        &  !< parameter 21  - wall fraction ground floor level
9169           0.22_wp,        &  !< parameter 22  - window fraction ground floor level
9170           0.0_wp,         &  !< parameter 23  - green fraction ground floor level
9171           0.0_wp,         &  !< parameter 24  - green fraction roof ground floor level
9172           1.5_wp,         &  !< parameter 25  - LAI on wall ground floor level
9173           2000000.0_wp,   &  !< parameter 26  - heat capacity 1st/2nd wall layer ground floor level
9174           103000.0_wp,    &  !< parameter 27  - heat capacity 3rd wall layer ground floor level
9175           900000.0_wp,    &  !< parameter 28  - heat capacity 4th wall layer ground floor level
9176           0.35_wp,        &  !< parameter 29  - thermal conductivity 1st/2nd wall layer ground floor level
9177           0.38_wp,        &  !< parameter 30  - thermal conductivity 3rd wall layer ground floor level
9178           0.04_wp,        &  !< parameter 31  - thermal conductivity 4th wall layer ground floor level
9179           0.92_wp,        &  !< parameter 32  - wall emissivity ground floor level
9180           0.11_wp,        &  !< parameter 33  - window emissivity ground floor level
9181           0.86_wp,        &  !< parameter 34  - green emissivity ground floor level
9182           0.7_wp,         &  !< parameter 35  - window transmissivity ground floor level
9183           0.001_wp,       &  !< parameter 36  - z0 roughness ground floor level
9184           0.0001_wp,      &  !< parameter 37  - z0h/z0q roughness heat/humidity
9185           27.0_wp,        &  !< parameter 38  - wall albedo above ground floor level
9186           5.0_wp,         &  !< parameter 39  - green albedo above ground floor level
9187           27.0_wp,        &  !< parameter 40  - window albedo above ground floor level
9188           0.005_wp,       &  !< parameter 41  - 1st wall layer thickness above ground floor level
9189           0.01_wp,        &  !< parameter 42  - 2nd wall layer thickness above ground floor level
9190           0.31_wp,        &  !< parameter 43  - 3rd wall layer thickness above ground floor level
9191           0.43_wp,        &  !< parameter 44  - 4th wall layer thickness above ground floor level
9192           20000.0_wp,     &  !< parameter 45  - heat capacity wall surface
9193           23.0_wp,        &  !< parameter 46  - thermal conductivity of wall surface
9194           20000.0_wp,     &  !< parameter 47  - heat capacity of window surface
9195           20000.0_wp,     &  !< parameter 48  - heat capacity of green surface
9196           23.0_wp,        &  !< parameter 49  - thermal conductivity of window surface
9197           10.0_wp,        &  !< parameter 50  - thermal conductivty of green surface
9198           1.0_wp,         &  !< parameter 51  - wall fraction ground plate
9199           0.005_wp,       &  !< parameter 52  - 1st wall layer thickness ground plate
9200           0.01_wp,        &  !< parameter 53  - 2nd wall layer thickness ground plate
9201           0.31_wp,        &  !< parameter 54  - 3rd wall layer thickness ground plate
9202           0.42_wp,        &  !< parameter 55  - 4th wall layer thickness ground plate
9203           2000000.0_wp,   &  !< parameter 56  - heat capacity 1st/2nd wall layer ground plate
9204           103000.0_wp,    &  !< parameter 57  - heat capacity 3rd wall layer ground plate
9205           900000.0_wp,    &  !< parameter 58  - heat capacity 4th wall layer ground plate
9206           0.35_wp,        &  !< parameter 59  - thermal conductivity 1st/2nd wall layer ground plate
9207           0.38_wp,        &  !< parameter 60  - thermal conductivity 3rd wall layer ground plate
9208           0.04_wp,        &  !< parameter 61  - thermal conductivity 4th wall layer ground plate
9209           0.005_wp,       &  !< parameter 62  - 1st wall layer thickness ground floor level
9210           0.01_wp,        &  !< parameter 63  - 2nd wall layer thickness ground floor level
9211           0.31_wp,        &  !< parameter 64  - 3rd wall layer thickness ground floor level
9212           0.43_wp,        &  !< parameter 65  - 4th wall layer thickness ground floor level
9213           27.0_wp,        &  !< parameter 66  - wall albedo ground floor level
9214           0.003_wp,       &  !< parameter 67  - 1st window layer thickness ground floor level
9215           0.006_wp,       &  !< parameter 68  - 2nd window layer thickness ground floor level
9216           0.012_wp,       &  !< parameter 69  - 3rd window layer thickness ground floor level
9217           0.018_wp,       &  !< parameter 70  - 4th window layer thickness ground floor level
9218           1736000.0_wp,   &  !< parameter 71  - heat capacity 1st/2nd window layer ground floor level
9219           1736000.0_wp,   &  !< parameter 72  - heat capacity 3rd window layer ground floor level
9220           1736000.0_wp,   &  !< parameter 73  - heat capacity 4th window layer ground floor level
9221           0.11_wp,        &  !< parameter 74  - thermal conductivity 1st/2nd window layer ground floor level
9222           0.11_wp,        &  !< parameter 75  - thermal conductivity 3rd window layer ground floor level
9223           0.11_wp,        &  !< parameter 76  - thermal conductivity 4th window layer ground floor level
9224           27.0_wp,        &  !< parameter 77  - window albedo ground floor level
9225           5.0_wp,         &  !< parameter 78  - green albedo ground floor level
9226           0.003_wp,       &  !< parameter 79  - 1st window layer thickness above ground floor level
9227           0.006_wp,       &  !< parameter 80  - 2nd thickness window layer above ground floor level
9228           0.012_wp,       &  !< parameter 81  - 3rd window layer thickness above ground floor level
9229           0.018_wp,       &  !< parameter 82  - 4th window layer thickness above ground floor level
9230           1736000.0_wp,   &  !< parameter 83  - heat capacity 1st/2nd window layer above ground floor level
9231           1736000.0_wp,   &  !< parameter 84  - heat capacity 3rd window layer above ground floor level
9232           1736000.0_wp,   &  !< parameter 85  - heat capacity 4th window layer above ground floor level
9233           0.11_wp,        &  !< parameter 86  - thermal conductivity 1st/2nd window layer above ground floor level
9234           0.11_wp,        &  !< parameter 87  - thermal conductivity 3rd window layer above ground floor level
9235           0.11_wp,        &  !< parameter 88  - thermal conductivity 4th window layer above ground floor level
9236           1.0_wp,         &  !< parameter 89  - wall fraction roof
9237           0.005_wp,       &  !< parameter 90  - 1st wall layer thickness roof
9238           0.01_wp,        &  !< parameter 91  - 2nd wall layer thickness roof
9239           0.5_wp,         &  !< parameter 92  - 3rd wall layer thickness roof
9240           0.79_wp,        &  !< parameter 93  - 4th wall layer thickness roof
9241           2000000.0_wp,   &  !< parameter 94  - heat capacity 1st/2nd wall layer roof
9242           103000.0_wp,    &  !< parameter 95  - heat capacity 3rd wall layer roof
9243           900000.0_wp,    &  !< parameter 96  - heat capacity 4th wall layer roof
9244           0.35_wp,        &  !< parameter 97  - thermal conductivity 1st/2nd wall layer roof
9245           0.38_wp,        &  !< parameter 98  - thermal conductivity 3rd wall layer roof
9246           0.04_wp,        &  !< parameter 99  - thermal conductivity 4th wall layer roof
9247           0.93_wp,        &  !< parameter 100 - wall emissivity roof
9248           27.0_wp,        &  !< parameter 101 - wall albedo roof
9249           0.0_wp,         &  !< parameter 102 - window fraction roof
9250           0.003_wp,       &  !< parameter 103 - window 1st layer thickness roof
9251           0.006_wp,       &  !< parameter 104 - window 2nd layer thickness roof
9252           0.012_wp,       &  !< parameter 105 - window 3rd layer thickness roof
9253           0.018_wp,       &  !< parameter 106 - window 4th layer thickness roof
9254           1736000.0_wp,   &  !< parameter 107 - heat capacity 1st/2nd window layer roof
9255           1736000.0_wp,   &  !< parameter 108 - heat capacity 3rd window layer roof
9256           1736000.0_wp,   &  !< parameter 109 - heat capacity 4th window layer roof
9257           0.11_wp,        &  !< parameter 110 - thermal conductivity 1st/2nd window layer roof
9258           0.11_wp,        &  !< parameter 111 - thermal conductivity 3rd window layer roof
9259           0.11_wp,        &  !< parameter 112 - thermal conductivity 4th window layer roof
9260           0.87_wp,        &  !< parameter 113 - window emissivity roof
9261           0.7_wp,         &  !< parameter 114 - window transmissivity roof
9262           27.0_wp,        &  !< parameter 115 - window albedo roof
9263           0.86_wp,        &  !< parameter 116 - green emissivity roof
9264           5.0_wp,         &  !< parameter 117 - green albedo roof
9265           0.0_wp,         &  !< parameter 118 - green type roof
9266           0.8_wp,         &  !< parameter 119 - shading factor
9267           0.6_wp,         &  !< parameter 120 - g-value windows
9268           3.0_wp,         &  !< parameter 121 - u-value windows
9269           0.1_wp,         &  !< parameter 122 - basical airflow without occupancy of the room
9270           0.5_wp,         &  !< parameter 123 - additional airflow depend of occupancy of the room
9271           0.0_wp,         &  !< parameter 124 - heat recovery efficiency
9272           2.5_wp,         &  !< parameter 125 - dynamic parameter specific effective surface
9273           165000.0_wp,    &  !< parameter 126 - dynamic parameter innner heatstorage
9274           4.5_wp,         &  !< parameter 127 - ratio internal surface/floor area
9275           100000.0_wp,    &  !< parameter 128 - maximal heating capacity
9276           0.0_wp,         &  !< parameter 129 - maximal cooling capacity
9277           4.0_wp,         &  !< parameter 130 - additional internal heat gains dependent on occupancy of the room
9278           8.0_wp,         &  !< parameter 131 - basic internal heat gains without occupancy of the room
9279           3.0_wp,         &  !< parameter 132 - storey height
9280           0.2_wp,         &  !< parameter 133 - ceiling construction height
9281           0.1_wp,         &  !< parameter 134 - anthropogenic heat output for heating
9282           1.333_wp        &  !< parameter 135 - anthropogenic heat output for cooling
9283                            /)
9284                           
9285        building_pars(:,3) = (/   &
9286           0.7_wp,         &  !< parameter 0   - wall fraction above ground floor level
9287           0.3_wp,         &  !< parameter 1   - window fraction above ground floor level
9288           0.0_wp,         &  !< parameter 2   - green fraction above ground floor level
9289           0.0_wp,         &  !< parameter 3   - green fraction roof above ground floor level
9290           1.5_wp,         &  !< parameter 4   - LAI roof
9291           1.5_wp,         &  !< parameter 5   - LAI on wall above ground floor level
9292           2000000.0_wp,   &  !< parameter 6   - heat capacity 1st/2nd wall layer above ground floor level
9293           103000.0_wp,    &  !< parameter 7   - heat capacity 3rd wall layer above ground floor level
9294           900000.0_wp,    &  !< parameter 8   - heat capacity 4th wall layer above ground floor level
9295           0.35_wp,        &  !< parameter 9   - thermal conductivity 1st/2nd wall layer above ground floor level
9296           0.14_wp,        &  !< parameter 10  - thermal conductivity 3rd wall layer above ground floor level
9297           0.035_wp,       &  !< parameter 11  - thermal conductivity 4th wall layer above ground floor level
9298           299.15_wp,      &  !< parameter 12  - indoor target summer temperature
9299           293.15_wp,      &  !< parameter 13  - indoor target winter temperature
9300           0.92_wp,        &  !< parameter 14  - wall emissivity above ground floor level
9301           0.86_wp,        &  !< parameter 15  - green emissivity above ground floor level
9302           0.8_wp,         &  !< parameter 16  - window emissivity above ground floor level
9303           0.6_wp,         &  !< parameter 17  - window transmissivity above ground floor level
9304           0.001_wp,       &  !< parameter 18  - z0 roughness above ground floor level
9305           0.0001_wp,      &  !< parameter 19  - z0h/z0g roughness heat/humidity above ground floor level
9306           3.0_wp,         &  !< parameter 20  - ground floor level height
9307           0.75_wp,        &  !< parameter 21  - wall fraction ground floor level
9308           0.25_wp,        &  !< parameter 22  - window fraction ground floor level
9309           0.0_wp,         &  !< parameter 23  - green fraction ground floor level
9310           0.0_wp,         &  !< parameter 24  - green fraction roof ground floor level
9311           1.5_wp,         &  !< parameter 25  - LAI on wall ground floor level
9312           2000000.0_wp,   &  !< parameter 26  - heat capacity 1st/2nd wall layer ground floor level
9313           103000.0_wp,    &  !< parameter 27  - heat capacity 3rd wall layer ground floor level
9314           900000.0_wp,    &  !< parameter 28  - heat capacity 4th wall layer ground floor level
9315           0.35_wp,        &  !< parameter 29  - thermal conductivity 1st/2nd wall layer ground floor level
9316           0.14_wp,        &  !< parameter 30  - thermal conductivity 3rd wall layer ground floor level
9317           0.035_wp,       &  !< parameter 31  - thermal conductivity 4th wall layer ground floor level
9318           0.92_wp,        &  !< parameter 32  - wall emissivity ground floor level
9319           0.8_wp,         &  !< parameter 33  - window emissivity ground floor level
9320           0.86_wp,        &  !< parameter 34  - green emissivity ground floor level
9321           0.6_wp,         &  !< parameter 35  - window transmissivity ground floor level
9322           0.001_wp,       &  !< parameter 36  - z0 roughness ground floor level
9323           0.0001_wp,      &  !< parameter 37  - z0h/z0q roughness heat/humidity
9324           27.0_wp,        &  !< parameter 38  - wall albedo above ground floor level
9325           5.0_wp,         &  !< parameter 39  - green albedo above ground floor level
9326           27.0_wp,        &  !< parameter 40  - window albedo above ground floor level
9327           0.005_wp,       &  !< parameter 41  - 1st wall layer thickness above ground floor level
9328           0.01_wp,        &  !< parameter 42  - 2nd wall layer thickness above ground floor level
9329           0.41_wp,        &  !< parameter 43  - 3rd wall layer thickness above ground floor level
9330           0.7_wp,         &  !< parameter 44  - 4th wall layer thickness above ground floor level
9331           20000.0_wp,     &  !< parameter 45  - heat capacity wall surface
9332           23.0_wp,        &  !< parameter 46  - thermal conductivity of wall surface
9333           20000.0_wp,     &  !< parameter 47  - heat capacity of window surface
9334           20000.0_wp,     &  !< parameter 48  - heat capacity of green surface
9335           23.0_wp,        &  !< parameter 49  - thermal conductivity of window surface
9336           10.0_wp,        &  !< parameter 50  - thermal conductivty of green surface
9337           1.0_wp,         &  !< parameter 51  - wall fraction ground plate
9338           0.005_wp,       &  !< parameter 52  - 1st wall layer thickness ground plate
9339           0.01_wp,        &  !< parameter 53  - 2nd wall layer thickness ground plate
9340           0.41_wp,        &  !< parameter 54  - 3rd wall layer thickness ground plate
9341           0.7_wp,         &  !< parameter 55  - 4th wall layer thickness ground plate
9342           2000000.0_wp,   &  !< parameter 56  - heat capacity 1st/2nd wall layer ground plate
9343           103000.0_wp,    &  !< parameter 57  - heat capacity 3rd wall layer ground plate
9344           900000.0_wp,    &  !< parameter 58  - heat capacity 4th wall layer ground plate
9345           0.35_wp,        &  !< parameter 59  - thermal conductivity 1st/2nd wall layer ground plate
9346           0.14_wp,        &  !< parameter 60  - thermal conductivity 3rd wall layer ground plate
9347           0.035_wp,       &  !< parameter 61  - thermal conductivity 4th wall layer ground plate
9348           0.005_wp,       &  !< parameter 62  - 1st wall layer thickness ground floor level
9349           0.01_wp,        &  !< parameter 63  - 2nd wall layer thickness ground floor level
9350           0.41_wp,        &  !< parameter 64  - 3rd wall layer thickness ground floor level
9351           0.7_wp,         &  !< parameter 65  - 4th wall layer thickness ground floor level
9352           27.0_wp,        &  !< parameter 66  - wall albedo ground floor level
9353           0.003_wp,       &  !< parameter 67  - 1st window layer thickness ground floor level
9354           0.006_wp,       &  !< parameter 68  - 2nd window layer thickness ground floor level
9355           0.012_wp,       &  !< parameter 69  - 3rd window layer thickness ground floor level
9356           0.018_wp,       &  !< parameter 70  - 4th window layer thickness ground floor level
9357           1736000.0_wp,   &  !< parameter 71  - heat capacity 1st/2nd window layer ground floor level
9358           1736000.0_wp,   &  !< parameter 72  - heat capacity 3rd window layer ground floor level
9359           1736000.0_wp,   &  !< parameter 73  - heat capacity 4th window layer ground floor level
9360           0.037_wp,       &  !< parameter 74  - thermal conductivity 1st/2nd window layer ground floor level
9361           0.037_wp,       &  !< parameter 75  - thermal conductivity 3rd window layer ground floor level
9362           0.037_wp,       &  !< parameter 76  - thermal conductivity 4th window layer ground floor level
9363           27.0_wp,        &  !< parameter 77  - window albedo ground floor level
9364           5.0_wp,         &  !< parameter 78  - green albedo ground floor level
9365           0.003_wp,       &  !< parameter 79  - 1st window layer thickness above ground floor level
9366           0.006_wp,       &  !< parameter 80  - 2nd thickness window layer above ground floor level
9367           0.012_wp,       &  !< parameter 81  - 3rd window layer thickness above ground floor level
9368           0.018_wp,       &  !< parameter 82  - 4th window layer thickness above ground floor level
9369           1736000.0_wp,   &  !< parameter 83  - heat capacity 1st/2nd window layer above ground floor level
9370           1736000.0_wp,   &  !< parameter 84  - heat capacity 3rd window layer above ground floor level
9371           1736000.0_wp,   &  !< parameter 85  - heat capacity 4th window layer above ground floor level
9372           0.037_wp,       &  !< parameter 86  - thermal conductivity 1st/2nd window layer above ground floor level
9373           0.037_wp,       &  !< parameter 87  - thermal conductivity 3rd window layer above ground floor level
9374           0.037_wp,       &  !< parameter 88  - thermal conductivity 4th window layer above ground floor level
9375           1.0_wp,         &  !< parameter 89  - wall fraction roof
9376           0.005_wp,       &  !< parameter 90  - 1st wall layer thickness roof
9377           0.01_wp,        &  !< parameter 91  - 2nd wall layer thickness roof
9378           0.41_wp,        &  !< parameter 92  - 3rd wall layer thickness roof
9379           0.7_wp,         &  !< parameter 93  - 4th wall layer thickness roof
9380           2000000.0_wp,   &  !< parameter 94  - heat capacity 1st/2nd wall layer roof
9381           103000.0_wp,    &  !< parameter 95  - heat capacity 3rd wall layer roof
9382           900000.0_wp,    &  !< parameter 96  - heat capacity 4th wall layer roof
9383           0.35_wp,        &  !< parameter 97  - thermal conductivity 1st/2nd wall layer roof
9384           0.14_wp,        &  !< parameter 98  - thermal conductivity 3rd wall layer roof
9385           0.035_wp,       &  !< parameter 99  - thermal conductivity 4th wall layer roof
9386           0.93_wp,        &  !< parameter 100 - wall emissivity roof
9387           27.0_wp,        &  !< parameter 101 - wall albedo roof
9388           0.0_wp,         &  !< parameter 102 - window fraction roof
9389           0.003_wp,       &  !< parameter 103 - window 1st layer thickness roof
9390           0.006_wp,       &  !< parameter 104 - window 2nd layer thickness roof
9391           0.012_wp,       &  !< parameter 105 - window 3rd layer thickness roof
9392           0.018_wp,       &  !< parameter 106 - window 4th layer thickness roof
9393           1736000.0_wp,   &  !< parameter 107 - heat capacity 1st/2nd window layer roof
9394           1736000.0_wp,   &  !< parameter 108 - heat capacity 3rd window layer roof
9395           1736000.0_wp,   &  !< parameter 109 - heat capacity 4th window layer roof
9396           0.037_wp,       &  !< parameter 110 - thermal conductivity 1st/2nd window layer roof
9397           0.037_wp,       &  !< parameter 111 - thermal conductivity 3rd window layer roof
9398           0.037_wp,       &  !< parameter 112 - thermal conductivity 4th window layer roof
9399           0.8_wp,         &  !< parameter 113 - window emissivity roof
9400           0.6_wp,         &  !< parameter 114 - window transmissivity roof
9401           27.0_wp,        &  !< parameter 115 - window albedo roof
9402           0.86_wp,        &  !< parameter 116 - green emissivity roof
9403           5.0_wp,         &  !< parameter 117 - green albedo roof
9404           0.0_wp,         &  !< parameter 118 - green type roof
9405           0.8_wp,         &  !< parameter 119 - shading factor
9406           0.5_wp,         &  !< parameter 120 - g-value windows
9407           2.5_wp,         &  !< parameter 121 - u-value windows
9408           0.1_wp,         &  !< parameter 122 - basical airflow without occupancy of the room
9409           0.5_wp,         &  !< parameter 123 - additional airflow depend of occupancy of the room
9410           0.8_wp,         &  !< parameter 124 - heat recovery efficiency
9411           2.5_wp,         &  !< parameter 125 - dynamic parameter specific effective surface
9412           80000.0_wp,     &  !< parameter 126 - dynamic parameter innner heatstorage
9413           4.5_wp,         &  !< parameter 127 - ratio internal surface/floor area
9414           100000.0_wp,    &  !< parameter 128 - maximal heating capacity
9415           0.0_wp,         &  !< parameter 129 - maximal cooling capacity
9416           3.0_wp,         &  !< parameter 130 - additional internal heat gains dependent on occupancy of the room
9417           8.0_wp,         &  !< parameter 131 - basic internal heat gains without occupancy of the room
9418           3.0_wp,         &  !< parameter 132 - storey height
9419           0.2_wp,         &  !< parameter 133 - ceiling construction height
9420           -2.0_wp,        &  !< parameter 134 - anthropogenic heat output for heating
9421           1.25_wp         &  !< parameter 135 - anthropogenic heat output for cooling
9422                            /) 
9423                           
9424        building_pars(:,4) = (/   &
9425           0.5_wp,         &  !< parameter 0   - wall fraction above ground floor level
9426           0.5_wp,         &  !< parameter 1   - window fraction above ground floor level
9427           0.0_wp,         &  !< parameter 2   - green fraction above ground floor level
9428           0.0_wp,         &  !< parameter 3   - green fraction roof above ground floor level
9429           1.5_wp,         &  !< parameter 4   - LAI roof
9430           1.5_wp,         &  !< parameter 5   - LAI on wall above ground floor level
9431           2200000.0_wp,   &  !< parameter 6   - heat capacity 1st/2nd wall layer above ground floor level
9432           1400000.0_wp,   &  !< parameter 7   - heat capacity 3rd wall layer above ground floor level
9433           1300000.0_wp,   &  !< parameter 8   - heat capacity 4th wall layer above ground floor level
9434           0.35_wp,        &  !< parameter 9   - thermal conductivity 1st/2nd wall layer above ground floor level
9435           0.8_wp,         &  !< parameter 10  - thermal conductivity 3rd wall layer above ground floor level
9436           2.1_wp,         &  !< parameter 11  - thermal conductivity 4th wall layer above ground floor level
9437           299.15_wp,      &  !< parameter 12  - indoor target summer temperature
9438           293.15_wp,      &  !< parameter 13  - indoor target winter temperature
9439           0.93_wp,        &  !< parameter 14  - wall emissivity above ground floor level
9440           0.86_wp,        &  !< parameter 15  - green emissivity above ground floor level
9441           0.91_wp,        &  !< parameter 16  - window emissivity above ground floor level
9442           0.75_wp,        &  !< parameter 17  - window transmissivity above ground floor level
9443           0.001_wp,       &  !< parameter 18  - z0 roughness above ground floor level
9444           0.0001_wp,      &  !< parameter 19  - z0h/z0g roughness heat/humidity above ground floor level
9445           4.0_wp,         &  !< parameter 20  - ground floor level height
9446           0.55_wp,        &  !< parameter 21  - wall fraction ground floor level
9447           0.45_wp,        &  !< parameter 22  - window fraction ground floor level
9448           0.0_wp,         &  !< parameter 23  - green fraction ground floor level
9449           0.0_wp,         &  !< parameter 24  - green fraction roof ground floor level
9450           1.5_wp,         &  !< parameter 25  - LAI on wall ground floor level
9451           2200000.0_wp,   &  !< parameter 26  - heat capacity 1st/2nd wall layer ground floor level
9452           1400000.0_wp,   &  !< parameter 27  - heat capacity 3rd wall layer ground floor level
9453           1300000.0_wp,   &  !< parameter 28  - heat capacity 4th wall layer ground floor level
9454           0.35_wp,        &  !< parameter 29  - thermal conductivity 1st/2nd wall layer ground floor level
9455           0.8_wp,         &  !< parameter 30  - thermal conductivity 3rd wall layer ground floor level
9456           2.1_wp,         &  !< parameter 31  - thermal conductivity 4th wall layer ground floor level
9457           0.93_wp,        &  !< parameter 32  - wall emissivity ground floor level
9458           0.91_wp,        &  !< parameter 33  - window emissivity ground floor level
9459           0.86_wp,        &  !< parameter 34  - green emissivity ground floor level
9460           0.75_wp,        &  !< parameter 35  - window transmissivity ground floor level
9461           0.001_wp,       &  !< parameter 36  - z0 roughness ground floor level
9462           0.0001_wp,      &  !< parameter 37  - z0h/z0q roughness heat/humidity
9463           27.0_wp,        &  !< parameter 38  - wall albedo above ground floor level
9464           5.0_wp,         &  !< parameter 39  - green albedo above ground floor level
9465           27.0_wp,        &  !< parameter 40  - window albedo above ground floor level
9466           0.005_wp,       &  !< parameter 41  - 1st wall layer thickness above ground floor level
9467           0.01_wp,        &  !< parameter 42  - 2nd wall layer thickness above ground floor level
9468           0.39_wp,        &  !< parameter 43  - 3rd wall layer thickness above ground floor level
9469           0.63_wp,        &  !< parameter 44  - 4th wall layer thickness above ground floor level
9470           20000.0_wp,     &  !< parameter 45  - heat capacity wall surface
9471           23.0_wp,        &  !< parameter 46  - thermal conductivity of wall surface
9472           20000.0_wp,     &  !< parameter 47  - heat capacity of window surface
9473           20000.0_wp,     &  !< parameter 48  - heat capacity of green surface
9474           23.0_wp,        &  !< parameter 49  - thermal conductivity of window surface
9475           10.0_wp,        &  !< parameter 50  - thermal conductivty of green surface
9476           1.0_wp,         &  !< parameter 51  - wall fraction ground plate
9477           0.005_wp,       &  !< parameter 52  - 1st wall layer thickness ground plate
9478           0.01_wp,        &  !< parameter 53  - 2nd wall layer thickness ground plate
9479           0.39_wp,        &  !< parameter 54  - 3rd wall layer thickness ground plate
9480           0.63_wp,        &  !< parameter 55  - 4th wall layer thickness ground plate
9481           2200000.0_wp,   &  !< parameter 56  - heat capacity 1st/2nd wall layer ground plate
9482           1400000.0_wp,   &  !< parameter 57  - heat capacity 3rd wall layer ground plate
9483           1300000.0_wp,   &  !< parameter 58  - heat capacity 4th wall layer ground plate
9484           0.35_wp,        &  !< parameter 59  - thermal conductivity 1st/2nd wall layer ground plate
9485           0.8_wp,         &  !< parameter 60  - thermal conductivity 3rd wall layer ground plate
9486           2.1_wp,         &  !< parameter 61  - thermal conductivity 4th wall layer ground plate
9487           0.005_wp,       &  !< parameter 62  - 1st wall layer thickness ground floor level
9488           0.01_wp,        &  !< parameter 63  - 2nd wall layer thickness ground floor level
9489           0.39_wp,        &  !< parameter 64  - 3rd wall layer thickness ground floor level
9490           0.63_wp,        &  !< parameter 65  - 4th wall layer thickness ground floor level
9491           27.0_wp,        &  !< parameter 66  - wall albedo ground floor level
9492           0.003_wp,       &  !< parameter 67  - 1st window layer thickness ground floor level
9493           0.006_wp,       &  !< parameter 68  - 2nd window layer thickness ground floor level
9494           0.012_wp,       &  !< parameter 69  - 3rd window layer thickness ground floor level
9495           0.018_wp,       &  !< parameter 70  - 4th window layer thickness ground floor level
9496           1736000.0_wp,   &  !< parameter 71  - heat capacity 1st/2nd window layer ground floor level
9497           1736000.0_wp,   &  !< parameter 72  - heat capacity 3rd window layer ground floor level
9498           1736000.0_wp,   &  !< parameter 73  - heat capacity 4th window layer ground floor level
9499           0.57_wp,        &  !< parameter 74  - thermal conductivity 1st/2nd window layer ground floor level
9500           0.57_wp,        &  !< parameter 75  - thermal conductivity 3rd window layer ground floor level
9501           0.57_wp,        &  !< parameter 76  - thermal conductivity 4th window layer ground floor level
9502           27.0_wp,        &  !< parameter 77  - window albedo ground floor level
9503           5.0_wp,         &  !< parameter 78  - green albedo ground floor level
9504           0.003_wp,       &  !< parameter 79  - 1st window layer thickness above ground floor level
9505           0.006_wp,       &  !< parameter 80  - 2nd thickness window layer above ground floor level
9506           0.012_wp,       &  !< parameter 81  - 3rd window layer thickness above ground floor level
9507           0.018_wp,       &  !< parameter 82  - 4th window layer thickness above ground floor level
9508           1736000.0_wp,   &  !< parameter 83  - heat capacity 1st/2nd window layer above ground floor level
9509           1736000.0_wp,   &  !< parameter 84  - heat capacity 3rd window layer above ground floor level
9510           1736000.0_wp,   &  !< parameter 85  - heat capacity 4th window layer above ground floor level
9511           0.57_wp,        &  !< parameter 86  - thermal conductivity 1st/2nd window layer above ground floor level
9512           0.57_wp,        &  !< parameter 87  - thermal conductivity 3rd window layer above ground floor level
9513           0.57_wp,        &  !< parameter 88  - thermal conductivity 4th window layer above ground floor level
9514           1.0_wp,         &  !< parameter 89  - wall fraction roof
9515           0.005_wp,       &  !< parameter 90  - 1st wall layer thickness roof
9516           0.01_wp,        &  !< parameter 91  - 2nd wall layer thickness roof
9517           0.39_wp,        &  !< parameter 92  - 3rd wall layer thickness roof
9518           0.63_wp,        &  !< parameter 93  - 4th wall layer thickness roof
9519           2200000.0_wp,   &  !< parameter 94  - heat capacity 1st/2nd wall layer roof
9520           1400000.0_wp,   &  !< parameter 95  - heat capacity 3rd wall layer roof
9521           1300000.0_wp,   &  !< parameter 96  - heat capacity 4th wall layer roof
9522           0.35_wp,        &  !< parameter 97  - thermal conductivity 1st/2nd wall layer roof
9523           0.8_wp,         &  !< parameter 98  - thermal conductivity 3rd wall layer roof
9524           2.1_wp,         &  !< parameter 99  - thermal conductivity 4th wall layer roof
9525           0.93_wp,        &  !< parameter 100 - wall emissivity roof
9526           27.0_wp,        &  !< parameter 101 - wall albedo roof
9527           0.0_wp,         &  !< parameter 102 - window fraction roof
9528           0.003_wp,       &  !< parameter 103 - window 1st layer thickness roof
9529           0.006_wp,       &  !< parameter 104 - window 2nd layer thickness roof
9530           0.012_wp,       &  !< parameter 105 - window 3rd layer thickness roof
9531           0.018_wp,       &  !< parameter 106 - window 4th layer thickness roof
9532           1736000.0_wp,   &  !< parameter 107 - heat capacity 1st/2nd window layer roof
9533           1736000.0_wp,   &  !< parameter 108 - heat capacity 3rd window layer roof
9534           1736000.0_wp,   &  !< parameter 109 - heat capacity 4th window layer roof
9535           0.57_wp,        &  !< parameter 110 - thermal conductivity 1st/2nd window layer roof
9536           0.57_wp,        &  !< parameter 111 - thermal conductivity 3rd window layer roof
9537           0.57_wp,        &  !< parameter 112 - thermal conductivity 4th window layer roof
9538           0.91_wp,        &  !< parameter 113 - window emissivity roof
9539           0.75_wp,        &  !< parameter 114 - window transmissivity roof
9540           27.0_wp,        &  !< parameter 115 - window albedo roof
9541           0.86_wp,        &  !< parameter 116 - green emissivity roof
9542           5.0_wp,         &  !< parameter 117 - green albedo roof
9543           0.0_wp,         &  !< parameter 118 - green type roof
9544           0.8_wp,         &  !< parameter 119 - shading factor
9545           0.76_wp,        &  !< parameter 120 - g-value windows
9546           5.0_wp,         &  !< parameter 121 - u-value windows
9547           0.1_wp,         &  !< parameter 122 - basical airflow without occupancy of the room
9548           1.5_wp,         &  !< parameter 123 - additional airflow depend of occupancy of the room
9549           0.0_wp,         &  !< parameter 124 - heat recovery efficiency
9550           3.5_wp,         &  !< parameter 125 - dynamic parameter specific effective surface
9551           370000.0_wp,    &  !< parameter 126 - dynamic parameter innner heatstorage
9552           4.5_wp,         &  !< parameter 127 - ratio internal surface/floor area
9553           100000.0_wp,    &  !< parameter 128 - maximal heating capacity
9554           0.0_wp,         &  !< parameter 129 - maximal cooling capacity
9555           3.0_wp,         &  !< parameter 130 - additional internal heat gains dependent on occupancy of the room
9556           10.0_wp,        &  !< parameter 131 - basic internal heat gains without occupancy of the room
9557           3.0_wp,         &  !< parameter 132 - storey height
9558           0.2_wp,         &  !< parameter 133 - ceiling construction height
9559           0.1_wp,         &  !< parameter 134 - anthropogenic heat output for heating
9560           1.333_wp        &  !< parameter 135 - anthropogenic heat output for cooling
9561                            /)   
9562                           
9563        building_pars(:,5) = (/   &
9564           0.5_wp,         &  !< parameter 0   - wall fraction above ground floor level
9565           0.5_wp,         &  !< parameter 1   - window fraction above ground floor level
9566           0.0_wp,         &  !< parameter 2   - green fraction above ground floor level
9567           0.0_wp,         &  !< parameter 3   - green fraction roof above ground floor level
9568           1.5_wp,         &  !< parameter 4   - LAI roof
9569           1.5_wp,         &  !< parameter 5   - LAI on wall above ground floor level
9570           2000000.0_wp,   &  !< parameter 6   - heat capacity 1st/2nd wall layer above ground floor level
9571           103000.0_wp,    &  !< parameter 7   - heat capacity 3rd wall layer above ground floor level
9572           900000.0_wp,    &  !< parameter 8   - heat capacity 4th wall layer above ground floor level
9573           0.35_wp,        &  !< parameter 9   - thermal conductivity 1st/2nd wall layer above ground floor level
9574           0.38_wp,        &  !< parameter 10  - thermal conductivity 3rd wall layer above ground floor level
9575           0.04_wp,        &  !< parameter 11  - thermal conductivity 4th wall layer above ground floor level
9576           299.15_wp,      &  !< parameter 12  - indoor target summer temperature
9577           293.15_wp,      &  !< parameter 13  - indoor target winter temperature
9578           0.92_wp,        &  !< parameter 14  - wall emissivity above ground floor level
9579           0.86_wp,        &  !< parameter 15  - green emissivity above ground floor level
9580           0.87_wp,        &  !< parameter 16  - window emissivity above ground floor level
9581           0.7_wp,         &  !< parameter 17  - window transmissivity above ground floor level
9582           0.001_wp,       &  !< parameter 18  - z0 roughness above ground floor level
9583           0.0001_wp,      &  !< parameter 19  - z0h/z0g roughness heat/humidity above ground floor level
9584           4.0_wp,         &  !< parameter 20  - ground floor level height
9585           0.55_wp,        &  !< parameter 21  - wall fraction ground floor level
9586           0.45_wp,        &  !< parameter 22  - window fraction ground floor level
9587           0.0_wp,         &  !< parameter 23  - green fraction ground floor level
9588           0.0_wp,         &  !< parameter 24  - green fraction roof ground floor level
9589           1.5_wp,         &  !< parameter 25  - LAI on wall ground floor level
9590           2000000.0_wp,   &  !< parameter 26  - heat capacity 1st/2nd wall layer ground floor level
9591           103000.0_wp,    &  !< parameter 27  - heat capacity 3rd wall layer ground floor level
9592           900000.0_wp,    &  !< parameter 28  - heat capacity 4th wall layer ground floor level
9593           0.35_wp,        &  !< parameter 29  - thermal conductivity 1st/2nd wall layer ground floor level
9594           0.38_wp,        &  !< parameter 30  - thermal conductivity 3rd wall layer ground floor level
9595           0.04_wp,        &  !< parameter 31  - thermal conductivity 4th wall layer ground floor level
9596           0.92_wp,        &  !< parameter 32  - wall emissivity ground floor level
9597           0.87_wp,        &  !< parameter 33  - window emissivity ground floor level
9598           0.86_wp,        &  !< parameter 34  - green emissivity ground floor level
9599           0.7_wp,         &  !< parameter 35  - window transmissivity ground floor level
9600           0.001_wp,       &  !< parameter 36  - z0 roughness ground floor level
9601           0.0001_wp,      &  !< parameter 37  - z0h/z0q roughness heat/humidity
9602           27.0_wp,        &  !< parameter 38  - wall albedo above ground floor level
9603           5.0_wp,         &  !< parameter 39  - green albedo above ground floor level
9604           27.0_wp,        &  !< parameter 40  - window albedo above ground floor level
9605           0.005_wp,       &  !< parameter 41  - 1st wall layer thickness above ground floor level
9606           0.01_wp,        &  !< parameter 42  - 2nd wall layer thickness above ground floor level
9607           0.31_wp,        &  !< parameter 43  - 3rd wall layer thickness above ground floor level
9608           0.43_wp,        &  !< parameter 44  - 4th wall layer thickness above ground floor level
9609           20000.0_wp,     &  !< parameter 45  - heat capacity wall surface
9610           23.0_wp,        &  !< parameter 46  - thermal conductivity of wall surface
9611           20000.0_wp,     &  !< parameter 47  - heat capacity of window surface
9612           20000.0_wp,     &  !< parameter 48  - heat capacity of green surface
9613           23.0_wp,        &  !< parameter 49  - thermal conductivity of window surface
9614           10.0_wp,        &  !< parameter 50  - thermal conductivty of green surface
9615           1.0_wp,         &  !< parameter 51  - wall fraction ground plate
9616           0.005_wp,       &  !< parameter 52  - 1st wall layer thickness ground plate
9617           0.01_wp,        &  !< parameter 53  - 2nd wall layer thickness ground plate
9618           0.31_wp,        &  !< parameter 54  - 3rd wall layer thickness ground plate
9619           0.43_wp,        &  !< parameter 55  - 4th wall layer thickness ground plate
9620           2000000.0_wp,   &  !< parameter 56  - heat capacity 1st/2nd wall layer ground plate
9621           103000.0_wp,    &  !< parameter 57  - heat capacity 3rd wall layer ground plate
9622           900000.0_wp,    &  !< parameter 58  - heat capacity 4th wall layer ground plate
9623           0.35_wp,        &  !< parameter 59  - thermal conductivity 1st/2nd wall layer ground plate
9624           0.38_wp,        &  !< parameter 60  - thermal conductivity 3rd wall layer ground plate
9625           0.04_wp,        &  !< parameter 61  - thermal conductivity 4th wall layer ground plate
9626           0.005_wp,       &  !< parameter 62  - 1st wall layer thickness ground floor level
9627           0.01_wp,        &  !< parameter 63  - 2nd wall layer thickness ground floor level
9628           0.31_wp,        &  !< parameter 64  - 3rd wall layer thickness ground floor level
9629           0.43_wp,        &  !< parameter 65  - 4th wall layer thickness ground floor level
9630           27.0_wp,        &  !< parameter 66  - wall albedo ground floor level
9631           0.003_wp,       &  !< parameter 67  - 1st window layer thickness ground floor level
9632           0.006_wp,       &  !< parameter 68  - 2nd window layer thickness ground floor level
9633           0.012_wp,       &  !< parameter 69  - 3rd window layer thickness ground floor level
9634           0.018_wp,       &  !< parameter 70  - 4th window layer thickness ground floor level
9635           1736000.0_wp,   &  !< parameter 71  - heat capacity 1st/2nd window layer ground floor level
9636           1736000.0_wp,   &  !< parameter 72  - heat capacity 3rd window layer ground floor level
9637           1736000.0_wp,   &  !< parameter 73  - heat capacity 4th window layer ground floor level
9638           0.11_wp,        &  !< parameter 74  - thermal conductivity 1st/2nd window layer ground floor level
9639           0.11_wp,        &  !< parameter 75  - thermal conductivity 3rd window layer ground floor level
9640           0.11_wp,        &  !< parameter 76  - thermal conductivity 4th window layer ground floor level
9641           27.0_wp,        &  !< parameter 77  - window albedo ground floor level
9642           5.0_wp,         &  !< parameter 78  - green albedo ground floor level
9643           0.003_wp,       &  !< parameter 79  - 1st window layer thickness above ground floor level
9644           0.006_wp,       &  !< parameter 80  - 2nd thickness window layer above ground floor level
9645           0.012_wp,       &  !< parameter 81  - 3rd window layer thickness above ground floor level
9646           0.018_wp,       &  !< parameter 82  - 4th window layer thickness above ground floor level
9647           1736000.0_wp,   &  !< parameter 83  - heat capacity 1st/2nd window layer above ground floor level
9648           1736000.0_wp,   &  !< parameter 84  - heat capacity 3rd window layer above ground floor level
9649           1736000.0_wp,   &  !< parameter 85  - heat capacity 4th window layer above ground floor level
9650           0.11_wp,        &  !< parameter 86  - thermal conductivity 1st/2nd window layer above ground floor level
9651           0.11_wp,        &  !< parameter 87  - thermal conductivity 3rd window layer above ground floor level
9652           0.11_wp,        &  !< parameter 88  - thermal conductivity 4th window layer above ground floor level
9653           1.0_wp,         &  !< parameter 89  - wall fraction roof
9654           0.005_wp,       &  !< parameter 90  - 1st wall layer thickness roof
9655           0.01_wp,        &  !< parameter 91  - 2nd wall layer thickness roof
9656           0.31_wp,        &  !< parameter 92  - 3rd wall layer thickness roof
9657           0.43_wp,        &  !< parameter 93  - 4th wall layer thickness roof
9658           2000000.0_wp,   &  !< parameter 94  - heat capacity 1st/2nd wall layer roof
9659           103000.0_wp,    &  !< parameter 95  - heat capacity 3rd wall layer roof
9660           900000.0_wp,    &  !< parameter 96  - heat capacity 4th wall layer roof
9661           0.35_wp,        &  !< parameter 97  - thermal conductivity 1st/2nd wall layer roof
9662           0.38_wp,        &  !< parameter 98  - thermal conductivity 3rd wall layer roof
9663           0.04_wp,        &  !< parameter 99  - thermal conductivity 4th wall layer roof
9664           0.91_wp,        &  !< parameter 100 - wall emissivity roof
9665           27.0_wp,        &  !< parameter 101 - wall albedo roof
9666           0.0_wp,         &  !< parameter 102 - window fraction roof
9667           0.003_wp,       &  !< parameter 103 - window 1st layer thickness roof
9668           0.006_wp,       &  !< parameter 104 - window 2nd layer thickness roof
9669           0.012_wp,       &  !< parameter 105 - window 3rd layer thickness roof
9670           0.018_wp,       &  !< parameter 106 - window 4th layer thickness roof
9671           1736000.0_wp,   &  !< parameter 107 - heat capacity 1st/2nd window layer roof
9672           1736000.0_wp,   &  !< parameter 108 - heat capacity 3rd window layer roof
9673           1736000.0_wp,   &  !< parameter 109 - heat capacity 4th window layer roof
9674           0.11_wp,        &  !< parameter 110 - thermal conductivity 1st/2nd window layer roof
9675           0.11_wp,        &  !< parameter 111 - thermal conductivity 3rd window layer roof
9676           0.11_wp,        &  !< parameter 112 - thermal conductivity 4th window layer roof
9677           0.87_wp,        &  !< parameter 113 - window emissivity roof
9678           0.7_wp,         &  !< parameter 114 - window transmissivity roof
9679           27.0_wp,        &  !< parameter 115 - window albedo roof
9680           0.86_wp,        &  !< parameter 116 - green emissivity roof
9681           5.0_wp,         &  !< parameter 117 - green albedo roof
9682           0.0_wp,         &  !< parameter 118 - green type roof
9683           0.8_wp,         &  !< parameter 119 - shading factor
9684           0.6_wp,         &  !< parameter 120 - g-value windows
9685           3.0_wp,         &  !< parameter 121 - u-value windows
9686           0.1_wp,         &  !< parameter 122 - basical airflow without occupancy of the room
9687           1.5_wp,         &  !< parameter 123 - additional airflow depend of occupancy of the room
9688           0.65_wp,        &  !< parameter 124 - heat recovery efficiency
9689           2.5_wp,         &  !< parameter 125 - dynamic parameter specific effective surface
9690           165000.0_wp,    &  !< parameter 126 - dynamic parameter innner heatstorage
9691           4.5_wp,         &  !< parameter 127 - ratio internal surface/floor area
9692           100000.0_wp,    &  !< parameter 128 - maximal heating capacity
9693           0.0_wp,         &  !< parameter 129 - maximal cooling capacity
9694           7.0_wp,         &  !< parameter 130 - additional internal heat gains dependent on occupancy of the room
9695           20.0_wp,        &  !< parameter 131 - basic internal heat gains without occupancy of the room
9696           3.0_wp,         &  !< parameter 132 - storey height
9697           0.2_wp,         &  !< parameter 133 - ceiling construction height
9698           0.0_wp,         &  !< parameter 134 - anthropogenic heat output for heating
9699           2.54_wp         &  !< parameter 135 - anthropogenic heat output for cooling
9700                            /)
9701                           
9702        building_pars(:,6) = (/   &
9703           0.425_wp,       &  !< parameter 0   - wall fraction above ground floor level
9704           0.575_wp,       &  !< parameter 1   - window fraction above ground floor level
9705           0.0_wp,         &  !< parameter 2   - green fraction above ground floor level
9706           0.0_wp,         &  !< parameter 3   - green fraction roof above ground floor level
9707           1.5_wp,         &  !< parameter 4   - LAI roof
9708           1.5_wp,         &  !< parameter 5   - LAI on wall above ground floor level
9709           2000000.0_wp,   &  !< parameter 6   - heat capacity 1st/2nd wall layer above ground floor level
9710           103000.0_wp,    &  !< parameter 7   - heat capacity 3rd wall layer above ground floor level
9711           900000.0_wp,    &  !< parameter 8   - heat capacity 4th wall layer above ground floor level
9712           0.35_wp,        &  !< parameter 9   - thermal conductivity 1st/2nd wall layer above ground floor level
9713           0.14_wp,        &  !< parameter 10  - thermal conductivity 3rd wall layer above ground floor level
9714           0.035_wp,       &  !< parameter 11  - thermal conductivity 4th wall layer above ground floor level
9715           299.15_wp,      &  !< parameter 12  - indoor target summer temperature
9716           293.15_wp,      &  !< parameter 13  - indoor target winter temperature
9717           0.92_wp,        &  !< parameter 14  - wall emissivity above ground floor level
9718           0.86_wp,        &  !< parameter 15  - green emissivity above ground floor level
9719           0.8_wp,         &  !< parameter 16  - window emissivity above ground floor level
9720           0.6_wp,         &  !< parameter 17  - window transmissivity above ground floor level
9721           0.001_wp,       &  !< parameter 18  - z0 roughness above ground floor level
9722           0.0001_wp,      &  !< parameter 19  - z0h/z0g roughness heat/humidity above ground floor level
9723           4.0_wp,         &  !< parameter 20  - ground floor level height
9724           0.475_wp,       &  !< parameter 21  - wall fraction ground floor level
9725           0.525_wp,       &  !< parameter 22  - window fraction ground floor level
9726           0.0_wp,         &  !< parameter 23  - green fraction ground floor level
9727           0.0_wp,         &  !< parameter 24  - green fraction roof ground floor level
9728           1.5_wp,         &  !< parameter 25  - LAI on wall ground floor level
9729           2000000.0_wp,   &  !< parameter 26  - heat capacity 1st/2nd wall layer ground floor level
9730           103000.0_wp,    &  !< parameter 27  - heat capacity 3rd wall layer ground floor level
9731           900000.0_wp,    &  !< parameter 28  - heat capacity 4th wall layer ground floor level
9732           0.35_wp,        &  !< parameter 29  - thermal conductivity 1st/2nd wall layer ground floor level
9733           0.14_wp,        &  !< parameter 30  - thermal conductivity 3rd wall layer ground floor level
9734           0.035_wp,       &  !< parameter 31  - thermal conductivity 4th wall layer ground floor level
9735           0.92_wp,        &  !< parameter 32  - wall emissivity ground floor level
9736           0.8_wp,         &  !< parameter 33  - window emissivity ground floor level
9737           0.86_wp,        &  !< parameter 34  - green emissivity ground floor level
9738           0.6_wp,         &  !< parameter 35  - window transmissivity ground floor level
9739           0.001_wp,       &  !< parameter 36  - z0 roughness ground floor level
9740           0.0001_wp,      &  !< parameter 37  - z0h/z0q roughness heat/humidity
9741           27.0_wp,        &  !< parameter 38  - wall albedo above ground floor level
9742           5.0_wp,         &  !< parameter 39  - green albedo above ground floor level
9743           27.0_wp,        &  !< parameter 40  - window albedo above ground floor level
9744           0.005_wp,       &  !< parameter 41  - 1st wall layer thickness above ground floor level
9745           0.01_wp,        &  !< parameter 42  - 2nd wall layer thickness above ground floor level
9746           0.41_wp,        &  !< parameter 43  - 3rd wall layer thickness above ground floor level
9747           0.7_wp,         &  !< parameter 44  - 4th wall layer thickness above ground floor level
9748           20000.0_wp,     &  !< parameter 45  - heat capacity wall surface
9749           23.0_wp,        &  !< parameter 46  - thermal conductivity of wall surface
9750           20000.0_wp,     &  !< parameter 47  - heat capacity of window surface
9751           20000.0_wp,     &  !< parameter 48  - heat capacity of green surface
9752           23.0_wp,        &  !< parameter 49  - thermal conductivity of window surface
9753           10.0_wp,        &  !< parameter 50  - thermal conductivty of green surface
9754           1.0_wp,         &  !< parameter 51  - wall fraction ground plate
9755           0.005_wp,       &  !< parameter 52  - 1st wall layer thickness ground plate
9756           0.01_wp,        &  !< parameter 53  - 2nd wall layer thickness ground plate
9757           0.41_wp,        &  !< parameter 54  - 3rd wall layer thickness ground plate
9758           0.7_wp,         &  !< parameter 55  - 4th wall layer thickness ground plate
9759           2000000.0_wp,   &  !< parameter 56  - heat capacity 1st/2nd wall layer ground plate
9760           103000.0_wp,    &  !< parameter 57  - heat capacity 3rd wall layer ground plate
9761           900000.0_wp,    &  !< parameter 58  - heat capacity 4th wall layer ground plate
9762           0.35_wp,        &  !< parameter 59  - thermal conductivity 1st/2nd wall layer ground plate
9763           0.14_wp,        &  !< parameter 60  - thermal conductivity 3rd wall layer ground plate
9764           0.035_wp,       &  !< parameter 61  - thermal conductivity 4th wall layer ground plate
9765           0.005_wp,       &  !< parameter 62  - 1st wall layer thickness ground floor level
9766           0.01_wp,        &  !< parameter 63  - 2nd wall layer thickness ground floor level
9767           0.41_wp,        &  !< parameter 64  - 3rd wall layer thickness ground floor level
9768           0.7_wp,         &  !< parameter 65  - 4th wall layer thickness ground floor level
9769           27.0_wp,        &  !< parameter 66  - wall albedo ground floor level
9770           0.003_wp,       &  !< parameter 67  - 1st window layer thickness ground floor level
9771           0.006_wp,       &  !< parameter 68  - 2nd window layer thickness ground floor level
9772           0.012_wp,       &  !< parameter 69  - 3rd window layer thickness ground floor level
9773           0.018_wp,       &  !< parameter 70  - 4th window layer thickness ground floor level
9774           1736000.0_wp,   &  !< parameter 71  - heat capacity 1st/2nd window layer ground floor level
9775           1736000.0_wp,   &  !< parameter 72  - heat capacity 3rd window layer ground floor level
9776           1736000.0_wp,   &  !< parameter 73  - heat capacity 4th window layer ground floor level
9777           0.037_wp,       &  !< parameter 74  - thermal conductivity 1st/2nd window layer ground floor level
9778           0.037_wp,       &  !< parameter 75  - thermal conductivity 3rd window layer ground floor level
9779           0.037_wp,       &  !< parameter 76  - thermal conductivity 4th window layer ground floor level
9780           27.0_wp,        &  !< parameter 77  - window albedo ground floor level
9781           5.0_wp,         &  !< parameter 78  - green albedo ground floor level
9782           0.003_wp,       &  !< parameter 79  - 1st window layer thickness above ground floor level
9783           0.006_wp,       &  !< parameter 80  - 2nd thickness window layer above ground floor level
9784           0.012_wp,       &  !< parameter 81  - 3rd window layer thickness above ground floor level
9785           0.018_wp,       &  !< parameter 82  - 4th window layer thickness above ground floor level
9786           1736000.0_wp,   &  !< parameter 83  - heat capacity 1st/2nd window layer above ground floor level
9787           1736000.0_wp,   &  !< parameter 84  - heat capacity 3rd window layer above ground floor level
9788           1736000.0_wp,   &  !< parameter 85  - heat capacity 4th window layer above ground floor level
9789           0.037_wp,       &  !< parameter 86  - thermal conductivity 1st/2nd window layer above ground floor level
9790           0.037_wp,       &  !< parameter 87  - thermal conductivity 3rd window layer above ground floor level
9791           0.037_wp,       &  !< parameter 88  - thermal conductivity 4th window layer above ground floor level
9792           1.0_wp,         &  !< parameter 89  - wall fraction roof
9793           0.005_wp,       &  !< parameter 90  - 1st wall layer thickness roof
9794           0.01_wp,        &  !< parameter 91  - 2nd wall layer thickness roof
9795           0.41_wp,        &  !< parameter 92  - 3rd wall layer thickness roof
9796           0.7_wp,         &  !< parameter 93  - 4th wall layer thickness roof
9797           2000000.0_wp,   &  !< parameter 94  - heat capacity 1st/2nd wall layer roof
9798           103000.0_wp,    &  !< parameter 95  - heat capacity 3rd wall layer roof
9799           900000.0_wp,    &  !< parameter 96  - heat capacity 4th wall layer roof
9800           0.35_wp,        &  !< parameter 97  - thermal conductivity 1st/2nd wall layer roof
9801           0.14_wp,        &  !< parameter 98  - thermal conductivity 3rd wall layer roof
9802           0.035_wp,       &  !< parameter 99  - thermal conductivity 4th wall layer roof
9803           0.91_wp,        &  !< parameter 100 - wall emissivity roof
9804           27.0_wp,        &  !< parameter 101 - wall albedo roof
9805           0.0_wp,         &  !< parameter 102 - window fraction roof
9806           0.003_wp,       &  !< parameter 103 - window 1st layer thickness roof
9807           0.006_wp,       &  !< parameter 104 - window 2nd layer thickness roof
9808           0.012_wp,       &  !< parameter 105 - window 3rd layer thickness roof
9809           0.018_wp,       &  !< parameter 106 - window 4th layer thickness roof
9810           1736000.0_wp,   &  !< parameter 107 - heat capacity 1st/2nd window layer roof
9811           1736000.0_wp,   &  !< parameter 108 - heat capacity 3rd window layer roof
9812           1736000.0_wp,   &  !< parameter 109 - heat capacity 4th window layer roof
9813           0.037_wp,       &  !< parameter 110 - thermal conductivity 1st/2nd window layer roof
9814           0.037_wp,       &  !< parameter 111 - thermal conductivity 3rd window layer roof
9815           0.037_wp,       &  !< parameter 112 - thermal conductivity 4th window layer roof
9816           0.8_wp,         &  !< parameter 113 - window emissivity roof
9817           0.6_wp,         &  !< parameter 114 - window transmissivity roof
9818           27.0_wp,        &  !< parameter 115 - window albedo roof
9819           0.86_wp,        &  !< parameter 116 - green emissivity roof
9820           5.0_wp,         &  !< parameter 117 - green albedo roof
9821           0.0_wp,         &  !< parameter 118 - green type roof
9822           0.8_wp,         &  !< parameter 119 - shading factor
9823           0.5_wp,         &  !< parameter 120 - g-value windows
9824           2.5_wp,         &  !< parameter 121 - u-value windows
9825           0.1_wp,         &  !< parameter 122 - basical airflow without occupancy of the room
9826           1.5_wp,         &  !< parameter 123 - additional airflow depend of occupancy of the room
9827           0.9_wp,         &  !< parameter 124 - heat recovery efficiency
9828           2.5_wp,         &  !< parameter 125 - dynamic parameter specific effective surface
9829           80000.0_wp,     &  !< parameter 126 - dynamic parameter innner heatstorage
9830           4.5_wp,         &  !< parameter 127 - ratio internal surface/floor area
9831           100000.0_wp,    &  !< parameter 128 - maximal heating capacity
9832           0.0_wp,         &  !< parameter 129 - maximal cooling capacity
9833           5.0_wp,         &  !< parameter 130 - additional internal heat gains dependent on occupancy of the room
9834           15.0_wp,        &  !< parameter 131 - basic internal heat gains without occupancy of the room
9835           3.0_wp,         &  !< parameter 132 - storey height
9836           0.2_wp,         &  !< parameter 133 - ceiling construction height
9837           -2.0_wp,        &  !< parameter 134 - anthropogenic heat output for heating
9838           1.25_wp         &  !< parameter 135 - anthropogenic heat output for cooling
9839                            /)
9840                           
9841        building_pars(:,7) = (/   &
9842           1.0_wp,         &  !< parameter 0   - wall fraction above ground floor level
9843           0.0_wp,         &  !< parameter 1   - window fraction above ground floor level
9844           0.0_wp,         &  !< parameter 2   - green fraction above ground floor level
9845           0.0_wp,         &  !< parameter 3   - green fraction roof above ground floor level
9846           1.5_wp,         &  !< parameter 4   - LAI roof
9847           1.5_wp,         &  !< parameter 5   - LAI on wall above ground floor level
9848           1950400.0_wp,   &  !< parameter 6   - heat capacity 1st/2nd wall layer above ground floor level
9849           1848000.0_wp,   &  !< parameter 7   - heat capacity 3rd wall layer above ground floor level
9850           1848000.0_wp,   &  !< parameter 8   - heat capacity 4th wall layer above ground floor level
9851           0.7_wp,         &  !< parameter 9   - thermal conductivity 1st/2nd wall layer above ground floor level
9852           1.0_wp,         &  !< parameter 10  - thermal conductivity 3rd wall layer above ground floor level
9853           1.0_wp,         &  !< parameter 11  - thermal conductivity 4th wall layer above ground floor level
9854           299.15_wp,      &  !< parameter 12  - indoor target summer temperature
9855           293.15_wp,      &  !< parameter 13  - indoor target winter temperature
9856           0.9_wp,         &  !< parameter 14  - wall emissivity above ground floor level
9857           0.86_wp,        &  !< parameter 15  - green emissivity above ground floor level
9858           0.8_wp,         &  !< parameter 16  - window emissivity above ground floor level
9859           0.6_wp,         &  !< parameter 17  - window transmissivity above ground floor level
9860           0.001_wp,       &  !< parameter 18  - z0 roughness above ground floor level
9861           0.0001_wp,      &  !< parameter 19  - z0h/z0g roughness heat/humidity above ground floor level
9862           4.0_wp,         &  !< parameter 20  - ground floor level height
9863           1.0_wp,         &  !< parameter 21  - wall fraction ground floor level
9864           0.0_wp,         &  !< parameter 22  - window fraction ground floor level
9865           0.0_wp,         &  !< parameter 23  - green fraction ground floor level
9866           0.0_wp,         &  !< parameter 24  - green fraction roof ground floor level
9867           1.5_wp,         &  !< parameter 25  - LAI on wall ground floor level
9868           1950400.0_wp,   &  !< parameter 26  - heat capacity 1st/2nd wall layer ground floor level
9869           1848000.0_wp,   &  !< parameter 27  - heat capacity 3rd wall layer ground floor level
9870           1848000.0_wp,   &  !< parameter 28  - heat capacity 4th wall layer ground floor level
9871           0.7_wp,         &  !< parameter 29  - thermal conductivity 1st/2nd wall layer ground floor level
9872           1.0_wp,         &  !< parameter 30  - thermal conductivity 3rd wall layer ground floor level
9873           1.0_wp,         &  !< parameter 31  - thermal conductivity 4th wall layer ground floor level
9874           0.9_wp,         &  !< parameter 32  - wall emissivity ground floor level
9875           0.8_wp,         &  !< parameter 33  - window emissivity ground floor level
9876           0.86_wp,        &  !< parameter 34  - green emissivity ground floor level
9877           0.6_wp,         &  !< parameter 35  - window transmissivity ground floor level
9878           0.001_wp,       &  !< parameter 36  - z0 roughness ground floor level
9879           0.0001_wp,      &  !< parameter 37  - z0h/z0q roughness heat/humidity
9880           27.0_wp,        &  !< parameter 38  - wall albedo above ground floor level
9881           5.0_wp,         &  !< parameter 39  - green albedo above ground floor level
9882           27.0_wp,        &  !< parameter 40  - window albedo above ground floor level
9883           0.29_wp,        &  !< parameter 41  - 1st wall layer thickness above ground floor level
9884           0.295_wp,       &  !< parameter 42  - 2nd wall layer thickness above ground floor level
9885           0.695_wp,       &  !< parameter 43  - 3rd wall layer thickness above ground floor level
9886           0.985_wp,       &  !< parameter 44  - 4th wall layer thickness above ground floor level
9887           20000.0_wp,     &  !< parameter 45  - heat capacity wall surface
9888           23.0_wp,        &  !< parameter 46  - thermal conductivity of wall surface
9889           20000.0_wp,     &  !< parameter 47  - heat capacity of window surface
9890           20000.0_wp,     &  !< parameter 48  - heat capacity of green surface
9891           23.0_wp,        &  !< parameter 49  - thermal conductivity of window surface
9892           10.0_wp,        &  !< parameter 50  - thermal conductivty of green surface
9893           1.0_wp,         &  !< parameter 51  - wall fraction ground plate
9894           0.29_wp,        &  !< parameter 52  - 1st wall layer thickness ground plate
9895           0.295_wp,       &  !< parameter 53  - 2nd wall layer thickness ground plate
9896           0.695_wp,       &  !< parameter 54  - 3rd wall layer thickness ground plate
9897           0.985_wp,       &  !< parameter 55  - 4th wall layer thickness ground plate
9898           1950400.0_wp,   &  !< parameter 56  - heat capacity 1st/2nd wall layer ground plate
9899           1848000.0_wp,   &  !< parameter 57  - heat capacity 3rd wall layer ground plate
9900           1848000.0_wp,   &  !< parameter 58  - heat capacity 4th wall layer ground plate
9901           0.7_wp,         &  !< parameter 59  - thermal conductivity 1st/2nd wall layer ground plate
9902           1.0_wp,         &  !< parameter 60  - thermal conductivity 3rd wall layer ground plate
9903           1.0_wp,         &  !< parameter 61  - thermal conductivity 4th wall layer ground plate
9904           0.29_wp,        &  !< parameter 62  - 1st wall layer thickness ground floor level
9905           0.295_wp,       &  !< parameter 63  - 2nd wall layer thickness ground floor level
9906           0.695_wp,       &  !< parameter 64  - 3rd wall layer thickness ground floor level
9907           0.985_wp,       &  !< parameter 65  - 4th wall layer thickness ground floor level
9908           27.0_wp,        &  !< parameter 66  - wall albedo ground floor level
9909           0.003_wp,       &  !< parameter 67  - 1st window layer thickness ground floor level
9910           0.006_wp,       &  !< parameter 68  - 2nd window layer thickness ground floor level
9911           0.012_wp,       &  !< parameter 69  - 3rd window layer thickness ground floor level
9912           0.018_wp,       &  !< parameter 70  - 4th window layer thickness ground floor level
9913           1736000.0_wp,   &  !< parameter 71  - heat capacity 1st/2nd window layer ground floor level
9914           1736000.0_wp,   &  !< parameter 72  - heat capacity 3rd window layer ground floor level
9915           1736000.0_wp,   &  !< parameter 73  - heat capacity 4th window layer ground floor level
9916           0.57_wp,        &  !< parameter 74  - thermal conductivity 1st/2nd window layer ground floor level
9917           0.57_wp,        &  !< parameter 75  - thermal conductivity 3rd window layer ground floor level
9918           0.57_wp,        &  !< parameter 76  - thermal conductivity 4th window layer ground floor level
9919           27.0_wp,        &  !< parameter 77  - window albedo ground floor level
9920           5.0_wp,         &  !< parameter 78  - green albedo ground floor level
9921           0.003_wp,       &  !< parameter 79  - 1st window layer thickness above ground floor level
9922           0.006_wp,       &  !< parameter 80  - 2nd thickness window layer above ground floor level
9923           0.012_wp,       &  !< parameter 81  - 3rd window layer thickness above ground floor level
9924           0.018_wp,       &  !< parameter 82  - 4th window layer thickness above ground floor level
9925           1736000.0_wp,   &  !< parameter 83  - heat capacity 1st/2nd window layer above ground floor level
9926           1736000.0_wp,   &  !< parameter 84  - heat capacity 3rd window layer above ground floor level
9927           1736000.0_wp,   &  !< parameter 85  - heat capacity 4th window layer above ground floor level
9928           0.57_wp,        &  !< parameter 86  - thermal conductivity 1st/2nd window layer above ground floor level
9929           0.57_wp,        &  !< parameter 87  - thermal conductivity 3rd window layer above ground floor level
9930           0.57_wp,        &  !< parameter 88  - thermal conductivity 4th window layer above ground floor level
9931           1.0_wp,         &  !< parameter 89  - wall fraction roof
9932           0.29_wp,        &  !< parameter 90  - 1st wall layer thickness roof
9933           0.295_wp,       &  !< parameter 91  - 2nd wall layer thickness roof
9934           0.695_wp,       &  !< parameter 92  - 3rd wall layer thickness roof
9935           0.985_wp,       &  !< parameter 93  - 4th wall layer thickness roof
9936           1950400.0_wp,   &  !< parameter 94  - heat capacity 1st/2nd wall layer roof
9937           1848000.0_wp,   &  !< parameter 95  - heat capacity 3rd wall layer roof
9938           1848000.0_wp,   &  !< parameter 96  - heat capacity 4th wall layer roof
9939           0.7_wp,         &  !< parameter 97  - thermal conductivity 1st/2nd wall layer roof
9940           1.0_wp,         &  !< parameter 98  - thermal conductivity 3rd wall layer roof
9941           1.0_wp,         &  !< parameter 99  - thermal conductivity 4th wall layer roof
9942           0.9_wp,         &  !< parameter 100 - wall emissivity roof
9943           27.0_wp,        &  !< parameter 101 - wall albedo roof
9944           0.0_wp,         &  !< parameter 102 - window fraction roof
9945           0.003_wp,       &  !< parameter 103 - window 1st layer thickness roof
9946           0.006_wp,       &  !< parameter 104 - window 2nd layer thickness roof
9947           0.012_wp,       &  !< parameter 105 - window 3rd layer thickness roof
9948           0.018_wp,       &  !< parameter 106 - window 4th layer thickness roof
9949           1736000.0_wp,   &  !< parameter 107 - heat capacity 1st/2nd window layer roof
9950           1736000.0_wp,   &  !< parameter 108 - heat capacity 3rd window layer roof
9951           1736000.0_wp,   &  !< parameter 109 - heat capacity 4th window layer roof
9952           0.57_wp,        &  !< parameter 110 - thermal conductivity 1st/2nd window layer roof
9953           0.57_wp,        &  !< parameter 111 - thermal conductivity 3rd window layer roof
9954           0.57_wp,        &  !< parameter 112 - thermal conductivity 4th window layer roof
9955           0.8_wp,         &  !< parameter 113 - window emissivity roof
9956           0.6_wp,         &  !< parameter 114 - window transmissivity roof
9957           27.0_wp,        &  !< parameter 115 - window albedo roof
9958           0.86_wp,        &  !< parameter 116 - green emissivity roof
9959           5.0_wp,         &  !< parameter 117 - green albedo roof
9960           0.0_wp,         &  !< parameter 118 - green type roof
9961           0.8_wp,         &  !< parameter 119 - shading factor
9962           100.0_wp,       &  !< parameter 120 - g-value windows
9963           100.0_wp,       &  !< parameter 121 - u-value windows
9964           20.0_wp,        &  !< parameter 122 - basical airflow without occupancy of the room
9965           20.0_wp,        &  !< parameter 123 - additional airflow depend of occupancy of the room
9966           0.0_wp,         &  !< parameter 124 - heat recovery efficiency
9967           1.0_wp,         &  !< parameter 125 - dynamic parameter specific effective surface
9968           1.0_wp,         &  !< parameter 126 - dynamic parameter innner heatstorage
9969           4.5_wp,         &  !< parameter 127 - ratio internal surface/floor area
9970           100000.0_wp,    &  !< parameter 128 - maximal heating capacity
9971           0.0_wp,         &  !< parameter 129 - maximal cooling capacity
9972           0.0_wp,         &  !< parameter 130 - additional internal heat gains dependent on occupancy of the room
9973           0.0_wp,         &  !< parameter 131 - basic internal heat gains without occupancy of the room
9974           3.0_wp,         &  !< parameter 132 - storey height
9975           0.2_wp,         &  !< parameter 133 - ceiling construction height
9976           0.0_wp,         &  !< parameter 134 - anthropogenic heat output for heating
9977           0.0_wp          &  !< parameter 135 - anthropogenic heat output for cooling
9978                        /)
9979                       
9980     END SUBROUTINE usm_define_pars
9981 
9982   
9983  END MODULE urban_surface_mod
Note: See TracBrowser for help on using the repository browser.