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

Last change on this file since 3814 was 3814, checked in by pavelkrc, 5 years ago

Rename conflicting variable names

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