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

Last change on this file since 3824 was 3824, checked in by pavelkrc, 2 years ago

Code review of radiation_model_mod.f90

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