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

Last change on this file since 3768 was 3767, checked in by raasch, 2 years ago

unused variables removed from rrd-subroutines parameter list

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