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

Last change on this file since 3524 was 3524, checked in by raasch, 3 years ago

unused variables removed, missing working precision added, missing preprocessor directives added, bugfix concerning allocation of t_surf_wall_v in nopointer case, declaration statements rearranged to avoid compile time errors, mpi_abort arguments replaced to avoid compile errors

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