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

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

Coupling of indoor model to atmosphere; output of indoor temperatures and waste heat; enable restarts with indoor model; bugfix plant transpiration; bugfix - missing calculation of 10cm temperature

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