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

Last change on this file since 3502 was 3502, checked in by suehring, 3 years ago

Disable initialization of building roofs with ground-floor-level properties since this causes strong oscillations of surface temperature during the spin-up.

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