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

Last change on this file since 3730 was 3730, checked in by moh.hefny, 2 years ago

fix surface heat capacity in building parameters

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