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

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

Branch resler -r 3439 re-integrated into current trunk: RTM 3.0, transpiration of plant canopy, output fixes in USM

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