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

Last change on this file since 3748 was 3748, checked in by suehring, 2 years ago

Revise conversion of waste-heat flux (do not divide by air density, will be done in diffusion_s)

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