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

Last change on this file since 3769 was 3769, checked in by moh.hefny, 2 years ago

removed unused variables from urban_surface_mod radiation_model_mod and part of module_interface

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