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

Last change on this file since 3469 was 3469, checked in by kanani, 3 years ago

Implement indoor climate and energy demand model

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