Ignore:
Timestamp:
Sep 9, 2020 8:27:58 PM (4 years ago)
Author:
pavelkrc
Message:

Radiative transfer model RTM version 4.1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/urban_surface_mod.f90

    r4669 r4671  
    2727! -----------------
    2828! $Id$
     29! Radiative transfer model RTM version 4.1
     30! - Implementation of downward facing USM and LSM surfaces
     31! - Restructuralization EB call
     32! - Improved debug logging
     33! - Removal of deprecated CSV inputs
     34! - Bugfixes
     35! Author: J. Resler (Institute of Computer Science, Prague)
     36!
     37! 4669 2020-09-09 13:43:47Z pavelkrc
    2938! Fix calculation of force_radiation_call
    3039!
     
    255264!> fraq(0,m) + fraq(1,m) = 0?!
    256265!> @todo Use unit 90 for OPEN/CLOSE of input files (FK)
    257 !> @todo Remove reading of old csv inputs
    258266!--------------------------------------------------------------------------------------------------!
    259267 MODULE urban_surface_mod
     
    280288    USE basic_constants_and_equations_mod,                                                         &
    281289        ONLY:  c_p,                                                                                &
     290               degc_to_k,                                                                          &
    282291               g,                                                                                  &
    283292               kappa,                                                                              &
    284293               l_v,                                                                                &
     294               magnus_tl,                                                                       &
    285295               pi,                                                                                 &
    286296               r_d,                                                                                &
     
    372382    USE radiation_model_mod,                                                                       &
    373383        ONLY:  albedo_type,                                                                        &
     384               dirname,                                                                            &
     385               diridx,                                                                             &
     386               dirint,                                                                             &
    374387               force_radiation_call,                                                               &
    375388               id,                                                                                 &
     389               idown,                                                                              &
    376390               ieast,                                                                              &
    377391               inorth,                                                                             &
     
    379393               iup,                                                                                &
    380394               iwest,                                                                              &
     395               nd,                                                                                 &
    381396               nz_urban_b,                                                                         &
    382397               nz_urban_t,                                                                         &
     
    404419               ind_veg_wall,                                                                       &
    405420               ind_wat_win,                                                                        &
     421               surf_type,                                                                          &
    406422               surf_usm_h,                                                                         &
    407423               surf_usm_v,                                                                         &
     
    461477!-- Configuration parameters (they can be setup in PALM config)
    462478    LOGICAL ::  force_radiation_call_l = .FALSE.   !< flag parameter for unscheduled radiation model calls
    463     LOGICAL ::  read_wall_temp_3d = .FALSE.        !<
    464     LOGICAL ::  usm_anthropogenic_heat = .FALSE.   !< flag parameter indicating wheather the anthropogenic heat sources
    465                                                    !< (e.g.transportation) are used
    466     LOGICAL ::  usm_material_model = .TRUE.        !< flag parameter indicating wheather the  model of heat in materials is used
    467479    LOGICAL ::  usm_wall_mod = .FALSE.             !< reduces conductivity of the first 2 wall layers by factor 0.1
    468480
    469481
    470482    INTEGER(iwp) ::  building_type = 1               !< default building type (preleminary setting)
    471     INTEGER(iwp) ::  land_category = 2               !< default category for land surface
    472     INTEGER(iwp) ::  pedestrian_category = 2         !< default category for wall surface in pedestrian zone
    473483    INTEGER(iwp) ::  roof_category = 2               !< default category for root surface
    474484    INTEGER(iwp) ::  wall_category = 2               !< default category for wall surface over pedestrian zone
     
    640650
    641651    REAL(wp)  ::  ground_floor_level = 4.0_wp  !< default ground floor level
    642     REAL(wp)  ::  roof_height_limit  = 4.0_wp  !< height to distinguish between land surfaces and roofs
    643 
    644652
    645653!
     
    650658    REAL(wp), DIMENSION(0:135,1:7) ::  building_pars  !<
    651659!
    652 !-- Type for surface temperatures at vertical walls. Is not necessary for horizontal walls.
    653     TYPE t_surf_vertical
    654        REAL(wp), DIMENSION(:), ALLOCATABLE         ::  t  !<
    655     END TYPE t_surf_vertical
    656 !
    657 !-- Type for wall temperatures at vertical walls. Is not necessary for horizontal walls.
    658     TYPE t_wall_vertical
    659        REAL(wp), DIMENSION(:,:), ALLOCATABLE       ::  t  !<
    660     END TYPE t_wall_vertical
    661 
    662     TYPE surf_type_usm
    663        REAL(wp), DIMENSION(:),   ALLOCATABLE ::  var_usm_1d  !< 1D prognostic variable
    664        REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  var_usm_2d  !< 2D prognostic variable
    665     END TYPE surf_type_usm
    666 
    667     TYPE(surf_type_usm), POINTER  ::  m_liq_usm_h    !< liquid water reservoir (m), horizontal surface elements
    668     TYPE(surf_type_usm), POINTER  ::  m_liq_usm_h_p  !< progn. liquid water reservoir (m), horizontal surface elements
    669 
    670     TYPE(surf_type_usm), TARGET   ::  m_liq_usm_h_1  !<
    671     TYPE(surf_type_usm), TARGET   ::  m_liq_usm_h_2  !<
    672 
    673     TYPE(surf_type_usm), TARGET   ::  tm_liq_usm_h_m  !< liquid water reservoir tendency (m), horizontal surface elements
    674 !
    675 !-- Anthropogenic heat sources
    676     INTEGER(iwp)                                   ::  naheatlayers = 1  !< number of layers of anthropogenic heat
    677 
    678     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE        ::  aheat             !< daily average of anthropogenic heat (W/m2)
    679     REAL(wp), DIMENSION(:,:), ALLOCATABLE          ::  aheatprof         !< diurnal profiles of anthropogenic heat
    680                                                                          !< for particular layers
    681 
    682 !
     660!-- Type for 1d surface variables as surface temperature and liquid water reservoir
     661    TYPE surf_type_1d_usm
     662       REAL(wp), DIMENSION(:), ALLOCATABLE         ::  val  !<
     663    END TYPE surf_type_1d_usm
     664!
     665!-- Type for 2d surface variables as wall temperature
     666    TYPE surf_type_2d_usm
     667       REAL(wp), DIMENSION(:,:), ALLOCATABLE       ::  val  !<
     668    END TYPE surf_type_2d_usm
    683669!-- Wall surface model
    684670!-- Wall surface model constants
     
    688674
    689675    INTEGER(iwp)                                   ::  soil_type     !<
    690 
    691 
    692     REAL(wp), DIMENSION(nzb_wall:nzt_wall)         ::  zwn_default        = (/0.0242_wp, 0.0969_wp, 0.346_wp, 1.0_wp /)
    693     REAL(wp), DIMENSION(nzb_wall:nzt_wall)         ::  zwn_default_green  = (/0.25_wp,   0.5_wp,    0.75_wp,  1.0_wp /)
    694                                                                           !< normalized soil, wall and roof, window and
    695                                                                           !< green layer depths (m/m)
    696     REAL(wp), DIMENSION(nzb_wall:nzt_wall)         ::  zwn_default_window = (/0.25_wp,   0.5_wp,    0.75_wp,  1.0_wp /)
    697 
    698676
    699677    REAL(wp)  ::  m_total                  = 0.0_wp    !< weighted total water content of the soil (m3/m3)
     
    706684    REAL(wp)  ::  window_inner_temperature = 295.0_wp  !< temperature of the inner window
    707685                                                       !< surface (~22 degrees C) (K)
    708 
    709686!
    710687!-- Surface and material model variables for walls, ground, roofs
    711     REAL(wp), DIMENSION(:), ALLOCATABLE            ::  zwn                 !< normalized wall layer depths (m)
    712     REAL(wp), DIMENSION(:), ALLOCATABLE            ::  zwn_green           !< normalized green layer depths (m)
    713     REAL(wp), DIMENSION(:), ALLOCATABLE            ::  zwn_window          !< normalized window layer depths (m)
    714 
    715     REAL(wp), DIMENSION(:), POINTER                ::  t_surf_green_h      !<
    716     REAL(wp), DIMENSION(:), POINTER                ::  t_surf_green_h_p    !<
    717     REAL(wp), DIMENSION(:), POINTER                ::  t_surf_wall_h       !<
    718     REAL(wp), DIMENSION(:), POINTER                ::  t_surf_wall_h_p     !<
    719     REAL(wp), DIMENSION(:), POINTER                ::  t_surf_window_h     !<
    720     REAL(wp), DIMENSION(:), POINTER                ::  t_surf_window_h_p   !<
    721 
    722     REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_green_h_1    !<
    723     REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_green_h_2    !<
    724     REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_wall_h_1     !<
    725     REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_wall_h_2     !<
    726     REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_window_h_1   !<
    727     REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET    ::  t_surf_window_h_2   !<
    728 
    729     TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_green_v      !<
    730     TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_green_v_p    !<
    731     TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_wall_v       !<
    732     TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_wall_v_p     !<
    733     TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_window_v     !<
    734     TYPE(t_surf_vertical), DIMENSION(:), POINTER   ::  t_surf_window_v_p   !<
    735 
    736     TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_green_v_1    !<
    737     TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_green_v_2    !<
    738     TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_wall_v_1     !<
    739     TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_wall_v_2     !<
    740     TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_window_v_1   !<
    741     TYPE(t_surf_vertical), DIMENSION(0:3), TARGET  ::  t_surf_window_v_2   !<
     688    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_green_h      !<
     689    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_green_h_p    !<
     690    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_wall_h       !<
     691    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_wall_h_p     !<
     692    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_window_h     !<
     693    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_window_h_p   !<
     694
     695    TYPE(surf_type_1d_usm), DIMENSION(0:1), TARGET  ::  t_surf_green_h_1    !<
     696    TYPE(surf_type_1d_usm), DIMENSION(0:1), TARGET  ::  t_surf_green_h_2    !<
     697    TYPE(surf_type_1d_usm), DIMENSION(0:1), TARGET  ::  t_surf_wall_h_1     !<
     698    TYPE(surf_type_1d_usm), DIMENSION(0:1), TARGET  ::  t_surf_wall_h_2     !<
     699    TYPE(surf_type_1d_usm), DIMENSION(0:1), TARGET  ::  t_surf_window_h_1   !<
     700    TYPE(surf_type_1d_usm), DIMENSION(0:1), TARGET  ::  t_surf_window_h_2   !<
     701
     702    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_green_v      !<
     703    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_green_v_p    !<
     704    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_wall_v       !<
     705    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_wall_v_p     !<
     706    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_window_v     !<
     707    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  t_surf_window_v_p   !<
     708
     709    TYPE(surf_type_1d_usm), DIMENSION(0:3), TARGET  ::  t_surf_green_v_1    !<
     710    TYPE(surf_type_1d_usm), DIMENSION(0:3), TARGET  ::  t_surf_green_v_2    !<
     711    TYPE(surf_type_1d_usm), DIMENSION(0:3), TARGET  ::  t_surf_wall_v_1     !<
     712    TYPE(surf_type_1d_usm), DIMENSION(0:3), TARGET  ::  t_surf_wall_v_2     !<
     713    TYPE(surf_type_1d_usm), DIMENSION(0:3), TARGET  ::  t_surf_window_v_1   !<
     714    TYPE(surf_type_1d_usm), DIMENSION(0:3), TARGET  ::  t_surf_window_v_2   !<
    742715
    743716!
    744717!-- Energy balance variables
    745 !-- Parameters of the land, roof and wall surfaces
    746     REAL(wp), DIMENSION(:,:), POINTER                ::  fc_h          !<
    747     REAL(wp), DIMENSION(:,:), POINTER                ::  rootfr_h      !<
    748     REAL(wp), DIMENSION(:,:), POINTER                ::  swc_h         !<
    749     REAL(wp), DIMENSION(:,:), POINTER                ::  swc_h_p       !<
    750     REAL(wp), DIMENSION(:,:), POINTER                ::  swc_res_h     !<
    751     REAL(wp), DIMENSION(:,:), POINTER                ::  swc_sat_h     !<
    752     REAL(wp), DIMENSION(:,:), POINTER                ::  t_green_h     !<
    753     REAL(wp), DIMENSION(:,:), POINTER                ::  t_green_h_p   !<
    754     REAL(wp), DIMENSION(:,:), POINTER                ::  t_wall_h      !<
    755     REAL(wp), DIMENSION(:,:), POINTER                ::  t_wall_h_p    !<
    756     REAL(wp), DIMENSION(:,:), POINTER                ::  wilt_h        !<
    757     REAL(wp), DIMENSION(:,:), POINTER                ::  t_window_h    !<
    758     REAL(wp), DIMENSION(:,:), POINTER                ::  t_window_h_p  !<
    759 
    760 
    761     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  fc_h_1        !<
    762     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  rootfr_h_1    !<
    763     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  swc_h_1       !<
    764     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  swc_h_2       !<
    765     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  swc_res_h_1   !<
    766     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  swc_sat_h_1   !<
    767     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_green_h_1   !<
    768     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_green_h_2   !<
    769     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_wall_h_1    !<
    770     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_wall_h_2    !<
    771     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  wilt_h_1      !<
    772     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_window_h_1  !<
    773     REAL(wp), DIMENSION(:,:), ALLOCATABLE, TARGET    ::  t_window_h_2  !<
    774 
    775 
    776     TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_green_v     !<
    777     TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_green_v_p   !<
    778     TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_wall_v      !<
    779     TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_wall_v_p    !<
    780     TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_window_v    !<
    781     TYPE(t_wall_vertical), DIMENSION(:), POINTER   ::  t_window_v_p  !<
    782 
    783 
    784     TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_green_v_1   !<
    785     TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_green_v_2   !<
    786     TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_wall_v_1    !<
    787     TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_wall_v_2    !<
    788     TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_window_v_1  !<
    789     TYPE(t_wall_vertical), DIMENSION(0:3), TARGET  ::  t_window_v_2  !<
    790 
    791 !
    792 !-- Surface and material parameter classes (surface_type)
    793 !-- Albedo, emissivity, lambda_surf, roughness, thickness, volumetric heat capacity, thermal conductivity
    794     CHARACTER(12), DIMENSION(:), ALLOCATABLE  ::  surface_type_names    !< names of wall types (used only for reports)
    795 
    796     INTEGER(iwp)                              ::  n_surface_types       !< number of the wall type categories
    797 
    798     INTEGER(iwp), PARAMETER                   ::  ialbedo  = 1          !< albedo of the surface
    799     INTEGER(iwp), PARAMETER                   ::  icsurf   = 6          !< Surface skin layer heat capacity (J m-2 K-1 )
    800     INTEGER(iwp), PARAMETER                   ::  iemiss   = 2          !< emissivity of the surface
    801     INTEGER(iwp), PARAMETER                   ::  ilambdah = 9          !< thermal conductivity lambda H
    802                                                                         !< of the wall (W m-1 K-1 )
    803     INTEGER(iwp), PARAMETER                   ::  ilambdas = 3          !< heat conductivity lambda S between surface
    804                                                                         !< and material ( W m-2 K-1 )
    805     INTEGER(iwp), PARAMETER                   ::  irhoC    = 8          !< volumetric heat capacity rho*C of
    806                                                                         !< the material ( J m-3 K-1 )
    807     INTEGER(iwp), PARAMETER                   ::  irough   = 4          !< roughness length z0 for movements
    808     INTEGER(iwp), PARAMETER                   ::  iroughh  = 5          !< roughness length z0h for scalars
    809                                                                         !< (heat, humidity,...)
    810     INTEGER(iwp), PARAMETER                   ::  ithick   = 7          !< thickness of the surface (wall, roof, land) (m)
    811     INTEGER(iwp), PARAMETER                   ::  n_surface_params = 9  !< number of parameters for each type of the wall
    812 
    813 
    814     INTEGER(iwp), DIMENSION(:), ALLOCATABLE   ::  surface_type_codes    !< codes of wall types
    815 
    816 
    817     REAL(wp), DIMENSION(:,:), ALLOCATABLE     ::  surface_params        !< parameters of wall types
    818 
    819 !
     718!-- Parameters of the land, roof and wall surfaces (only for horizontal upward surfaces)
     719    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  fc_h          !<
     720    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  rootfr_h      !<
     721    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  swc_h         !<
     722    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  swc_h_p       !<
     723    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  swc_res_h     !<
     724    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  swc_sat_h     !<
     725    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_green_h     !<
     726    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_green_h_p   !<
     727    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_wall_h      !<
     728    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_wall_h_p    !<
     729    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  wilt_h        !<
     730    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_window_h    !<
     731    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_window_h_p  !<
     732
     733
     734    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  fc_h_1        !<
     735    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  rootfr_h_1    !<
     736    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  swc_h_1       !<
     737    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  swc_h_2       !<
     738    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  swc_res_h_1   !<
     739    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  swc_sat_h_1   !<
     740    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  t_green_h_1   !<
     741    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  t_green_h_2   !<
     742    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  t_wall_h_1    !<
     743    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  t_wall_h_2    !<
     744    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  wilt_h_1      !<
     745    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  t_window_h_1  !<
     746    TYPE(surf_type_2d_usm), DIMENSION(0:1), TARGET  ::  t_window_h_2  !<
     747
     748    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_green_v     !<
     749    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_green_v_p   !<
     750    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_wall_v      !<
     751    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_wall_v_p    !<
     752    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_window_v    !<
     753    TYPE(surf_type_2d_usm), DIMENSION(:), POINTER   ::  t_window_v_p  !<
     754    TYPE(surf_type_2d_usm), DIMENSION(0:3), TARGET  ::  t_green_v_1   !<
     755    TYPE(surf_type_2d_usm), DIMENSION(0:3), TARGET  ::  t_green_v_2   !<
     756    TYPE(surf_type_2d_usm), DIMENSION(0:3), TARGET  ::  t_wall_v_1    !<
     757    TYPE(surf_type_2d_usm), DIMENSION(0:3), TARGET  ::  t_wall_v_2    !<
     758    TYPE(surf_type_2d_usm), DIMENSION(0:3), TARGET  ::  t_window_v_1  !<
     759    TYPE(surf_type_2d_usm), DIMENSION(0:3), TARGET  ::  t_window_v_2  !<
     760    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  m_liq_usm_h    !< liquid water reservoir (m), horizontal surface elements
     761    TYPE(surf_type_1d_usm), DIMENSION(:), POINTER   ::  m_liq_usm_h_p  !< progn. liquid water reservoir (m), horizontal surface elements
     762    TYPE(surf_type_1d_usm), DIMENSION(0:1), TARGET  ::  m_liq_usm_h_1  !<
     763    TYPE(surf_type_1d_usm), DIMENSION(0:1), TARGET  ::  m_liq_usm_h_2  !<
     764    TYPE(surf_type_1d_usm), DIMENSION(0:1), TARGET  ::  tm_liq_usm_h_m  !< liquid water reservoir tendency (m), horizontal surface elements
    820765!-- Interfaces of subroutines accessed from outside of this module
    821766    INTERFACE usm_3d_data_averaging
     
    851796    END INTERFACE usm_init_arrays
    852797
    853     INTERFACE usm_material_heat_model
    854        MODULE PROCEDURE usm_material_heat_model
    855     END INTERFACE usm_material_heat_model
    856 
    857     INTERFACE usm_green_heat_model
    858        MODULE PROCEDURE usm_green_heat_model
    859     END INTERFACE usm_green_heat_model
    860 
    861798    INTERFACE usm_parin
    862799       MODULE PROCEDURE usm_parin
     
    868805    END INTERFACE usm_rrd_local
    869806
    870     INTERFACE usm_surface_energy_balance
    871        MODULE PROCEDURE usm_surface_energy_balance
    872     END INTERFACE usm_surface_energy_balance
     807    INTERFACE usm_energy_balance
     808       MODULE PROCEDURE usm_energy_balance
     809    END INTERFACE usm_energy_balance
    873810
    874811    INTERFACE usm_swap_timelevel
     
    894831           usm_init,                                                                               &
    895832           usm_init_arrays,                                                                        &
    896            usm_material_heat_model,                                                                &
    897833           usm_parin,                                                                              &
    898834           usm_rrd_local,                                                                          &
    899            usm_surface_energy_balance,                                                             &
     835           usm_energy_balance,                                                                     &
    900836           usm_swap_timelevel,                                                                     &
    901837           usm_wrd_local,                                                                          &
     
    912848           t_window_h,                                                                             &
    913849           t_window_v,                                                                             &
    914            usm_anthropogenic_heat,                                                                 &
    915            usm_green_heat_model,                                                                   &
    916            usm_material_model,                                                                     &
    917850           usm_wall_mod
    918851
     
    941874!-- Allocate radiation arrays which are part of the new data type.
    942875!-- For horizontal surfaces.
    943     ALLOCATE ( surf_usm_h%surfhf(1:surf_usm_h%ns)    )
    944     ALLOCATE ( surf_usm_h%rad_net_l(1:surf_usm_h%ns) )
     876    DO  l = 0, 1
     877       ALLOCATE ( surf_usm_h(l)%surfhf(1:surf_usm_h(l)%ns)    )
     878       ALLOCATE ( surf_usm_h(l)%rad_net_l(1:surf_usm_h(l)%ns) )
     879    ENDDO
    945880!
    946881!-- For vertical surfaces
     
    954889!-- Allocate arrays for wall surface model and define pointers
    955890!-- Allocate array of wall types and wall parameters
    956     ALLOCATE ( surf_usm_h%surface_types(1:surf_usm_h%ns)      )
    957     ALLOCATE ( surf_usm_h%building_type(1:surf_usm_h%ns)      )
    958     ALLOCATE ( surf_usm_h%building_type_name(1:surf_usm_h%ns) )
    959     surf_usm_h%building_type      = 0
    960     surf_usm_h%building_type_name = 'none'
     891    DO  l = 0, 1
     892       ALLOCATE ( surf_usm_h(l)%surface_types(1:surf_usm_h(l)%ns)      )
     893       ALLOCATE ( surf_usm_h(l)%building_type(1:surf_usm_h(l)%ns)      )
     894       ALLOCATE ( surf_usm_h(l)%building_type_name(1:surf_usm_h(l)%ns) )
     895       surf_usm_h(l)%building_type      = 0
     896       surf_usm_h(l)%building_type_name = 'none'
     897    ENDDO
    961898    DO  l = 0, 3
    962899       ALLOCATE ( surf_usm_v(l)%surface_types(1:surf_usm_v(l)%ns)      )
     
    969906!-- Allocate albedo_type and albedo. Each surface element has 3 values, 0: wall fraction,
    970907!-- 1: green fraction, 2: window fraction.
    971     ALLOCATE ( surf_usm_h%albedo_type(1:surf_usm_h%ns,0:2) )
    972     ALLOCATE ( surf_usm_h%albedo(1:surf_usm_h%ns,0:2)      )
    973     surf_usm_h%albedo_type = albedo_type
     908    DO  l = 0, 1
     909       ALLOCATE ( surf_usm_h(l)%albedo_type(1:surf_usm_h(l)%ns,0:2) )
     910       ALLOCATE ( surf_usm_h(l)%albedo(1:surf_usm_h(l)%ns,0:2)      )
     911       surf_usm_h(l)%albedo_type = albedo_type
     912    ENDDO
    974913    DO  l = 0, 3
    975914       ALLOCATE ( surf_usm_v(l)%albedo_type(1:surf_usm_v(l)%ns,0:2) )
     
    980919!
    981920!-- Allocate indoor target temperature for summer and winter
    982     ALLOCATE ( surf_usm_h%target_temp_summer(1:surf_usm_h%ns) )
    983     ALLOCATE ( surf_usm_h%target_temp_winter(1:surf_usm_h%ns) )
     921    DO  l = 0, 1
     922       ALLOCATE ( surf_usm_h(l)%target_temp_summer(1:surf_usm_h(l)%ns) )
     923       ALLOCATE ( surf_usm_h(l)%target_temp_winter(1:surf_usm_h(l)%ns) )
     924    ENDDO
    984925    DO  l = 0, 3
    985926       ALLOCATE ( surf_usm_v(l)%target_temp_summer(1:surf_usm_v(l)%ns) )
     
    989930!-- In case the indoor model is applied, allocate memory for waste heat and indoor temperature.
    990931    IF ( indoor_model )  THEN
    991        ALLOCATE ( surf_usm_h%waste_heat(1:surf_usm_h%ns) )
    992        surf_usm_h%waste_heat = 0.0_wp
     932       DO  l = 0, 1
     933          ALLOCATE ( surf_usm_h(l)%waste_heat(1:surf_usm_h(l)%ns) )
     934          surf_usm_h(l)%waste_heat = 0.0_wp
     935       ENDDO
    993936       DO  l = 0, 3
    994937          ALLOCATE ( surf_usm_v(l)%waste_heat(1:surf_usm_v(l)%ns) )
     
    998941!
    999942!-- Allocate flag indicating ground floor level surface elements
    1000     ALLOCATE ( surf_usm_h%ground_level(1:surf_usm_h%ns) )
     943    DO  l = 0, 1
     944       ALLOCATE ( surf_usm_h(l)%ground_level(1:surf_usm_h(l)%ns) )
     945    ENDDO
    1001946    DO  l = 0, 3
    1002947       ALLOCATE ( surf_usm_v(l)%ground_level(1:surf_usm_v(l)%ns) )
    1003948    ENDDO
    1004949!
    1005 !--  Allocate arrays for relative surface fraction.
    1006 !--  0 - wall fraction, 1 - green fraction, 2 - window fraction
    1007      ALLOCATE ( surf_usm_h%frac(1:surf_usm_h%ns,0:2) )
    1008      surf_usm_h%frac = 0.0_wp
    1009      DO  l = 0, 3
    1010         ALLOCATE ( surf_usm_v(l)%frac(1:surf_usm_v(l)%ns,0:2) )
    1011         surf_usm_v(l)%frac = 0.0_wp
    1012      ENDDO
     950!-- Allocate arrays for relative surface fraction.
     951!-- 0 - wall fraction, 1 - green fraction, 2 - window fraction
     952    DO  l = 0, 1
     953       ALLOCATE ( surf_usm_h(l)%frac(1:surf_usm_h(l)%ns,0:2) )
     954       surf_usm_h(l)%frac = 0.0_wp
     955    ENDDO
     956    DO  l = 0, 3
     957       ALLOCATE ( surf_usm_v(l)%frac(1:surf_usm_v(l)%ns,0:2) )
     958       surf_usm_v(l)%frac = 0.0_wp
     959    ENDDO
    1013960
    1014961!
    1015962!-- Wall and roof surface parameters. First for horizontal surfaces
    1016     ALLOCATE ( surf_usm_h%isroof_surf(1:surf_usm_h%ns)        )
    1017     ALLOCATE ( surf_usm_h%lambda_surf(1:surf_usm_h%ns)        )
    1018     ALLOCATE ( surf_usm_h%lambda_surf_window(1:surf_usm_h%ns) )
    1019     ALLOCATE ( surf_usm_h%lambda_surf_green(1:surf_usm_h%ns)  )
    1020     ALLOCATE ( surf_usm_h%c_surface(1:surf_usm_h%ns)          )
    1021     ALLOCATE ( surf_usm_h%c_surface_window(1:surf_usm_h%ns)   )
    1022     ALLOCATE ( surf_usm_h%c_surface_green(1:surf_usm_h%ns)    )
    1023     ALLOCATE ( surf_usm_h%transmissivity(1:surf_usm_h%ns)     )
    1024     ALLOCATE ( surf_usm_h%lai(1:surf_usm_h%ns)                )
    1025     ALLOCATE ( surf_usm_h%emissivity(1:surf_usm_h%ns,0:2)     )
    1026     ALLOCATE ( surf_usm_h%r_a(1:surf_usm_h%ns)                )
    1027     ALLOCATE ( surf_usm_h%r_a_green(1:surf_usm_h%ns)          )
    1028     ALLOCATE ( surf_usm_h%r_a_window(1:surf_usm_h%ns)         )
    1029     ALLOCATE ( surf_usm_h%green_type_roof(1:surf_usm_h%ns)    )
    1030     ALLOCATE ( surf_usm_h%r_s(1:surf_usm_h%ns)                )
    1031 
     963    DO  l = 0, 1
     964       ALLOCATE ( surf_usm_h(l)%isroof_surf(1:surf_usm_h(l)%ns)        )
     965       ALLOCATE ( surf_usm_h(l)%lambda_surf(1:surf_usm_h(l)%ns)        )
     966       ALLOCATE ( surf_usm_h(l)%lambda_surf_window(1:surf_usm_h(l)%ns) )
     967       ALLOCATE ( surf_usm_h(l)%lambda_surf_green(1:surf_usm_h(l)%ns)  )
     968       ALLOCATE ( surf_usm_h(l)%c_surface(1:surf_usm_h(l)%ns)          )
     969       ALLOCATE ( surf_usm_h(l)%c_surface_window(1:surf_usm_h(l)%ns)   )
     970       ALLOCATE ( surf_usm_h(l)%c_surface_green(1:surf_usm_h(l)%ns)    )
     971       ALLOCATE ( surf_usm_h(l)%transmissivity(1:surf_usm_h(l)%ns)     )
     972       ALLOCATE ( surf_usm_h(l)%lai(1:surf_usm_h(l)%ns)                )
     973       ALLOCATE ( surf_usm_h(l)%emissivity(1:surf_usm_h(l)%ns,0:2)     )
     974       ALLOCATE ( surf_usm_h(l)%r_a(1:surf_usm_h(l)%ns)                )
     975       ALLOCATE ( surf_usm_h(l)%r_a_green(1:surf_usm_h(l)%ns)          )
     976       ALLOCATE ( surf_usm_h(l)%r_a_window(1:surf_usm_h(l)%ns)         )
     977       ALLOCATE ( surf_usm_h(l)%green_type_roof(1:surf_usm_h(l)%ns)    )
     978       ALLOCATE ( surf_usm_h(l)%r_s(1:surf_usm_h(l)%ns)                )
     979    ENDDO
    1032980!
    1033981!-- For vertical surfaces.
     
    1050998!
    1051999!-- Allocate wall and roof material parameters. First for horizontal surfaces
    1052     ALLOCATE ( surf_usm_h%thickness_wall(1:surf_usm_h%ns)                    )
    1053     ALLOCATE ( surf_usm_h%thickness_window(1:surf_usm_h%ns)                  )
    1054     ALLOCATE ( surf_usm_h%thickness_green(1:surf_usm_h%ns)                   )
    1055     ALLOCATE ( surf_usm_h%lambda_h(nzb_wall:nzt_wall,1:surf_usm_h%ns)        )
    1056     ALLOCATE ( surf_usm_h%rho_c_wall(nzb_wall:nzt_wall,1:surf_usm_h%ns)      )
    1057     ALLOCATE ( surf_usm_h%lambda_h_window(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
    1058     ALLOCATE ( surf_usm_h%rho_c_window(nzb_wall:nzt_wall,1:surf_usm_h%ns)    )
    1059     ALLOCATE ( surf_usm_h%lambda_h_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)  )
    1060     ALLOCATE ( surf_usm_h%rho_c_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)     )
    1061 
    1062     ALLOCATE ( surf_usm_h%rho_c_total_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)    )
    1063     ALLOCATE ( surf_usm_h%n_vg_green(1:surf_usm_h%ns)                             )
    1064     ALLOCATE ( surf_usm_h%alpha_vg_green(1:surf_usm_h%ns)                         )
    1065     ALLOCATE ( surf_usm_h%l_vg_green(1:surf_usm_h%ns)                             )
    1066     ALLOCATE ( surf_usm_h%gamma_w_green_sat(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)  )
    1067     ALLOCATE ( surf_usm_h%lambda_w_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)       )
    1068     ALLOCATE ( surf_usm_h%gamma_w_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)        )
    1069     ALLOCATE ( surf_usm_h%tswc_h_m(nzb_wall:nzt_wall,1:surf_usm_h%ns)             )
    1070 
     1000    DO  l = 0, 1
     1001       ALLOCATE ( surf_usm_h(l)%thickness_wall(1:surf_usm_h(l)%ns)                    )
     1002       ALLOCATE ( surf_usm_h(l)%thickness_window(1:surf_usm_h(l)%ns)                  )
     1003       ALLOCATE ( surf_usm_h(l)%thickness_green(1:surf_usm_h(l)%ns)                   )
     1004       ALLOCATE ( surf_usm_h(l)%lambda_h(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)        )
     1005       ALLOCATE ( surf_usm_h(l)%rho_c_wall(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)      )
     1006       ALLOCATE ( surf_usm_h(l)%lambda_h_window(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns) )
     1007       ALLOCATE ( surf_usm_h(l)%rho_c_window(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)    )
     1008       ALLOCATE ( surf_usm_h(l)%lambda_h_green(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)  )
     1009       ALLOCATE ( surf_usm_h(l)%rho_c_green(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)     )
     1010
     1011       ALLOCATE ( surf_usm_h(l)%rho_c_total_green(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)    )
     1012       ALLOCATE ( surf_usm_h(l)%n_vg_green(1:surf_usm_h(l)%ns)                             )
     1013       ALLOCATE ( surf_usm_h(l)%alpha_vg_green(1:surf_usm_h(l)%ns)                         )
     1014       ALLOCATE ( surf_usm_h(l)%l_vg_green(1:surf_usm_h(l)%ns)                             )
     1015       ALLOCATE ( surf_usm_h(l)%gamma_w_green_sat(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns)  )
     1016       ALLOCATE ( surf_usm_h(l)%lambda_w_green(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)       )
     1017       ALLOCATE ( surf_usm_h(l)%gamma_w_green(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)        )
     1018       ALLOCATE ( surf_usm_h(l)%tswc_h_m(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)             )
     1019    ENDDO
    10711020!
    10721021!-- For vertical surfaces.
     
    10851034!
    10861035!-- Allocate green wall and roof vegetation and soil parameters. First horizontal surfaces
    1087     ALLOCATE ( surf_usm_h%g_d(1:surf_usm_h%ns)              )
    1088     ALLOCATE ( surf_usm_h%c_liq(1:surf_usm_h%ns)            )
    1089     ALLOCATE ( surf_usm_h%qsws_liq(1:surf_usm_h%ns)         )
    1090     ALLOCATE ( surf_usm_h%qsws_veg(1:surf_usm_h%ns)         )
    1091     ALLOCATE ( surf_usm_h%r_canopy(1:surf_usm_h%ns)         )
    1092     ALLOCATE ( surf_usm_h%r_canopy_min(1:surf_usm_h%ns)     )
    1093     ALLOCATE ( surf_usm_h%pt_10cm(1:surf_usm_h%ns)          )
    1094 
     1036    DO  l = 0, 1
     1037       ALLOCATE ( surf_usm_h(l)%g_d(1:surf_usm_h(l)%ns)              )
     1038       ALLOCATE ( surf_usm_h(l)%c_liq(1:surf_usm_h(l)%ns)            )
     1039       ALLOCATE ( surf_usm_h(l)%qsws_liq(1:surf_usm_h(l)%ns)         )
     1040       ALLOCATE ( surf_usm_h(l)%qsws_veg(1:surf_usm_h(l)%ns)         )
     1041       ALLOCATE ( surf_usm_h(l)%r_canopy(1:surf_usm_h(l)%ns)         )
     1042       ALLOCATE ( surf_usm_h(l)%r_canopy_min(1:surf_usm_h(l)%ns)     )
     1043       ALLOCATE ( surf_usm_h(l)%pt_10cm(1:surf_usm_h(l)%ns)          )
     1044    ENDDO
    10951045!
    10961046!-- For vertical surfaces.
     
    11071057!
    11081058!-- Allocate wall and roof layers sizes. For horizontal surfaces.
    1109     ALLOCATE ( zwn(nzb_wall:nzt_wall)                                        )
    1110     ALLOCATE ( surf_usm_h%dz_wall(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)       )
    1111     ALLOCATE ( zwn_window(nzb_wall:nzt_wall)                                 )
    1112     ALLOCATE ( surf_usm_h%dz_window(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)     )
    1113     ALLOCATE ( zwn_green(nzb_wall:nzt_wall)                                  )
    1114     ALLOCATE ( surf_usm_h%dz_green(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)      )
    1115     ALLOCATE ( surf_usm_h%ddz_wall(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)      )
    1116     ALLOCATE ( surf_usm_h%dz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)    )
    1117     ALLOCATE ( surf_usm_h%ddz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)   )
    1118     ALLOCATE ( surf_usm_h%zw(nzb_wall:nzt_wall,1:surf_usm_h%ns)              )
    1119     ALLOCATE ( surf_usm_h%ddz_window(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)    )
    1120     ALLOCATE ( surf_usm_h%dz_window_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)  )
    1121     ALLOCATE ( surf_usm_h%ddz_window_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
    1122     ALLOCATE ( surf_usm_h%zw_window(nzb_wall:nzt_wall,1:surf_usm_h%ns)       )
    1123     ALLOCATE ( surf_usm_h%ddz_green(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)     )
    1124     ALLOCATE ( surf_usm_h%dz_green_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)   )
    1125     ALLOCATE ( surf_usm_h%ddz_green_stag(nzb_wall:nzt_wall,1:surf_usm_h%ns)  )
    1126     ALLOCATE ( surf_usm_h%zw_green(nzb_wall:nzt_wall,1:surf_usm_h%ns)        )
     1059    DO  l = 0, 1
     1060       ALLOCATE ( surf_usm_h(l)%dz_wall(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns)       )
     1061       ALLOCATE ( surf_usm_h(l)%dz_window(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns)     )
     1062       ALLOCATE ( surf_usm_h(l)%dz_green(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns)      )
     1063       ALLOCATE ( surf_usm_h(l)%ddz_wall(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns)      )
     1064       ALLOCATE ( surf_usm_h(l)%dz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)    )
     1065       ALLOCATE ( surf_usm_h(l)%ddz_wall_stag(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)   )
     1066       ALLOCATE ( surf_usm_h(l)%zw(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)              )
     1067       ALLOCATE ( surf_usm_h(l)%ddz_window(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns)    )
     1068       ALLOCATE ( surf_usm_h(l)%dz_window_stag(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)  )
     1069       ALLOCATE ( surf_usm_h(l)%ddz_window_stag(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns) )
     1070       ALLOCATE ( surf_usm_h(l)%zw_window(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)       )
     1071       ALLOCATE ( surf_usm_h(l)%ddz_green(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns)     )
     1072       ALLOCATE ( surf_usm_h(l)%dz_green_stag(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)   )
     1073       ALLOCATE ( surf_usm_h(l)%ddz_green_stag(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)  )
     1074       ALLOCATE ( surf_usm_h(l)%zw_green(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns)        )
     1075    ENDDO
    11271076
    11281077!
     
    11491098!-- Allocate wall and roof temperature arrays, for horizontal walls.
    11501099!-- Allocate if required. Note, in case of restarts, some of these arrays might be already allocated.
    1151     IF ( .NOT. ALLOCATED( t_surf_wall_h_1 ) )                                                      &
    1152        ALLOCATE ( t_surf_wall_h_1(1:surf_usm_h%ns) )
    1153     IF ( .NOT. ALLOCATED( t_surf_wall_h_2 ) )                                                      &
    1154        ALLOCATE ( t_surf_wall_h_2(1:surf_usm_h%ns) )
    1155     IF ( .NOT. ALLOCATED( t_wall_h_1 ) )                                                           &
    1156        ALLOCATE ( t_wall_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1157     IF ( .NOT. ALLOCATED( t_wall_h_2 ) )                                                           &
    1158        ALLOCATE ( t_wall_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1159     IF ( .NOT. ALLOCATED( t_surf_window_h_1 ) )                                                    &
    1160        ALLOCATE ( t_surf_window_h_1(1:surf_usm_h%ns) )
    1161     IF ( .NOT. ALLOCATED( t_surf_window_h_2 ) )                                                    &
    1162        ALLOCATE ( t_surf_window_h_2(1:surf_usm_h%ns) )
    1163     IF ( .NOT. ALLOCATED( t_window_h_1 ) )                                                         &
    1164        ALLOCATE ( t_window_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1165     IF ( .NOT. ALLOCATED( t_window_h_2 ) )                                                         &
    1166        ALLOCATE ( t_window_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1167     IF ( .NOT. ALLOCATED( t_surf_green_h_1 ) )                                                     &
    1168        ALLOCATE ( t_surf_green_h_1(1:surf_usm_h%ns) )
    1169     IF ( .NOT. ALLOCATED( t_surf_green_h_2 ) )                                                     &
    1170        ALLOCATE ( t_surf_green_h_2(1:surf_usm_h%ns) )
    1171     IF ( .NOT. ALLOCATED( t_green_h_1 ) )                                                          &
    1172        ALLOCATE ( t_green_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1173     IF ( .NOT. ALLOCATED( t_green_h_2 ) )                                                          &
    1174        ALLOCATE ( t_green_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1175     IF ( .NOT. ALLOCATED( swc_h_1 ) )                                                              &
    1176        ALLOCATE ( swc_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1177     IF ( .NOT. ALLOCATED( swc_sat_h_1 ) )                                                          &
    1178        ALLOCATE ( swc_sat_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1179     IF ( .NOT. ALLOCATED( swc_res_h_1 ) )                                                          &
    1180        ALLOCATE ( swc_res_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1181     IF ( .NOT. ALLOCATED( swc_h_2 ) )                                                              &
    1182        ALLOCATE ( swc_h_2(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1183     IF ( .NOT. ALLOCATED( rootfr_h_1 ) )                                                           &
    1184        ALLOCATE ( rootfr_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1185     IF ( .NOT. ALLOCATED( wilt_h_1 ) )                                                             &
    1186        ALLOCATE ( wilt_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1187     IF ( .NOT. ALLOCATED( fc_h_1 ) )                                                               &
    1188        ALLOCATE ( fc_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1189 
    1190     IF ( .NOT. ALLOCATED( m_liq_usm_h_1%var_usm_1d ) )                                             &
    1191        ALLOCATE ( m_liq_usm_h_1%var_usm_1d(1:surf_usm_h%ns) )
    1192     IF ( .NOT. ALLOCATED( m_liq_usm_h_2%var_usm_1d ) )                                             &
    1193        ALLOCATE ( m_liq_usm_h_2%var_usm_1d(1:surf_usm_h%ns) )
    1194 
     1100    DO l = 0, 1
     1101       IF ( .NOT. ALLOCATED( t_surf_wall_h_1(l)%val ) )                                                      &
     1102          ALLOCATE ( t_surf_wall_h_1(l)%val(1:surf_usm_h(l)%ns) )
     1103       IF ( .NOT. ALLOCATED( t_surf_wall_h_2(l)%val ) )                                                      &
     1104          ALLOCATE ( t_surf_wall_h_2(l)%val(1:surf_usm_h(l)%ns) )
     1105       IF ( .NOT. ALLOCATED( t_wall_h_1(l)%val ) )                                                           &
     1106          ALLOCATE ( t_wall_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1107       IF ( .NOT. ALLOCATED( t_wall_h_2(l)%val ) )                                                           &
     1108          ALLOCATE ( t_wall_h_2(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1109       IF ( .NOT. ALLOCATED( t_surf_window_h_1(l)%val ) )                                                    &
     1110          ALLOCATE ( t_surf_window_h_1(l)%val(1:surf_usm_h(l)%ns) )
     1111       IF ( .NOT. ALLOCATED( t_surf_window_h_2(l)%val ) )                                                    &
     1112          ALLOCATE ( t_surf_window_h_2(l)%val(1:surf_usm_h(l)%ns) )
     1113       IF ( .NOT. ALLOCATED( t_window_h_1(l)%val ) )                                                         &
     1114          ALLOCATE ( t_window_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1115       IF ( .NOT. ALLOCATED( t_window_h_2(l)%val ) )                                                         &
     1116          ALLOCATE ( t_window_h_2(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1117       IF ( .NOT. ALLOCATED( t_surf_green_h_1(l)%val ) )                                                     &
     1118          ALLOCATE ( t_surf_green_h_1(l)%val(1:surf_usm_h(l)%ns) )
     1119       IF ( .NOT. ALLOCATED( t_surf_green_h_2(l)%val ) )                                                     &
     1120          ALLOCATE ( t_surf_green_h_2(l)%val(1:surf_usm_h(l)%ns) )
     1121       IF ( .NOT. ALLOCATED( t_green_h_1(l)%val ) )                                                          &
     1122          ALLOCATE ( t_green_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1123       IF ( .NOT. ALLOCATED( t_green_h_2(l)%val ) )                                                          &
     1124          ALLOCATE ( t_green_h_2(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1125       IF ( .NOT. ALLOCATED( swc_h_1(l)%val ) )                                                              &
     1126          ALLOCATE ( swc_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1127       IF ( .NOT. ALLOCATED( swc_sat_h_1(l)%val ) )                                                          &
     1128          ALLOCATE ( swc_sat_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1129       IF ( .NOT. ALLOCATED( swc_res_h_1(l)%val ) )                                                          &
     1130          ALLOCATE ( swc_res_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1131       IF ( .NOT. ALLOCATED( swc_h_2(l)%val ) )                                                              &
     1132          ALLOCATE ( swc_h_2(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1133       IF ( .NOT. ALLOCATED( rootfr_h_1(l)%val ) )                                                           &
     1134          ALLOCATE ( rootfr_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1135       IF ( .NOT. ALLOCATED( wilt_h_1(l)%val ) )                                                             &
     1136          ALLOCATE ( wilt_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1137       IF ( .NOT. ALLOCATED( fc_h_1(l)%val ) )                                                               &
     1138          ALLOCATE ( fc_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1139
     1140       IF ( .NOT. ALLOCATED( m_liq_usm_h_1(l)%val ) )                                             &
     1141          ALLOCATE ( m_liq_usm_h_1(l)%val(1:surf_usm_h(l)%ns) )
     1142       IF ( .NOT. ALLOCATED( m_liq_usm_h_2(l)%val ) )                                             &
     1143          ALLOCATE ( m_liq_usm_h_2(l)%val(1:surf_usm_h(l)%ns) )
     1144    ENDDO
    11951145!
    11961146!-- Initial assignment of the pointers
     
    12131163!-- Allocate if required. Note, in case of restarts, some of these arrays might be already allocated.
    12141164    DO  l = 0, 3
    1215        IF ( .NOT. ALLOCATED( t_surf_wall_v_1(l)%t ) )                                              &
    1216           ALLOCATE ( t_surf_wall_v_1(l)%t(1:surf_usm_v(l)%ns) )
    1217        IF ( .NOT. ALLOCATED( t_surf_wall_v_2(l)%t ) )                                              &
    1218           ALLOCATE ( t_surf_wall_v_2(l)%t(1:surf_usm_v(l)%ns) )
    1219        IF ( .NOT. ALLOCATED( t_wall_v_1(l)%t ) )                                                   &
    1220           ALLOCATE ( t_wall_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
    1221        IF ( .NOT. ALLOCATED( t_wall_v_2(l)%t ) )                                                   &
    1222           ALLOCATE ( t_wall_v_2(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
    1223        IF ( .NOT. ALLOCATED( t_surf_window_v_1(l)%t ) )                                            &
    1224           ALLOCATE ( t_surf_window_v_1(l)%t(1:surf_usm_v(l)%ns) )
    1225        IF ( .NOT. ALLOCATED( t_surf_window_v_2(l)%t ) )                                            &
    1226           ALLOCATE ( t_surf_window_v_2(l)%t(1:surf_usm_v(l)%ns) )
    1227        IF ( .NOT. ALLOCATED( t_window_v_1(l)%t ) )                                                 &
    1228           ALLOCATE ( t_window_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
    1229        IF ( .NOT. ALLOCATED( t_window_v_2(l)%t ) )                                                 &
    1230           ALLOCATE ( t_window_v_2(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
    1231        IF ( .NOT. ALLOCATED( t_surf_green_v_1(l)%t ) )                                             &
    1232           ALLOCATE ( t_surf_green_v_1(l)%t(1:surf_usm_v(l)%ns) )
    1233        IF ( .NOT. ALLOCATED( t_surf_green_v_2(l)%t ) )                                             &
    1234           ALLOCATE ( t_surf_green_v_2(l)%t(1:surf_usm_v(l)%ns) )
    1235        IF ( .NOT. ALLOCATED( t_green_v_1(l)%t ) )                                                  &
    1236           ALLOCATE ( t_green_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
    1237        IF ( .NOT. ALLOCATED( t_green_v_2(l)%t ) )                                                  &
    1238           ALLOCATE ( t_green_v_2(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
     1165       IF ( .NOT. ALLOCATED( t_surf_wall_v_1(l)%val ) )                                              &
     1166          ALLOCATE ( t_surf_wall_v_1(l)%val(1:surf_usm_v(l)%ns) )
     1167       IF ( .NOT. ALLOCATED( t_surf_wall_v_2(l)%val ) )                                              &
     1168          ALLOCATE ( t_surf_wall_v_2(l)%val(1:surf_usm_v(l)%ns) )
     1169       IF ( .NOT. ALLOCATED( t_wall_v_1(l)%val ) )                                                   &
     1170          ALLOCATE ( t_wall_v_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
     1171       IF ( .NOT. ALLOCATED( t_wall_v_2(l)%val ) )                                                   &
     1172          ALLOCATE ( t_wall_v_2(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
     1173       IF ( .NOT. ALLOCATED( t_surf_window_v_1(l)%val ) )                                            &
     1174          ALLOCATE ( t_surf_window_v_1(l)%val(1:surf_usm_v(l)%ns) )
     1175       IF ( .NOT. ALLOCATED( t_surf_window_v_2(l)%val ) )                                            &
     1176          ALLOCATE ( t_surf_window_v_2(l)%val(1:surf_usm_v(l)%ns) )
     1177       IF ( .NOT. ALLOCATED( t_window_v_1(l)%val ) )                                                 &
     1178          ALLOCATE ( t_window_v_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
     1179       IF ( .NOT. ALLOCATED( t_window_v_2(l)%val ) )                                                 &
     1180          ALLOCATE ( t_window_v_2(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
     1181       IF ( .NOT. ALLOCATED( t_surf_green_v_1(l)%val ) )                                             &
     1182          ALLOCATE ( t_surf_green_v_1(l)%val(1:surf_usm_v(l)%ns) )
     1183       IF ( .NOT. ALLOCATED( t_surf_green_v_2(l)%val ) )                                             &
     1184          ALLOCATE ( t_surf_green_v_2(l)%val(1:surf_usm_v(l)%ns) )
     1185       IF ( .NOT. ALLOCATED( t_green_v_1(l)%val ) )                                                  &
     1186          ALLOCATE ( t_green_v_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
     1187       IF ( .NOT. ALLOCATED( t_green_v_2(l)%val ) )                                                  &
     1188          ALLOCATE ( t_green_v_2(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
    12391189    ENDDO
    12401190!
     
    12491199!
    12501200!-- Allocate intermediate timestep arrays. For horizontal surfaces.
    1251     ALLOCATE ( surf_usm_h%tt_surface_wall_m(1:surf_usm_h%ns)               )
    1252     ALLOCATE ( surf_usm_h%tt_wall_m(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)   )
    1253     ALLOCATE ( surf_usm_h%tt_surface_window_m(1:surf_usm_h%ns)             )
    1254     ALLOCATE ( surf_usm_h%tt_window_m(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    1255     ALLOCATE ( surf_usm_h%tt_green_m(nzb_wall:nzt_wall+1,1:surf_usm_h%ns)  )
    1256     ALLOCATE ( surf_usm_h%tt_surface_green_m(1:surf_usm_h%ns)              )
    1257 
    1258 !
    1259 !-- Allocate intermediate timestep arrays
    1260 !-- Horizontal surfaces
    1261     ALLOCATE ( tm_liq_usm_h_m%var_usm_1d(1:surf_usm_h%ns) )
    1262     tm_liq_usm_h_m%var_usm_1d = 0.0_wp
    1263 !
    1264 !-- Set inital values for prognostic quantities
    1265     IF ( ALLOCATED( surf_usm_h%tt_surface_wall_m )   )  surf_usm_h%tt_surface_wall_m   = 0.0_wp
    1266     IF ( ALLOCATED( surf_usm_h%tt_wall_m )           )  surf_usm_h%tt_wall_m           = 0.0_wp
    1267     IF ( ALLOCATED( surf_usm_h%tt_surface_window_m ) )  surf_usm_h%tt_surface_window_m = 0.0_wp
    1268     IF ( ALLOCATED( surf_usm_h%tt_window_m    )      )  surf_usm_h%tt_window_m         = 0.0_wp
    1269     IF ( ALLOCATED( surf_usm_h%tt_green_m    )       )  surf_usm_h%tt_green_m          = 0.0_wp
    1270     IF ( ALLOCATED( surf_usm_h%tt_surface_green_m )  )  surf_usm_h%tt_surface_green_m  = 0.0_wp
     1201    DO  l = 0, 1
     1202       ALLOCATE ( surf_usm_h(l)%tt_surface_wall_m(1:surf_usm_h(l)%ns)               )
     1203       ALLOCATE ( surf_usm_h(l)%tt_wall_m(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns)   )
     1204       ALLOCATE ( surf_usm_h(l)%tt_surface_window_m(1:surf_usm_h(l)%ns)             )
     1205       ALLOCATE ( surf_usm_h(l)%tt_window_m(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     1206       ALLOCATE ( surf_usm_h(l)%tt_green_m(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns)  )
     1207       ALLOCATE ( surf_usm_h(l)%tt_surface_green_m(1:surf_usm_h(l)%ns)              )
     1208!
     1209!--    Allocate intermediate timestep arrays
     1210!--    Horizontal surfaces
     1211       ALLOCATE ( tm_liq_usm_h_m(l)%val(1:surf_usm_h(l)%ns) )
     1212       tm_liq_usm_h_m(l)%val = 0.0_wp
     1213!
     1214!--    Set inital values for prognostic quantities
     1215       IF ( ALLOCATED( surf_usm_h(l)%tt_surface_wall_m )   )  surf_usm_h(l)%tt_surface_wall_m   = 0.0_wp
     1216       IF ( ALLOCATED( surf_usm_h(l)%tt_wall_m )           )  surf_usm_h(l)%tt_wall_m           = 0.0_wp
     1217       IF ( ALLOCATED( surf_usm_h(l)%tt_surface_window_m ) )  surf_usm_h(l)%tt_surface_window_m = 0.0_wp
     1218       IF ( ALLOCATED( surf_usm_h(l)%tt_window_m    )      )  surf_usm_h(l)%tt_window_m         = 0.0_wp
     1219       IF ( ALLOCATED( surf_usm_h(l)%tt_green_m    )       )  surf_usm_h(l)%tt_green_m          = 0.0_wp
     1220       IF ( ALLOCATED( surf_usm_h(l)%tt_surface_green_m )  )  surf_usm_h(l)%tt_surface_green_m  = 0.0_wp
     1221    END DO
    12711222!
    12721223!-- Now, for vertical surfaces
     
    12871238!
    12881239!-- Allocate wall heat flux output arrays and set initial values. For horizontal surfaces
    1289 !    ALLOCATE ( surf_usm_h%wshf(1:surf_usm_h%ns)    )  !can be removed
    1290     ALLOCATE ( surf_usm_h%ghf(1:surf_usm_h%ns) )
    1291     ALLOCATE ( surf_usm_h%wshf_eb(1:surf_usm_h%ns) )
    1292     ALLOCATE ( surf_usm_h%wghf_eb(1:surf_usm_h%ns) )
    1293     ALLOCATE ( surf_usm_h%wghf_eb_window(1:surf_usm_h%ns) )
    1294     ALLOCATE ( surf_usm_h%wghf_eb_green(1:surf_usm_h%ns) )
    1295     ALLOCATE ( surf_usm_h%iwghf_eb(1:surf_usm_h%ns) )
    1296     ALLOCATE ( surf_usm_h%iwghf_eb_window(1:surf_usm_h%ns) )
    1297     IF ( ALLOCATED( surf_usm_h%ghf     ) )  surf_usm_h%ghf     = 0.0_wp
    1298     IF ( ALLOCATED( surf_usm_h%wshf    ) )  surf_usm_h%wshf    = 0.0_wp
    1299     IF ( ALLOCATED( surf_usm_h%wshf_eb ) )  surf_usm_h%wshf_eb = 0.0_wp
    1300     IF ( ALLOCATED( surf_usm_h%wghf_eb ) )  surf_usm_h%wghf_eb = 0.0_wp
    1301     IF ( ALLOCATED( surf_usm_h%wghf_eb_window ) )   surf_usm_h%wghf_eb_window  = 0.0_wp
    1302     IF ( ALLOCATED( surf_usm_h%wghf_eb_green ) )    surf_usm_h%wghf_eb_green   = 0.0_wp
    1303     IF ( ALLOCATED( surf_usm_h%iwghf_eb ) )         surf_usm_h%iwghf_eb        = 0.0_wp
    1304     IF ( ALLOCATED( surf_usm_h%iwghf_eb_window ) )  surf_usm_h%iwghf_eb_window = 0.0_wp
     1240    DO  l = 0, 1
     1241!      ALLOCATE ( surf_usm_h(l)%wshf(1:surf_usm_h(l)%ns)    )  !can be removed
     1242       ALLOCATE ( surf_usm_h(l)%ghf(1:surf_usm_h(l)%ns) )
     1243       ALLOCATE ( surf_usm_h(l)%wshf_eb(1:surf_usm_h(l)%ns) )
     1244       ALLOCATE ( surf_usm_h(l)%wghf_eb(1:surf_usm_h(l)%ns) )
     1245       ALLOCATE ( surf_usm_h(l)%wghf_eb_window(1:surf_usm_h(l)%ns) )
     1246       ALLOCATE ( surf_usm_h(l)%wghf_eb_green(1:surf_usm_h(l)%ns) )
     1247       ALLOCATE ( surf_usm_h(l)%iwghf_eb(1:surf_usm_h(l)%ns) )
     1248       ALLOCATE ( surf_usm_h(l)%iwghf_eb_window(1:surf_usm_h(l)%ns) )
     1249       IF ( ALLOCATED( surf_usm_h(l)%ghf     ) )  surf_usm_h(l)%ghf     = 0.0_wp
     1250       IF ( ALLOCATED( surf_usm_h(l)%wshf    ) )  surf_usm_h(l)%wshf    = 0.0_wp
     1251       IF ( ALLOCATED( surf_usm_h(l)%wshf_eb ) )  surf_usm_h(l)%wshf_eb = 0.0_wp
     1252       IF ( ALLOCATED( surf_usm_h(l)%wghf_eb ) )  surf_usm_h(l)%wghf_eb = 0.0_wp
     1253       IF ( ALLOCATED( surf_usm_h(l)%wghf_eb_window ) )   surf_usm_h(l)%wghf_eb_window  = 0.0_wp
     1254       IF ( ALLOCATED( surf_usm_h(l)%wghf_eb_green ) )    surf_usm_h(l)%wghf_eb_green   = 0.0_wp
     1255       IF ( ALLOCATED( surf_usm_h(l)%iwghf_eb ) )         surf_usm_h(l)%iwghf_eb        = 0.0_wp
     1256       IF ( ALLOCATED( surf_usm_h(l)%iwghf_eb_window ) )  surf_usm_h(l)%iwghf_eb_window = 0.0_wp
     1257    ENDDO
    13051258!
    13061259!-- Now, for vertical surfaces
     
    13481301    INTEGER(iwp)                                       ::  i, j, k, l, m, ids, idsint, iwl, istat  !< runnin indices
    13491302    CHARACTER(LEN=varnamelength)                       ::  var                                     !< trimmed variable
    1350     INTEGER(iwp), PARAMETER                            ::  nd = 5                                  !< number of directions
    1351     CHARACTER(LEN=6), DIMENSION(0:nd-1), PARAMETER     ::  dirname = (/ '_roof ', '_south', '_north', '_west ', '_east ' /)
    1352     INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER         ::  dirint = (/ iup, isouth, inorth, iwest, ieast /)
    1353 
    1354 
    1355 
    1356 
    1357     IF ( variable(1:4) == 'usm_' )  THEN  ! Is such a check really required?
     1303    LOGICAL                                            ::  horizontal
     1304
     1305    IF ( .NOT. variable(1:4) == 'usm_' )  RETURN  ! Is such a check really required?
    13581306
    13591307!
     
    13681316           ids = i
    13691317           idsint = dirint(ids)
     1318           l = diridx(ids)  !> index of direction for _h and _v arrays
    13701319           var = var(:k-j)
    13711320           EXIT
    13721321       ENDIF
    13731322    ENDDO
    1374     l = idsint - 2  ! Horizontal direction index - terrible hack !
    1375     IF ( l < 0 .OR. l > 3 )  THEN
    1376        l = -1
    1377     ENDIF
    13781323    IF ( ids == -1 )  THEN
    13791324        var = TRIM( variable )
     1325    ELSE
     1326!--    Horizontal direction flag
     1327       IF ( idsint == iup .OR. idsint == idown )  THEN
     1328          horizontal = .TRUE.
     1329       ELSE
     1330          horizontal = .FALSE.
     1331       ENDIF
    13801332    ENDIF
    13811333    IF ( var(1:11) == 'usm_t_wall_'  .AND.  len( TRIM( var ) ) >= 12 )  THEN
    13821334!
    1383 !--      Wall layers
    1384         READ( var(12:12), '(I1)', iostat=istat ) iwl
    1385         IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
    1386             var = var(1:10)
    1387         ELSE
    1388 !
    1389 !--         Wrong wall layer index
    1390             RETURN
    1391         ENDIF
     1335!--    Wall layers
     1336       READ( var(12:12), '(I1)', iostat=istat ) iwl
     1337       IF ( istat == 0  .AND.  iwl >= nzb_wall  .AND.  iwl <= nzt_wall )  THEN
     1338          var = var(1:10)
     1339       ELSE
     1340!
     1341!--       Wrong wall layer index
     1342          RETURN
     1343       ENDIF
    13921344    ENDIF
    13931345    IF ( var(1:13) == 'usm_t_window_'  .AND.  len( TRIM(var) ) >= 14 )  THEN
     
    14361388!--             Array of sensible heat flux from surfaces
    14371389!--             Land surfaces
    1438                 IF ( l == -1 )  THEN
    1439                    IF ( .NOT.  ALLOCATED( surf_usm_h%wshf_eb_av ) )  THEN
    1440                       ALLOCATE ( surf_usm_h%wshf_eb_av(1:surf_usm_h%ns) )
    1441                       surf_usm_h%wshf_eb_av = 0.0_wp
     1390                IF ( horizontal )  THEN
     1391                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%wshf_eb_av ) )  THEN
     1392                      ALLOCATE ( surf_usm_h(l)%wshf_eb_av(1:surf_usm_h(l)%ns) )
     1393                      surf_usm_h(l)%wshf_eb_av = 0.0_wp
    14421394                   ENDIF
    14431395                ELSE
     
    14521404!--             Array of latent heat flux from surfaces
    14531405!--             Land surfaces
    1454                 IF ( l == -1 .AND. .NOT.  ALLOCATED( surf_usm_h%qsws_av ) )  THEN
    1455                     ALLOCATE ( surf_usm_h%qsws_av(1:surf_usm_h%ns) )
    1456                     surf_usm_h%qsws_av = 0.0_wp
     1406                IF ( horizontal .AND. .NOT.  ALLOCATED( surf_usm_h(l)%qsws_av ) )  THEN
     1407                    ALLOCATE ( surf_usm_h(l)%qsws_av(1:surf_usm_h(l)%ns) )
     1408                    surf_usm_h(l)%qsws_av = 0.0_wp
    14571409                ELSE
    14581410                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%qsws_av ) )  THEN
     
    14661418!--             Array of latent heat flux from vegetation surfaces
    14671419!--             Land surfaces
    1468                 IF ( l == -1 .AND. .NOT.  ALLOCATED( surf_usm_h%qsws_veg_av ) )  THEN
    1469                     ALLOCATE ( surf_usm_h%qsws_veg_av(1:surf_usm_h%ns) )
    1470                     surf_usm_h%qsws_veg_av = 0.0_wp
     1420                IF ( horizontal .AND. .NOT.  ALLOCATED( surf_usm_h(l)%qsws_veg_av ) )  THEN
     1421                    ALLOCATE ( surf_usm_h(l)%qsws_veg_av(1:surf_usm_h(l)%ns) )
     1422                    surf_usm_h(l)%qsws_veg_av = 0.0_wp
    14711423                ELSE
    14721424                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%qsws_veg_av ) )  THEN
     
    14801432!--             Array of latent heat flux from surfaces with liquid
    14811433!--             Land surfaces
    1482                 IF ( l == -1 .AND. .NOT.  ALLOCATED( surf_usm_h%qsws_liq_av ) )  THEN
    1483                     ALLOCATE ( surf_usm_h%qsws_liq_av(1:surf_usm_h%ns) )
    1484                     surf_usm_h%qsws_liq_av = 0.0_wp
     1434                IF ( horizontal .AND. .NOT.  ALLOCATED( surf_usm_h(l)%qsws_liq_av ) )  THEN
     1435                    ALLOCATE ( surf_usm_h(l)%qsws_liq_av(1:surf_usm_h(l)%ns) )
     1436                    surf_usm_h(l)%qsws_liq_av = 0.0_wp
    14851437                ELSE
    14861438                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%qsws_liq_av ) )  THEN
     
    14961448!
    14971449!--             Array of heat flux from ground (wall, roof, land)
    1498                 IF ( l == -1 )  THEN
    1499                    IF ( .NOT.  ALLOCATED( surf_usm_h%wghf_eb_av ) )  THEN
    1500                        ALLOCATE ( surf_usm_h%wghf_eb_av(1:surf_usm_h%ns) )
    1501                        surf_usm_h%wghf_eb_av = 0.0_wp
     1450                IF ( horizontal )  THEN
     1451                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%wghf_eb_av ) )  THEN
     1452                       ALLOCATE ( surf_usm_h(l)%wghf_eb_av(1:surf_usm_h(l)%ns) )
     1453                       surf_usm_h(l)%wghf_eb_av = 0.0_wp
    15021454                   ENDIF
    15031455                ELSE
     
    15111463!
    15121464!--             Array of heat flux from window ground (wall, roof, land)
    1513                 IF ( l == -1 )  THEN
    1514                    IF ( .NOT.  ALLOCATED( surf_usm_h%wghf_eb_window_av ) )  THEN
    1515                        ALLOCATE ( surf_usm_h%wghf_eb_window_av(1:surf_usm_h%ns) )
    1516                        surf_usm_h%wghf_eb_window_av = 0.0_wp
     1465                IF ( horizontal )  THEN
     1466                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%wghf_eb_window_av ) )  THEN
     1467                       ALLOCATE ( surf_usm_h(l)%wghf_eb_window_av(1:surf_usm_h(l)%ns) )
     1468                       surf_usm_h(l)%wghf_eb_window_av = 0.0_wp
    15171469                   ENDIF
    15181470                ELSE
     
    15261478!
    15271479!--             Array of heat flux from green ground (wall, roof, land)
    1528                 IF ( l == -1 )  THEN
    1529                    IF ( .NOT.  ALLOCATED( surf_usm_h%wghf_eb_green_av ) )  THEN
    1530                        ALLOCATE ( surf_usm_h%wghf_eb_green_av(1:surf_usm_h%ns) )
    1531                        surf_usm_h%wghf_eb_green_av = 0.0_wp
     1480                IF ( horizontal )  THEN
     1481                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%wghf_eb_green_av ) )  THEN
     1482                       ALLOCATE ( surf_usm_h(l)%wghf_eb_green_av(1:surf_usm_h(l)%ns) )
     1483                       surf_usm_h(l)%wghf_eb_green_av = 0.0_wp
    15321484                   ENDIF
    15331485                ELSE
     
    15411493!
    15421494!--             Array of heat flux from indoor ground (wall, roof, land)
    1543                 IF ( l == -1 )  THEN
    1544                    IF ( .NOT.  ALLOCATED( surf_usm_h%iwghf_eb_av ) )  THEN
    1545                        ALLOCATE ( surf_usm_h%iwghf_eb_av(1:surf_usm_h%ns) )
    1546                        surf_usm_h%iwghf_eb_av = 0.0_wp
     1495                IF ( horizontal )  THEN
     1496                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%iwghf_eb_av ) )  THEN
     1497                       ALLOCATE ( surf_usm_h(l)%iwghf_eb_av(1:surf_usm_h(l)%ns) )
     1498                       surf_usm_h(l)%iwghf_eb_av = 0.0_wp
    15471499                   ENDIF
    15481500                ELSE
     
    15561508!
    15571509!--             Array of heat flux from indoor window ground (wall, roof, land)
    1558                 IF ( l == -1 ) THEN
    1559                    IF ( .NOT.  ALLOCATED( surf_usm_h%iwghf_eb_window_av ) )  THEN
    1560                        ALLOCATE ( surf_usm_h%iwghf_eb_window_av(1:surf_usm_h%ns) )
    1561                        surf_usm_h%iwghf_eb_window_av = 0.0_wp
     1510                IF ( horizontal ) THEN
     1511                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%iwghf_eb_window_av ) )  THEN
     1512                       ALLOCATE ( surf_usm_h(l)%iwghf_eb_window_av(1:surf_usm_h(l)%ns) )
     1513                       surf_usm_h(l)%iwghf_eb_window_av = 0.0_wp
    15621514                   ENDIF
    15631515                ELSE
     
    15711523!
    15721524!--             Surface temperature for surfaces
    1573                 IF ( l == -1 )  THEN
    1574                    IF ( .NOT.  ALLOCATED( surf_usm_h%t_surf_wall_av ) )  THEN
    1575                        ALLOCATE ( surf_usm_h%t_surf_wall_av(1:surf_usm_h%ns) )
    1576                        surf_usm_h%t_surf_wall_av = 0.0_wp
     1525                IF ( horizontal )  THEN
     1526                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%t_surf_wall_av ) )  THEN
     1527                       ALLOCATE ( surf_usm_h(l)%t_surf_wall_av(1:surf_usm_h(l)%ns) )
     1528                       surf_usm_h(l)%t_surf_wall_av = 0.0_wp
    15771529                   ENDIF
    15781530                ELSE
     
    15861538!
    15871539!--             Surface temperature for window surfaces
    1588                 IF ( l == -1 )  THEN
    1589                    IF ( .NOT.  ALLOCATED( surf_usm_h%t_surf_window_av ) )  THEN
    1590                        ALLOCATE ( surf_usm_h%t_surf_window_av(1:surf_usm_h%ns) )
    1591                        surf_usm_h%t_surf_window_av = 0.0_wp
     1540                IF ( horizontal )  THEN
     1541                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%t_surf_window_av ) )  THEN
     1542                       ALLOCATE ( surf_usm_h(l)%t_surf_window_av(1:surf_usm_h(l)%ns) )
     1543                       surf_usm_h(l)%t_surf_window_av = 0.0_wp
    15921544                   ENDIF
    15931545                ELSE
     
    16011553!
    16021554!--             Surface temperature for green surfaces
    1603                 IF ( l == -1 )  THEN
    1604                    IF ( .NOT.  ALLOCATED( surf_usm_h%t_surf_green_av ) )  THEN
    1605                        ALLOCATE ( surf_usm_h%t_surf_green_av(1:surf_usm_h%ns) )
    1606                        surf_usm_h%t_surf_green_av = 0.0_wp
     1555                IF ( horizontal )  THEN
     1556                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%t_surf_green_av ) )  THEN
     1557                       ALLOCATE ( surf_usm_h(l)%t_surf_green_av(1:surf_usm_h(l)%ns) )
     1558                       surf_usm_h(l)%t_surf_green_av = 0.0_wp
    16071559                   ENDIF
    16081560                ELSE
     
    16161568!
    16171569!--             Near surface (10cm) temperature for whole surfaces
    1618                 IF ( l == -1 )  THEN
    1619                    IF ( .NOT.  ALLOCATED( surf_usm_h%pt_10cm_av ) )  THEN
    1620                        ALLOCATE ( surf_usm_h%pt_10cm_av(1:surf_usm_h%ns) )
    1621                        surf_usm_h%pt_10cm_av = 0.0_wp
     1570                IF ( horizontal )  THEN
     1571                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%pt_10cm_av ) )  THEN
     1572                       ALLOCATE ( surf_usm_h(l)%pt_10cm_av(1:surf_usm_h(l)%ns) )
     1573                       surf_usm_h(l)%pt_10cm_av = 0.0_wp
    16221574                   ENDIF
    16231575                ELSE
     
    16311583!
    16321584!--             Wall temperature for iwl layer of walls and land
    1633                 IF ( l == -1 )  THEN
    1634                    IF ( .NOT.  ALLOCATED( surf_usm_h%t_wall_av ) )  THEN
    1635                        ALLOCATE ( surf_usm_h%t_wall_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
    1636                        surf_usm_h%t_wall_av = 0.0_wp
     1585                IF ( horizontal )  THEN
     1586                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%t_wall_av ) )  THEN
     1587                       ALLOCATE ( surf_usm_h(l)%t_wall_av(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns) )
     1588                       surf_usm_h(l)%t_wall_av = 0.0_wp
    16371589                   ENDIF
    16381590                ELSE
     
    16461598!
    16471599!--             Window temperature for iwl layer of walls and land
    1648                 IF ( l == -1 )  THEN
    1649                    IF ( .NOT.  ALLOCATED( surf_usm_h%t_window_av ) )  THEN
    1650                        ALLOCATE ( surf_usm_h%t_window_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
    1651                        surf_usm_h%t_window_av = 0.0_wp
     1600                IF ( horizontal )  THEN
     1601                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%t_window_av ) )  THEN
     1602                       ALLOCATE ( surf_usm_h(l)%t_window_av(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns) )
     1603                       surf_usm_h(l)%t_window_av = 0.0_wp
    16521604                   ENDIF
    16531605                ELSE
     
    16611613!
    16621614!--             Green temperature for iwl layer of walls and land
    1663                 IF ( l == -1 )  THEN
    1664                    IF ( .NOT.  ALLOCATED( surf_usm_h%t_green_av ) )  THEN
    1665                        ALLOCATE ( surf_usm_h%t_green_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
    1666                        surf_usm_h%t_green_av = 0.0_wp
     1615                IF ( horizontal )  THEN
     1616                   IF ( .NOT.  ALLOCATED( surf_usm_h(l)%t_green_av ) )  THEN
     1617                       ALLOCATE ( surf_usm_h(l)%t_green_av(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns) )
     1618                       surf_usm_h(l)%t_green_av = 0.0_wp
    16671619                   ENDIF
    16681620                ELSE
     
    16751627!
    16761628!--             Soil water content for iwl layer of walls and land
    1677                 IF ( l == -1 .AND. .NOT.  ALLOCATED( surf_usm_h%swc_av ) )  THEN
    1678                     ALLOCATE ( surf_usm_h%swc_av(nzb_wall:nzt_wall,1:surf_usm_h%ns) )
    1679                     surf_usm_h%swc_av = 0.0_wp
     1629                IF ( horizontal .AND. .NOT.  ALLOCATED( surf_usm_h(l)%swc_av ) )  THEN
     1630                    ALLOCATE ( surf_usm_h(l)%swc_av(nzb_wall:nzt_wall,1:surf_usm_h(l)%ns) )
     1631                    surf_usm_h(l)%swc_av = 0.0_wp
    16801632                ELSE
    16811633                   IF ( .NOT.  ALLOCATED( surf_usm_v(l)%swc_av ) )  THEN
     
    16971649!
    16981650!--             Array of sensible heat flux from surfaces (land, roof, wall)
    1699                 IF ( l == -1 )  THEN
    1700                    DO  m = 1, surf_usm_h%ns
    1701                       surf_usm_h%wshf_eb_av(m) = surf_usm_h%wshf_eb_av(m) + surf_usm_h%wshf_eb(m)
     1651                IF ( horizontal )  THEN
     1652                   DO  m = 1, surf_usm_h(l)%ns
     1653                      surf_usm_h(l)%wshf_eb_av(m) = surf_usm_h(l)%wshf_eb_av(m) + surf_usm_h(l)%wshf_eb(m)
    17021654                   ENDDO
    17031655                ELSE
     
    17111663!
    17121664!--             Array of latent heat flux from surfaces (land, roof, wall)
    1713                 IF ( l == -1 ) THEN
    1714                 DO  m = 1, surf_usm_h%ns
    1715                    surf_usm_h%qsws_av(m) = surf_usm_h%qsws_av(m) + surf_usm_h%qsws(m) * l_v
     1665                IF ( horizontal ) THEN
     1666                DO  m = 1, surf_usm_h(l)%ns
     1667                   surf_usm_h(l)%qsws_av(m) = surf_usm_h(l)%qsws_av(m) + surf_usm_h(l)%qsws(m) * l_v
    17161668                ENDDO
    17171669                ELSE
     
    17251677!
    17261678!--             Array of latent heat flux from vegetation surfaces (land, roof, wall)
    1727                 IF ( l == -1 )  THEN
    1728                 DO  m = 1, surf_usm_h%ns
    1729                    surf_usm_h%qsws_veg_av(m) = surf_usm_h%qsws_veg_av(m) + surf_usm_h%qsws_veg(m)
     1679                IF ( horizontal )  THEN
     1680                DO  m = 1, surf_usm_h(l)%ns
     1681                   surf_usm_h(l)%qsws_veg_av(m) = surf_usm_h(l)%qsws_veg_av(m) + surf_usm_h(l)%qsws_veg(m)
    17301682                ENDDO
    17311683                ELSE
     
    17391691!
    17401692!--             Array of latent heat flux from surfaces with liquid (land, roof, wall)
    1741                 IF ( l == -1 ) THEN
    1742                 DO  m = 1, surf_usm_h%ns
    1743                    surf_usm_h%qsws_liq_av(m) = surf_usm_h%qsws_liq_av(m) +                         &
    1744                                                surf_usm_h%qsws_liq(m)
     1693                IF ( horizontal ) THEN
     1694                DO  m = 1, surf_usm_h(l)%ns
     1695                   surf_usm_h(l)%qsws_liq_av(m) = surf_usm_h(l)%qsws_liq_av(m) +                         &
     1696                                               surf_usm_h(l)%qsws_liq(m)
    17451697                ENDDO
    17461698                ELSE
     
    17541706!
    17551707!--             Array of heat flux from ground (wall, roof, land)
    1756                 IF ( l == -1 ) THEN
    1757                    DO  m = 1, surf_usm_h%ns
    1758                       surf_usm_h%wghf_eb_av(m) = surf_usm_h%wghf_eb_av(m) +                        &
    1759                                                  surf_usm_h%wghf_eb(m)
     1708                IF ( horizontal ) THEN
     1709                   DO  m = 1, surf_usm_h(l)%ns
     1710                      surf_usm_h(l)%wghf_eb_av(m) = surf_usm_h(l)%wghf_eb_av(m) +                        &
     1711                                                 surf_usm_h(l)%wghf_eb(m)
    17601712                   ENDDO
    17611713                ELSE
     
    17691721!
    17701722!--             Array of heat flux from window ground (wall, roof, land)
    1771                 IF ( l == -1 )  THEN
    1772                    DO  m = 1, surf_usm_h%ns
    1773                       surf_usm_h%wghf_eb_window_av(m) = surf_usm_h%wghf_eb_window_av(m) +          &
    1774                                                         surf_usm_h%wghf_eb_window(m)
     1723                IF ( horizontal )  THEN
     1724                   DO  m = 1, surf_usm_h(l)%ns
     1725                      surf_usm_h(l)%wghf_eb_window_av(m) = surf_usm_h(l)%wghf_eb_window_av(m) +          &
     1726                                                        surf_usm_h(l)%wghf_eb_window(m)
    17751727                   ENDDO
    17761728                ELSE
     
    17841736!
    17851737!--             Array of heat flux from green ground (wall, roof, land)
    1786                 IF ( l == -1 )  THEN
    1787                    DO  m = 1, surf_usm_h%ns
    1788                       surf_usm_h%wghf_eb_green_av(m) = surf_usm_h%wghf_eb_green_av(m) +            &
    1789                                                        surf_usm_h%wghf_eb_green(m)
     1738                IF ( horizontal )  THEN
     1739                   DO  m = 1, surf_usm_h(l)%ns
     1740                      surf_usm_h(l)%wghf_eb_green_av(m) = surf_usm_h(l)%wghf_eb_green_av(m) +            &
     1741                                                       surf_usm_h(l)%wghf_eb_green(m)
    17901742                   ENDDO
    17911743                ELSE
     
    17991751!
    18001752!--             Array of heat flux from indoor ground (wall, roof, land)
    1801                 IF ( l == -1 )  THEN
    1802                    DO  m = 1, surf_usm_h%ns
    1803                       surf_usm_h%iwghf_eb_av(m) = surf_usm_h%iwghf_eb_av(m) + surf_usm_h%iwghf_eb(m)
     1753                IF ( horizontal )  THEN
     1754                   DO  m = 1, surf_usm_h(l)%ns
     1755                      surf_usm_h(l)%iwghf_eb_av(m) = surf_usm_h(l)%iwghf_eb_av(m) + surf_usm_h(l)%iwghf_eb(m)
    18041756                   ENDDO
    18051757                ELSE
     
    18131765!
    18141766!--             Array of heat flux from indoor window ground (wall, roof, land)
    1815                 IF ( l == -1 )  THEN
    1816                    DO  m = 1, surf_usm_h%ns
    1817                       surf_usm_h%iwghf_eb_window_av(m) = surf_usm_h%iwghf_eb_window_av(m) +        &
    1818                                                          surf_usm_h%iwghf_eb_window(m)
     1767                IF ( horizontal )  THEN
     1768                   DO  m = 1, surf_usm_h(l)%ns
     1769                      surf_usm_h(l)%iwghf_eb_window_av(m) = surf_usm_h(l)%iwghf_eb_window_av(m) +        &
     1770                                                         surf_usm_h(l)%iwghf_eb_window(m)
    18191771                   ENDDO
    18201772                ELSE
     
    18281780!
    18291781!--             Surface temperature for surfaces
    1830                 IF ( l == -1 )  THEN
    1831                    DO  m = 1, surf_usm_h%ns
    1832                    surf_usm_h%t_surf_wall_av(m) = surf_usm_h%t_surf_wall_av(m) + t_surf_wall_h(m)
     1782                IF ( horizontal )  THEN
     1783                   DO  m = 1, surf_usm_h(l)%ns
     1784                   surf_usm_h(l)%t_surf_wall_av(m) = surf_usm_h(l)%t_surf_wall_av(m) + t_surf_wall_h(l)%val(m)
    18331785                   ENDDO
    18341786                ELSE
    18351787                   DO  m = 1, surf_usm_v(l)%ns
    18361788                      surf_usm_v(l)%t_surf_wall_av(m) = surf_usm_v(l)%t_surf_wall_av(m) +          &
    1837                                                         t_surf_wall_v(l)%t(m)
     1789                                                        t_surf_wall_v(l)%val(m)
    18381790                   ENDDO
    18391791                ENDIF
     
    18421794!
    18431795!--             Surface temperature for window surfaces
    1844                 IF ( l == -1 )  THEN
    1845                    DO  m = 1, surf_usm_h%ns
    1846                       surf_usm_h%t_surf_window_av(m) = surf_usm_h%t_surf_window_av(m) +            &
    1847                                                        t_surf_window_h(m)
     1796                IF ( horizontal )  THEN
     1797                   DO  m = 1, surf_usm_h(l)%ns
     1798                      surf_usm_h(l)%t_surf_window_av(m) = surf_usm_h(l)%t_surf_window_av(m) +            &
     1799                                                       t_surf_window_h(l)%val(m)
    18481800                   ENDDO
    18491801                ELSE
    18501802                   DO  m = 1, surf_usm_v(l)%ns
    18511803                      surf_usm_v(l)%t_surf_window_av(m) = surf_usm_v(l)%t_surf_window_av(m) +      &
    1852                                                           t_surf_window_v(l)%t(m)
     1804                                                          t_surf_window_v(l)%val(m)
    18531805                   ENDDO
    18541806                ENDIF
     
    18571809!
    18581810!--             Surface temperature for green surfaces
    1859                 IF ( l == -1 )  THEN
    1860                    DO  m = 1, surf_usm_h%ns
    1861                       surf_usm_h%t_surf_green_av(m) = surf_usm_h%t_surf_green_av(m) +              &
    1862                                                       t_surf_green_h(m)
     1811                IF ( horizontal )  THEN
     1812                   DO  m = 1, surf_usm_h(l)%ns
     1813                      surf_usm_h(l)%t_surf_green_av(m) = surf_usm_h(l)%t_surf_green_av(m) +              &
     1814                                                      t_surf_green_h(l)%val(m)
    18631815                   ENDDO
    18641816                ELSE
    18651817                   DO  m = 1, surf_usm_v(l)%ns
    18661818                      surf_usm_v(l)%t_surf_green_av(m) = surf_usm_v(l)%t_surf_green_av(m) +        &
    1867                                                          t_surf_green_v(l)%t(m)
     1819                                                         t_surf_green_v(l)%val(m)
    18681820                   ENDDO
    18691821                ENDIF
     
    18721824!
    18731825!--             Near surface temperature for whole surfaces
    1874                 IF ( l == -1 )  THEN
    1875                    DO  m = 1, surf_usm_h%ns
    1876                       surf_usm_h%pt_10cm_av(m) = surf_usm_h%pt_10cm_av(m) +                        &
    1877                                                  surf_usm_h%pt_10cm(m)
     1826                IF ( horizontal )  THEN
     1827                   DO  m = 1, surf_usm_h(l)%ns
     1828                      surf_usm_h(l)%pt_10cm_av(m) = surf_usm_h(l)%pt_10cm_av(m) +                        &
     1829                                                 surf_usm_h(l)%pt_10cm(m)
    18781830                   ENDDO
    18791831                ELSE
     
    18871839!
    18881840!--             Wall temperature for  iwl layer of walls and land
    1889                 IF ( l == -1 )  THEN
    1890                    DO  m = 1, surf_usm_h%ns
    1891                       surf_usm_h%t_wall_av(iwl,m) = surf_usm_h%t_wall_av(iwl,m) +                  &
    1892                                                     t_wall_h(iwl,m)
     1841                IF ( horizontal )  THEN
     1842                   DO  m = 1, surf_usm_h(l)%ns
     1843                      surf_usm_h(l)%t_wall_av(iwl,m) = surf_usm_h(l)%t_wall_av(iwl,m) +                  &
     1844                                                    t_wall_h(l)%val(iwl,m)
    18931845                   ENDDO
    18941846                ELSE
    18951847                   DO  m = 1, surf_usm_v(l)%ns
    18961848                      surf_usm_v(l)%t_wall_av(iwl,m) = surf_usm_v(l)%t_wall_av(iwl,m) +            &
    1897                                                        t_wall_v(l)%t(iwl,m)
     1849                                                       t_wall_v(l)%val(iwl,m)
    18981850                   ENDDO
    18991851                ENDIF
     
    19021854!
    19031855!--             Window temperature for  iwl layer of walls and land
    1904                 IF ( l == -1 )  THEN
    1905                    DO  m = 1, surf_usm_h%ns
    1906                       surf_usm_h%t_window_av(iwl,m) = surf_usm_h%t_window_av(iwl,m) +              &
    1907                                                       t_window_h(iwl,m)
     1856                IF ( horizontal )  THEN
     1857                   DO  m = 1, surf_usm_h(l)%ns
     1858                      surf_usm_h(l)%t_window_av(iwl,m) = surf_usm_h(l)%t_window_av(iwl,m) +              &
     1859                                                         t_window_h(l)%val(iwl,m)
    19081860                   ENDDO
    19091861                ELSE
    19101862                   DO  m = 1, surf_usm_v(l)%ns
    19111863                      surf_usm_v(l)%t_window_av(iwl,m) = surf_usm_v(l)%t_window_av(iwl,m) +        &
    1912                                                          t_window_v(l)%t(iwl,m)
     1864                                                         t_window_v(l)%val(iwl,m)
    19131865                   ENDDO
    19141866                ENDIF
     
    19171869!
    19181870!--             Green temperature for  iwl layer of walls and land
    1919                 IF ( l == -1 )  THEN
    1920                    DO  m = 1, surf_usm_h%ns
    1921                       surf_usm_h%t_green_av(iwl,m) = surf_usm_h%t_green_av(iwl,m) + t_green_h(iwl,m)
     1871                IF ( horizontal )  THEN
     1872                   DO  m = 1, surf_usm_h(l)%ns
     1873                      surf_usm_h(l)%t_green_av(iwl,m) = surf_usm_h(l)%t_green_av(iwl,m) + t_green_h(l)%val(iwl,m)
    19221874                   ENDDO
    19231875                ELSE
    19241876                   DO  m = 1, surf_usm_v(l)%ns
    19251877                      surf_usm_v(l)%t_green_av(iwl,m) = surf_usm_v(l)%t_green_av(iwl,m) +          &
    1926                                                         t_green_v(l)%t(iwl,m)
     1878                                                        t_green_v(l)%val(iwl,m)
    19271879                   ENDDO
    19281880                ENDIF
     
    19311883!
    19321884!--             Soil water content for  iwl layer of walls and land
    1933                 IF ( l == -1 )  THEN
    1934                    DO  m = 1, surf_usm_h%ns
    1935                       surf_usm_h%swc_av(iwl,m) = surf_usm_h%swc_av(iwl,m) + swc_h(iwl,m)
     1885                IF ( horizontal )  THEN
     1886                   DO  m = 1, surf_usm_h(l)%ns
     1887                      surf_usm_h(l)%swc_av(iwl,m) = surf_usm_h(l)%swc_av(iwl,m) + swc_h(l)%val(iwl,m)
    19361888                   ENDDO
    19371889                ELSE
     
    19501902!
    19511903!--             Array of sensible heat flux from surfaces (land, roof, wall)
    1952                 IF ( l == -1 )  THEN
    1953                    DO  m = 1, surf_usm_h%ns
    1954                       surf_usm_h%wshf_eb_av(m) = surf_usm_h%wshf_eb_av(m) /                        &
     1904                IF ( horizontal )  THEN
     1905                   DO  m = 1, surf_usm_h(l)%ns
     1906                      surf_usm_h(l)%wshf_eb_av(m) = surf_usm_h(l)%wshf_eb_av(m) /                        &
    19551907                                                 REAL( average_count_3d, kind=wp )
    19561908                   ENDDO
     
    19651917!
    19661918!--             Array of latent heat flux from surfaces (land, roof, wall)
    1967                 IF ( l == -1 )  THEN
    1968                 DO  m = 1, surf_usm_h%ns
    1969                    surf_usm_h%qsws_av(m) = surf_usm_h%qsws_av(m) /                                 &
     1919                IF ( horizontal )  THEN
     1920                DO  m = 1, surf_usm_h(l)%ns
     1921                   surf_usm_h(l)%qsws_av(m) = surf_usm_h(l)%qsws_av(m) /                                 &
    19701922                                           REAL( average_count_3d, kind=wp )
    19711923                ENDDO
     
    19801932!
    19811933!--             Array of latent heat flux from vegetation surfaces (land, roof, wall)
    1982                 IF ( l == -1 )  THEN
    1983                 DO  m = 1, surf_usm_h%ns
    1984                    surf_usm_h%qsws_veg_av(m) = surf_usm_h%qsws_veg_av(m) /                         &
     1934                IF ( horizontal )  THEN
     1935                DO  m = 1, surf_usm_h(l)%ns
     1936                   surf_usm_h(l)%qsws_veg_av(m) = surf_usm_h(l)%qsws_veg_av(m) /                         &
    19851937                                               REAL( average_count_3d, kind=wp )
    19861938                ENDDO
     
    19951947!
    19961948!--             Array of latent heat flux from surfaces with liquid (land, roof, wall)
    1997                 IF ( l == -1 )  THEN
    1998                 DO  m = 1, surf_usm_h%ns
    1999                    surf_usm_h%qsws_liq_av(m) = surf_usm_h%qsws_liq_av(m) /                         &
     1949                IF ( horizontal )  THEN
     1950                DO  m = 1, surf_usm_h(l)%ns
     1951                   surf_usm_h(l)%qsws_liq_av(m) = surf_usm_h(l)%qsws_liq_av(m) /                         &
    20001952                                               REAL( average_count_3d, kind=wp )
    20011953                ENDDO
     
    20101962!
    20111963!--             Array of heat flux from ground (wall, roof, land)
    2012                 IF ( l == -1 )  THEN
    2013                    DO  m = 1, surf_usm_h%ns
    2014                       surf_usm_h%wghf_eb_av(m) = surf_usm_h%wghf_eb_av(m) /                        &
     1964                IF ( horizontal )  THEN
     1965                   DO  m = 1, surf_usm_h(l)%ns
     1966                      surf_usm_h(l)%wghf_eb_av(m) = surf_usm_h(l)%wghf_eb_av(m) /                        &
    20151967                                                 REAL( average_count_3d, kind=wp )
    20161968                   ENDDO
     
    20251977!
    20261978!--             Array of heat flux from window ground (wall, roof, land)
    2027                 IF ( l == -1 )  THEN
    2028                    DO  m = 1, surf_usm_h%ns
    2029                       surf_usm_h%wghf_eb_window_av(m) = surf_usm_h%wghf_eb_window_av(m) /          &
     1979                IF ( horizontal )  THEN
     1980                   DO  m = 1, surf_usm_h(l)%ns
     1981                      surf_usm_h(l)%wghf_eb_window_av(m) = surf_usm_h(l)%wghf_eb_window_av(m) /          &
    20301982                                                        REAL( average_count_3d, kind=wp )
    20311983                   ENDDO
     
    20401992!
    20411993!--             Array of heat flux from green ground (wall, roof, land)
    2042                 IF ( l == -1 )  THEN
    2043                    DO  m = 1, surf_usm_h%ns
    2044                       surf_usm_h%wghf_eb_green_av(m) = surf_usm_h%wghf_eb_green_av(m) /            &
     1994                IF ( horizontal )  THEN
     1995                   DO  m = 1, surf_usm_h(l)%ns
     1996                      surf_usm_h(l)%wghf_eb_green_av(m) = surf_usm_h(l)%wghf_eb_green_av(m) /            &
    20451997                                                       REAL( average_count_3d, kind=wp )
    20461998                   ENDDO
     
    20552007!
    20562008!--             Array of heat flux from indoor ground (wall, roof, land)
    2057                 IF ( l == -1 )  THEN
    2058                    DO  m = 1, surf_usm_h%ns
    2059                       surf_usm_h%iwghf_eb_av(m) = surf_usm_h%iwghf_eb_av(m) /                      &
     2009                IF ( horizontal )  THEN
     2010                   DO  m = 1, surf_usm_h(l)%ns
     2011                      surf_usm_h(l)%iwghf_eb_av(m) = surf_usm_h(l)%iwghf_eb_av(m) /                      &
    20602012                                                  REAL( average_count_3d, kind=wp )
    20612013                   ENDDO
     
    20702022!
    20712023!--             Array of heat flux from indoor window ground (wall, roof, land)
    2072                 IF ( l == -1 )  THEN
    2073                    DO  m = 1, surf_usm_h%ns
    2074                       surf_usm_h%iwghf_eb_window_av(m) = surf_usm_h%iwghf_eb_window_av(m) /        &
     2024                IF ( horizontal )  THEN
     2025                   DO  m = 1, surf_usm_h(l)%ns
     2026                      surf_usm_h(l)%iwghf_eb_window_av(m) = surf_usm_h(l)%iwghf_eb_window_av(m) /        &
    20752027                                                         REAL( average_count_3d, kind=wp )
    20762028                   ENDDO
     
    20852037!
    20862038!--             Surface temperature for surfaces
    2087                 IF ( l == -1 )  THEN
    2088                    DO  m = 1, surf_usm_h%ns
    2089                    surf_usm_h%t_surf_wall_av(m) = surf_usm_h%t_surf_wall_av(m) /                   &
     2039                IF ( horizontal )  THEN
     2040                   DO  m = 1, surf_usm_h(l)%ns
     2041                   surf_usm_h(l)%t_surf_wall_av(m) = surf_usm_h(l)%t_surf_wall_av(m) /                   &
    20902042                                                  REAL( average_count_3d, kind=wp )
    20912043                   ENDDO
     
    21002052!
    21012053!--             Surface temperature for window surfaces
    2102                 IF ( l == -1 )  THEN
    2103                    DO  m = 1, surf_usm_h%ns
    2104                       surf_usm_h%t_surf_window_av(m) = surf_usm_h%t_surf_window_av(m) /            &
     2054                IF ( horizontal )  THEN
     2055                   DO  m = 1, surf_usm_h(l)%ns
     2056                      surf_usm_h(l)%t_surf_window_av(m) = surf_usm_h(l)%t_surf_window_av(m) /            &
    21052057                                                       REAL( average_count_3d, kind=wp )
    21062058                   ENDDO
     
    21152067!
    21162068!--             Surface temperature for green surfaces
    2117                 IF ( l == -1 )  THEN
    2118                    DO  m = 1, surf_usm_h%ns
    2119                       surf_usm_h%t_surf_green_av(m) = surf_usm_h%t_surf_green_av(m) /              &
     2069                IF ( horizontal )  THEN
     2070                   DO  m = 1, surf_usm_h(l)%ns
     2071                      surf_usm_h(l)%t_surf_green_av(m) = surf_usm_h(l)%t_surf_green_av(m) /              &
    21202072                                                      REAL( average_count_3d, kind=wp )
    21212073                   ENDDO
     
    21302082!
    21312083!--             Near surface temperature for whole surfaces
    2132                 IF ( l == -1 )  THEN
    2133                    DO  m = 1, surf_usm_h%ns
    2134                       surf_usm_h%pt_10cm_av(m) = surf_usm_h%pt_10cm_av(m) /                        &
     2084                IF ( horizontal )  THEN
     2085                   DO  m = 1, surf_usm_h(l)%ns
     2086                      surf_usm_h(l)%pt_10cm_av(m) = surf_usm_h(l)%pt_10cm_av(m) /                        &
    21352087                                                 REAL( average_count_3d, kind=wp )
    21362088                   ENDDO
     
    21462098!
    21472099!--             Wall temperature for  iwl layer of walls and land
    2148                 IF ( l == -1 )  THEN
    2149                    DO  m = 1, surf_usm_h%ns
    2150                       surf_usm_h%t_wall_av(iwl,m) = surf_usm_h%t_wall_av(iwl,m) /                  &
     2100                IF ( horizontal )  THEN
     2101                   DO  m = 1, surf_usm_h(l)%ns
     2102                      surf_usm_h(l)%t_wall_av(iwl,m) = surf_usm_h(l)%t_wall_av(iwl,m) /                  &
    21512103                                                    REAL( average_count_3d, kind=wp )
    21522104                   ENDDO
     
    21612113!
    21622114!--             Window temperature for  iwl layer of walls and land
    2163                 IF ( l == -1 )  THEN
    2164                    DO  m = 1, surf_usm_h%ns
    2165                       surf_usm_h%t_window_av(iwl,m) = surf_usm_h%t_window_av(iwl,m) /              &
     2115                IF ( horizontal )  THEN
     2116                   DO  m = 1, surf_usm_h(l)%ns
     2117                      surf_usm_h(l)%t_window_av(iwl,m) = surf_usm_h(l)%t_window_av(iwl,m) /              &
    21662118                                                      REAL( average_count_3d, kind=wp )
    21672119                   ENDDO
     
    21762128!
    21772129!--             Green temperature for  iwl layer of walls and land
    2178                 IF ( l == -1 )  THEN
    2179                    DO  m = 1, surf_usm_h%ns
    2180                       surf_usm_h%t_green_av(iwl,m) = surf_usm_h%t_green_av(iwl,m) /                &
     2130                IF ( horizontal )  THEN
     2131                   DO  m = 1, surf_usm_h(l)%ns
     2132                      surf_usm_h(l)%t_green_av(iwl,m) = surf_usm_h(l)%t_green_av(iwl,m) /                &
    21812133                                                     REAL( average_count_3d, kind=wp )
    21822134                   ENDDO
     
    21912143!
    21922144!--             Soil water content for  iwl layer of walls and land
    2193                 IF ( l == -1 )  THEN
    2194                 DO  m = 1, surf_usm_h%ns
    2195                    surf_usm_h%swc_av(iwl,m) = surf_usm_h%swc_av(iwl,m) /                           &
     2145                IF ( horizontal )  THEN
     2146                DO  m = 1, surf_usm_h(l)%ns
     2147                   surf_usm_h(l)%swc_av(iwl,m) = surf_usm_h(l)%swc_av(iwl,m) /                           &
    21962148                                              REAL( average_count_3d, kind=wp )
    21972149                ENDDO
     
    22082160    ENDIF
    22092161
    2210     ENDIF
    2211 
    22122162 END SUBROUTINE usm_3d_data_averaging
    22132163
     
    22322182    INTEGER(iwp) ::  m      !< running index surface elements
    22332183
    2234     koff = surf_usm_h%koff
    2235     DO  m = 1, surf_usm_h%ns
    2236        i = surf_usm_h%i(m)
    2237        j = surf_usm_h%j(m)
    2238        k = surf_usm_h%k(m)
    2239        pt(k+koff,j,i) = pt(k,j,i)
     2184    DO  l = 0, 1
     2185       koff = surf_usm_h(l)%koff
     2186       DO  m = 1, surf_usm_h(l)%ns
     2187          i = surf_usm_h(l)%i(m)
     2188          j = surf_usm_h(l)%j(m)
     2189          k = surf_usm_h(l)%k(m)
     2190          pt(k+koff,j,i) = pt(k,j,i)
     2191       ENDDO
    22402192    ENDDO
    22412193
     
    22972249                'usm_t_window                  ', &
    22982250                'usm_t_green                   '/)
    2299 
    2300     INTEGER(iwp), PARAMETER                       ::  nd = 5     !< number of directions
    2301     CHARACTER(LEN=6), DIMENSION(nd), PARAMETER    ::  dirname = &  !< direction names
    2302               (/'_roof ','_south','_north','_west ','_east '/)
    23032251
    23042252    LOGICAL                                       ::  lfound     !< flag if the variable is found
     
    24152363       message_string = 'topography /= "flat" is required when using the urban surface model'
    24162364       CALL message( 'usm_check_parameters', 'PA0592', 1, 2, 0, 6, 0 )
    2417     ENDIF
    2418 !
    2419 !-- Naheatlayers
    2420     IF ( naheatlayers > nzt )  THEN
    2421        message_string = 'number of anthropogenic heat layers "naheatlayers" can not be larger ' // &
    2422                         'than number of domain layers "nzt"'
    2423        CALL message( 'usm_check_parameters', 'PA0593', 1, 2, 0, 6, 0 )
    24242365    ENDIF
    24252366!
     
    24662407    INTEGER(iwp), INTENT(IN)       ::  nzt_do    !< vertical upper limit of the data output (usually nz_do3d)
    24672408
    2468     INTEGER(iwp), PARAMETER                            ::  nd = 5  !< number of directions
    2469     INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER         ::  dirint =  (/      iup,   isouth,   inorth,    iwest,    ieast /)  !<
    2470     INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER         ::  diridx =  (/       -1,        1,        0,        3,        2 /)
    2471                                                            !< index for surf_*_v: 0:3 = (North, South, East, West)
    2472     CHARACTER(LEN=6), DIMENSION(0:nd-1), PARAMETER     ::  dirname = (/ '_roof ', '_south', '_north', '_west ', '_east ' /)  !<
    2473 
    2474 
    24752409    INTEGER(iwp)  ::  ids, idsint, idsidx        !<
    24762410    INTEGER(iwp)  ::  i, j, k, iwl, istat, l, m  !< running indices
     2411    LOGICAL       ::  horizontal                 !< horizontal upward or downeard facing surface
    24772412
    24782413    LOGICAL, INTENT(OUT)           ::  found     !<
     
    24972432        ENDIF
    24982433    ENDDO
     2434    horizontal = ( ( idsint == iup ) .OR. (idsint == idown ) )
     2435    l = idsidx !< shorter direction index name
     2436
    24992437    IF ( ids == -1 )  THEN
    25002438        var = TRIM( variable )
     
    25382476!
    25392477!--       Array of surface height (z)
    2540           IF ( idsint == iup )  THEN
    2541              DO  m = 1, surf_usm_h%ns
    2542                 i = surf_usm_h%i(m)
    2543                 j = surf_usm_h%j(m)
    2544                 k = surf_usm_h%k(m)
     2478          IF ( horizontal )  THEN
     2479             DO  m = 1, surf_usm_h(l)%ns
     2480                i = surf_usm_h(l)%i(m)
     2481                j = surf_usm_h(l)%j(m)
     2482                k = surf_usm_h(l)%k(m)
    25452483                temp_pf(0,j,i) = MAX( temp_pf(0,j,i), REAL( k, KIND = sp) )
    25462484             ENDDO
    25472485          ELSE
    2548              l = idsidx
    25492486             DO  m = 1, surf_usm_v(l)%ns
    25502487                i = surf_usm_v(l)%i(m)
     
    25582495!
    25592496!--       Surface category
    2560           IF ( idsint == iup )  THEN
    2561              DO  m = 1, surf_usm_h%ns
    2562                 i = surf_usm_h%i(m)
    2563                 j = surf_usm_h%j(m)
    2564                 k = surf_usm_h%k(m)
    2565                 temp_pf(k,j,i) = surf_usm_h%surface_types(m)
     2497          IF ( horizontal )  THEN
     2498             DO  m = 1, surf_usm_h(l)%ns
     2499                i = surf_usm_h(l)%i(m)
     2500                j = surf_usm_h(l)%j(m)
     2501                k = surf_usm_h(l)%k(m)
     2502                temp_pf(k,j,i) = surf_usm_h(l)%surface_types(m)
    25662503             ENDDO
    25672504          ELSE
    2568              l = idsidx
    25692505             DO  m = 1, surf_usm_v(l)%ns
    25702506                i = surf_usm_v(l)%i(m)
     
    25782514!
    25792515!--       Transmissivity window tiles
    2580           IF ( idsint == iup )  THEN
    2581              DO  m = 1, surf_usm_h%ns
    2582                 i = surf_usm_h%i(m)
    2583                 j = surf_usm_h%j(m)
    2584                 k = surf_usm_h%k(m)
    2585                 temp_pf(k,j,i) = surf_usm_h%transmissivity(m)
     2516          IF ( horizontal )  THEN
     2517             DO  m = 1, surf_usm_h(l)%ns
     2518                i = surf_usm_h(l)%i(m)
     2519                j = surf_usm_h(l)%j(m)
     2520                k = surf_usm_h(l)%k(m)
     2521                temp_pf(k,j,i) = surf_usm_h(l)%transmissivity(m)
    25862522             ENDDO
    25872523          ELSE
    2588              l = idsidx
    25892524             DO  m = 1, surf_usm_v(l)%ns
    25902525                i = surf_usm_v(l)%i(m)
     
    25992534!--       Array of sensible heat flux from surfaces
    26002535          IF ( av == 0 )  THEN
    2601              IF ( idsint == iup )  THEN
    2602                 DO  m = 1, surf_usm_h%ns
    2603                    i = surf_usm_h%i(m)
    2604                    j = surf_usm_h%j(m)
    2605                    k = surf_usm_h%k(m)
    2606                    temp_pf(k,j,i) = surf_usm_h%wshf_eb(m)
     2536             IF ( horizontal )  THEN
     2537                DO  m = 1, surf_usm_h(l)%ns
     2538                   i = surf_usm_h(l)%i(m)
     2539                   j = surf_usm_h(l)%j(m)
     2540                   k = surf_usm_h(l)%k(m)
     2541                   temp_pf(k,j,i) = surf_usm_h(l)%wshf_eb(m)
    26072542                ENDDO
    26082543             ELSE
    2609                 l = idsidx
    26102544                DO  m = 1, surf_usm_v(l)%ns
    26112545                   i = surf_usm_v(l)%i(m)
     
    26162550             ENDIF
    26172551          ELSE
    2618              IF ( idsint == iup )  THEN
    2619                 DO  m = 1, surf_usm_h%ns
    2620                    i = surf_usm_h%i(m)
    2621                    j = surf_usm_h%j(m)
    2622                    k = surf_usm_h%k(m)
    2623                    temp_pf(k,j,i) = surf_usm_h%wshf_eb_av(m)
     2552             IF ( horizontal )  THEN
     2553                DO  m = 1, surf_usm_h(l)%ns
     2554                   i = surf_usm_h(l)%i(m)
     2555                   j = surf_usm_h(l)%j(m)
     2556                   k = surf_usm_h(l)%k(m)
     2557                   temp_pf(k,j,i) = surf_usm_h(l)%wshf_eb_av(m)
    26242558                ENDDO
    26252559             ELSE
    2626                 l = idsidx
    26272560                DO  m = 1, surf_usm_v(l)%ns
    26282561                   i = surf_usm_v(l)%i(m)
     
    26392572!--       Array of latent heat flux from surfaces
    26402573          IF ( av == 0 )  THEN
    2641              IF ( idsint == iup )  THEN
    2642                 DO  m = 1, surf_usm_h%ns
    2643                    i = surf_usm_h%i(m)
    2644                    j = surf_usm_h%j(m)
    2645                    k = surf_usm_h%k(m)
    2646                    temp_pf(k,j,i) = surf_usm_h%qsws(m) * l_v
     2574             IF ( horizontal )  THEN
     2575                DO  m = 1, surf_usm_h(l)%ns
     2576                   i = surf_usm_h(l)%i(m)
     2577                   j = surf_usm_h(l)%j(m)
     2578                   k = surf_usm_h(l)%k(m)
     2579                   temp_pf(k,j,i) = surf_usm_h(l)%qsws(m) * l_v
    26472580                ENDDO
    26482581             ELSE
    2649                 l = idsidx
    26502582                DO  m = 1, surf_usm_v(l)%ns
    26512583                   i = surf_usm_v(l)%i(m)
     
    26562588             ENDIF
    26572589          ELSE
    2658              IF ( idsint == iup )  THEN
    2659                 DO  m = 1, surf_usm_h%ns
    2660                    i = surf_usm_h%i(m)
    2661                    j = surf_usm_h%j(m)
    2662                    k = surf_usm_h%k(m)
    2663                    temp_pf(k,j,i) = surf_usm_h%qsws_av(m)
     2590             IF ( horizontal )  THEN
     2591                DO  m = 1, surf_usm_h(l)%ns
     2592                   i = surf_usm_h(l)%i(m)
     2593                   j = surf_usm_h(l)%j(m)
     2594                   k = surf_usm_h(l)%k(m)
     2595                   temp_pf(k,j,i) = surf_usm_h(l)%qsws_av(m)
    26642596                ENDDO
    26652597             ELSE
    2666                 l = idsidx
    26672598                DO  m = 1, surf_usm_v(l)%ns
    26682599                   i = surf_usm_v(l)%i(m)
     
    26782609!--       Array of latent heat flux from vegetation surfaces
    26792610          IF ( av == 0 )  THEN
    2680              IF ( idsint == iup )  THEN
    2681                 DO  m = 1, surf_usm_h%ns
    2682                    i = surf_usm_h%i(m)
    2683                    j = surf_usm_h%j(m)
    2684                    k = surf_usm_h%k(m)
    2685                    temp_pf(k,j,i) = surf_usm_h%qsws_veg(m)
     2611             IF ( horizontal )  THEN
     2612                DO  m = 1, surf_usm_h(l)%ns
     2613                   i = surf_usm_h(l)%i(m)
     2614                   j = surf_usm_h(l)%j(m)
     2615                   k = surf_usm_h(l)%k(m)
     2616                   temp_pf(k,j,i) = surf_usm_h(l)%qsws_veg(m)
    26862617                ENDDO
    26872618             ELSE
    2688                 l = idsidx
    26892619                DO  m = 1, surf_usm_v(l)%ns
    26902620                   i = surf_usm_v(l)%i(m)
     
    26952625             ENDIF
    26962626          ELSE
    2697              IF ( idsint == iup )  THEN
    2698                 DO  m = 1, surf_usm_h%ns
    2699                    i = surf_usm_h%i(m)
    2700                    j = surf_usm_h%j(m)
    2701                    k = surf_usm_h%k(m)
    2702                    temp_pf(k,j,i) = surf_usm_h%qsws_veg_av(m)
     2627             IF ( horizontal )  THEN
     2628                DO  m = 1, surf_usm_h(l)%ns
     2629                   i = surf_usm_h(l)%i(m)
     2630                   j = surf_usm_h(l)%j(m)
     2631                   k = surf_usm_h(l)%k(m)
     2632                   temp_pf(k,j,i) = surf_usm_h(l)%qsws_veg_av(m)
    27032633                ENDDO
    27042634             ELSE
    2705                 l = idsidx
    27062635                DO  m = 1, surf_usm_v(l)%ns
    27072636                   i = surf_usm_v(l)%i(m)
     
    27172646!--       Array of latent heat flux from surfaces with liquid
    27182647          IF ( av == 0 )  THEN
    2719              IF ( idsint == iup )  THEN
    2720                 DO  m = 1, surf_usm_h%ns
    2721                    i = surf_usm_h%i(m)
    2722                    j = surf_usm_h%j(m)
    2723                    k = surf_usm_h%k(m)
    2724                    temp_pf(k,j,i) = surf_usm_h%qsws_liq(m)
     2648             IF ( horizontal )  THEN
     2649                DO  m = 1, surf_usm_h(l)%ns
     2650                   i = surf_usm_h(l)%i(m)
     2651                   j = surf_usm_h(l)%j(m)
     2652                   k = surf_usm_h(l)%k(m)
     2653                   temp_pf(k,j,i) = surf_usm_h(l)%qsws_liq(m)
    27252654                ENDDO
    27262655             ELSE
    2727                 l = idsidx
    27282656                DO  m = 1, surf_usm_v(l)%ns
    27292657                   i = surf_usm_v(l)%i(m)
     
    27342662             ENDIF
    27352663          ELSE
    2736              IF ( idsint == iup )  THEN
    2737                 DO  m = 1, surf_usm_h%ns
    2738                    i = surf_usm_h%i(m)
    2739                    j = surf_usm_h%j(m)
    2740                    k = surf_usm_h%k(m)
    2741                    temp_pf(k,j,i) = surf_usm_h%qsws_liq_av(m)
     2664             IF ( horizontal )  THEN
     2665                DO  m = 1, surf_usm_h(l)%ns
     2666                   i = surf_usm_h(l)%i(m)
     2667                   j = surf_usm_h(l)%j(m)
     2668                   k = surf_usm_h(l)%k(m)
     2669                   temp_pf(k,j,i) = surf_usm_h(l)%qsws_liq_av(m)
    27422670                ENDDO
    27432671             ELSE
    2744                 l = idsidx
    27452672                DO  m = 1, surf_usm_v(l)%ns
    27462673                   i = surf_usm_v(l)%i(m)
     
    27562683!--       Array of heat flux from ground (land, wall, roof)
    27572684          IF ( av == 0 )  THEN
    2758              IF ( idsint == iup )  THEN
    2759                 DO  m = 1, surf_usm_h%ns
    2760                    i = surf_usm_h%i(m)
    2761                    j = surf_usm_h%j(m)
    2762                    k = surf_usm_h%k(m)
    2763                    temp_pf(k,j,i) = surf_usm_h%wghf_eb(m)
     2685             IF ( horizontal )  THEN
     2686                DO  m = 1, surf_usm_h(l)%ns
     2687                   i = surf_usm_h(l)%i(m)
     2688                   j = surf_usm_h(l)%j(m)
     2689                   k = surf_usm_h(l)%k(m)
     2690                   temp_pf(k,j,i) = surf_usm_h(l)%wghf_eb(m)
    27642691                ENDDO
    27652692             ELSE
    2766                 l = idsidx
    27672693                DO  m = 1, surf_usm_v(l)%ns
    27682694                   i = surf_usm_v(l)%i(m)
     
    27732699             ENDIF
    27742700          ELSE
    2775              IF ( idsint == iup )  THEN
    2776                 DO  m = 1, surf_usm_h%ns
    2777                    i = surf_usm_h%i(m)
    2778                    j = surf_usm_h%j(m)
    2779                    k = surf_usm_h%k(m)
    2780                    temp_pf(k,j,i) = surf_usm_h%wghf_eb_av(m)
     2701             IF ( horizontal )  THEN
     2702                DO  m = 1, surf_usm_h(l)%ns
     2703                   i = surf_usm_h(l)%i(m)
     2704                   j = surf_usm_h(l)%j(m)
     2705                   k = surf_usm_h(l)%k(m)
     2706                   temp_pf(k,j,i) = surf_usm_h(l)%wghf_eb_av(m)
    27812707                ENDDO
    27822708             ELSE
    2783                 l = idsidx
    27842709                DO  m = 1, surf_usm_v(l)%ns
    27852710                   i = surf_usm_v(l)%i(m)
     
    27952720!--       Array of heat flux from window ground (land, wall, roof)
    27962721          IF ( av == 0 )  THEN
    2797              IF ( idsint == iup )  THEN
    2798                 DO  m = 1, surf_usm_h%ns
    2799                    i = surf_usm_h%i(m)
    2800                    j = surf_usm_h%j(m)
    2801                    k = surf_usm_h%k(m)
    2802                    temp_pf(k,j,i) = surf_usm_h%wghf_eb_window(m)
     2722             IF ( horizontal )  THEN
     2723                DO  m = 1, surf_usm_h(l)%ns
     2724                   i = surf_usm_h(l)%i(m)
     2725                   j = surf_usm_h(l)%j(m)
     2726                   k = surf_usm_h(l)%k(m)
     2727                   temp_pf(k,j,i) = surf_usm_h(l)%wghf_eb_window(m)
    28032728                ENDDO
    28042729             ELSE
    2805                 l = idsidx
    28062730                DO  m = 1, surf_usm_v(l)%ns
    28072731                   i = surf_usm_v(l)%i(m)
     
    28122736             ENDIF
    28132737          ELSE
    2814              IF ( idsint == iup )  THEN
    2815                 DO  m = 1, surf_usm_h%ns
    2816                    i = surf_usm_h%i(m)
    2817                    j = surf_usm_h%j(m)
    2818                    k = surf_usm_h%k(m)
    2819                    temp_pf(k,j,i) = surf_usm_h%wghf_eb_window_av(m)
     2738             IF ( horizontal )  THEN
     2739                DO  m = 1, surf_usm_h(l)%ns
     2740                   i = surf_usm_h(l)%i(m)
     2741                   j = surf_usm_h(l)%j(m)
     2742                   k = surf_usm_h(l)%k(m)
     2743                   temp_pf(k,j,i) = surf_usm_h(l)%wghf_eb_window_av(m)
    28202744                ENDDO
    28212745             ELSE
    2822                 l = idsidx
    28232746                DO  m = 1, surf_usm_v(l)%ns
    28242747                   i = surf_usm_v(l)%i(m)
     
    28342757!--       Array of heat flux from green ground (land, wall, roof)
    28352758          IF ( av == 0 )  THEN
    2836              IF ( idsint == iup )  THEN
    2837                 DO  m = 1, surf_usm_h%ns
    2838                    i = surf_usm_h%i(m)
    2839                    j = surf_usm_h%j(m)
    2840                    k = surf_usm_h%k(m)
    2841                    temp_pf(k,j,i) = surf_usm_h%wghf_eb_green(m)
     2759             IF ( horizontal )  THEN
     2760                DO  m = 1, surf_usm_h(l)%ns
     2761                   i = surf_usm_h(l)%i(m)
     2762                   j = surf_usm_h(l)%j(m)
     2763                   k = surf_usm_h(l)%k(m)
     2764                   temp_pf(k,j,i) = surf_usm_h(l)%wghf_eb_green(m)
    28422765                ENDDO
    28432766             ELSE
     
    28512774             ENDIF
    28522775          ELSE
    2853              IF ( idsint == iup )  THEN
    2854                 DO  m = 1, surf_usm_h%ns
    2855                    i = surf_usm_h%i(m)
    2856                    j = surf_usm_h%j(m)
    2857                    k = surf_usm_h%k(m)
    2858                    temp_pf(k,j,i) = surf_usm_h%wghf_eb_green_av(m)
     2776             IF ( horizontal )  THEN
     2777                DO  m = 1, surf_usm_h(l)%ns
     2778                   i = surf_usm_h(l)%i(m)
     2779                   j = surf_usm_h(l)%j(m)
     2780                   k = surf_usm_h(l)%k(m)
     2781                   temp_pf(k,j,i) = surf_usm_h(l)%wghf_eb_green_av(m)
    28592782                ENDDO
    28602783             ELSE
    2861                 l = idsidx
    28622784                DO  m = 1, surf_usm_v(l)%ns
    28632785                   i = surf_usm_v(l)%i(m)
     
    28732795!--       Array of heat flux from indoor ground (land, wall, roof)
    28742796          IF ( av == 0 )  THEN
    2875              IF ( idsint == iup )  THEN
    2876                 DO  m = 1, surf_usm_h%ns
    2877                    i = surf_usm_h%i(m)
    2878                    j = surf_usm_h%j(m)
    2879                    k = surf_usm_h%k(m)
    2880                    temp_pf(k,j,i) = surf_usm_h%iwghf_eb(m)
     2797             IF ( horizontal )  THEN
     2798                DO  m = 1, surf_usm_h(l)%ns
     2799                   i = surf_usm_h(l)%i(m)
     2800                   j = surf_usm_h(l)%j(m)
     2801                   k = surf_usm_h(l)%k(m)
     2802                   temp_pf(k,j,i) = surf_usm_h(l)%iwghf_eb(m)
    28812803                ENDDO
    28822804             ELSE
    2883                 l = idsidx
    28842805                DO  m = 1, surf_usm_v(l)%ns
    28852806                   i = surf_usm_v(l)%i(m)
     
    28902811             ENDIF
    28912812          ELSE
    2892              IF ( idsint == iup )  THEN
    2893                 DO  m = 1, surf_usm_h%ns
    2894                    i = surf_usm_h%i(m)
    2895                    j = surf_usm_h%j(m)
    2896                    k = surf_usm_h%k(m)
    2897                    temp_pf(k,j,i) = surf_usm_h%iwghf_eb_av(m)
     2813             IF ( horizontal )  THEN
     2814                DO  m = 1, surf_usm_h(l)%ns
     2815                   i = surf_usm_h(l)%i(m)
     2816                   j = surf_usm_h(l)%j(m)
     2817                   k = surf_usm_h(l)%k(m)
     2818                   temp_pf(k,j,i) = surf_usm_h(l)%iwghf_eb_av(m)
    28982819                ENDDO
    28992820             ELSE
    2900                 l = idsidx
    29012821                DO  m = 1, surf_usm_v(l)%ns
    29022822                   i = surf_usm_v(l)%i(m)
     
    29122832!--       Array of heat flux from indoor window ground (land, wall, roof)
    29132833          IF ( av == 0 )  THEN
    2914              IF ( idsint == iup )  THEN
    2915                 DO  m = 1, surf_usm_h%ns
    2916                    i = surf_usm_h%i(m)
    2917                    j = surf_usm_h%j(m)
    2918                    k = surf_usm_h%k(m)
    2919                    temp_pf(k,j,i) = surf_usm_h%iwghf_eb_window(m)
     2834             IF ( horizontal )  THEN
     2835                DO  m = 1, surf_usm_h(l)%ns
     2836                   i = surf_usm_h(l)%i(m)
     2837                   j = surf_usm_h(l)%j(m)
     2838                   k = surf_usm_h(l)%k(m)
     2839                   temp_pf(k,j,i) = surf_usm_h(l)%iwghf_eb_window(m)
    29202840                ENDDO
    29212841             ELSE
    2922                 l = idsidx
    29232842                DO  m = 1, surf_usm_v(l)%ns
    29242843                   i = surf_usm_v(l)%i(m)
     
    29292848             ENDIF
    29302849          ELSE
    2931              IF ( idsint == iup )  THEN
    2932                 DO  m = 1, surf_usm_h%ns
    2933                    i = surf_usm_h%i(m)
    2934                    j = surf_usm_h%j(m)
    2935                    k = surf_usm_h%k(m)
    2936                    temp_pf(k,j,i) = surf_usm_h%iwghf_eb_window_av(m)
     2850             IF ( horizontal )  THEN
     2851                DO  m = 1, surf_usm_h(l)%ns
     2852                   i = surf_usm_h(l)%i(m)
     2853                   j = surf_usm_h(l)%j(m)
     2854                   k = surf_usm_h(l)%k(m)
     2855                   temp_pf(k,j,i) = surf_usm_h(l)%iwghf_eb_window_av(m)
    29372856                ENDDO
    29382857             ELSE
    2939                 l = idsidx
    29402858                DO  m = 1, surf_usm_v(l)%ns
    29412859                   i = surf_usm_v(l)%i(m)
     
    29512869!--       Surface temperature for surfaces
    29522870          IF ( av == 0 )  THEN
    2953              IF ( idsint == iup )  THEN
    2954                 DO  m = 1, surf_usm_h%ns
    2955                    i = surf_usm_h%i(m)
    2956                    j = surf_usm_h%j(m)
    2957                    k = surf_usm_h%k(m)
    2958                    temp_pf(k,j,i) = t_surf_wall_h(m)
     2871             IF ( horizontal )  THEN
     2872                DO  m = 1, surf_usm_h(l)%ns
     2873                   i = surf_usm_h(l)%i(m)
     2874                   j = surf_usm_h(l)%j(m)
     2875                   k = surf_usm_h(l)%k(m)
     2876                   temp_pf(k,j,i) = t_surf_wall_h(l)%val(m)
    29592877                ENDDO
    29602878             ELSE
    2961                 l = idsidx
    29622879                DO  m = 1, surf_usm_v(l)%ns
    29632880                   i = surf_usm_v(l)%i(m)
    29642881                   j = surf_usm_v(l)%j(m)
    29652882                   k = surf_usm_v(l)%k(m)
    2966                    temp_pf(k,j,i) = t_surf_wall_v(l)%t(m)
     2883                   temp_pf(k,j,i) = t_surf_wall_v(l)%val(m)
    29672884                ENDDO
    29682885             ENDIF
    29692886          ELSE
    2970              IF ( idsint == iup )  THEN
    2971                 DO  m = 1, surf_usm_h%ns
    2972                    i = surf_usm_h%i(m)
    2973                    j = surf_usm_h%j(m)
    2974                    k = surf_usm_h%k(m)
    2975                    temp_pf(k,j,i) = surf_usm_h%t_surf_wall_av(m)
     2887             IF ( horizontal )  THEN
     2888                DO  m = 1, surf_usm_h(l)%ns
     2889                   i = surf_usm_h(l)%i(m)
     2890                   j = surf_usm_h(l)%j(m)
     2891                   k = surf_usm_h(l)%k(m)
     2892                   temp_pf(k,j,i) = surf_usm_h(l)%t_surf_wall_av(m)
    29762893                ENDDO
    29772894             ELSE
    2978                 l = idsidx
    29792895                DO  m = 1, surf_usm_v(l)%ns
    29802896                   i = surf_usm_v(l)%i(m)
     
    29902906!--       Surface temperature for window surfaces
    29912907          IF ( av == 0 )  THEN
    2992              IF ( idsint == iup )  THEN
    2993                 DO  m = 1, surf_usm_h%ns
    2994                    i = surf_usm_h%i(m)
    2995                    j = surf_usm_h%j(m)
    2996                    k = surf_usm_h%k(m)
    2997                    temp_pf(k,j,i) = t_surf_window_h(m)
     2908             IF ( horizontal )  THEN
     2909                DO  m = 1, surf_usm_h(l)%ns
     2910                   i = surf_usm_h(l)%i(m)
     2911                   j = surf_usm_h(l)%j(m)
     2912                   k = surf_usm_h(l)%k(m)
     2913                   temp_pf(k,j,i) = t_surf_window_h(l)%val(m)
    29982914                ENDDO
    29992915             ELSE
    3000                 l = idsidx
    30012916                DO  m = 1, surf_usm_v(l)%ns
    30022917                   i = surf_usm_v(l)%i(m)
    30032918                   j = surf_usm_v(l)%j(m)
    30042919                   k = surf_usm_v(l)%k(m)
    3005                    temp_pf(k,j,i) = t_surf_window_v(l)%t(m)
     2920                   temp_pf(k,j,i) = t_surf_window_v(l)%val(m)
    30062921                ENDDO
    30072922             ENDIF
    30082923
    30092924          ELSE
    3010              IF ( idsint == iup )  THEN
    3011                 DO  m = 1, surf_usm_h%ns
    3012                    i = surf_usm_h%i(m)
    3013                    j = surf_usm_h%j(m)
    3014                    k = surf_usm_h%k(m)
    3015                    temp_pf(k,j,i) = surf_usm_h%t_surf_window_av(m)
     2925             IF ( horizontal )  THEN
     2926                DO  m = 1, surf_usm_h(l)%ns
     2927                   i = surf_usm_h(l)%i(m)
     2928                   j = surf_usm_h(l)%j(m)
     2929                   k = surf_usm_h(l)%k(m)
     2930                   temp_pf(k,j,i) = surf_usm_h(l)%t_surf_window_av(m)
    30162931                ENDDO
    30172932             ELSE
    3018                 l = idsidx
    30192933                DO  m = 1, surf_usm_v(l)%ns
    30202934                   i = surf_usm_v(l)%i(m)
     
    30322946!--       Surface temperature for green surfaces
    30332947          IF ( av == 0 )  THEN
    3034              IF ( idsint == iup )  THEN
    3035                 DO  m = 1, surf_usm_h%ns
    3036                    i = surf_usm_h%i(m)
    3037                    j = surf_usm_h%j(m)
    3038                    k = surf_usm_h%k(m)
    3039                    temp_pf(k,j,i) = t_surf_green_h(m)
     2948             IF ( horizontal )  THEN
     2949                DO  m = 1, surf_usm_h(l)%ns
     2950                   i = surf_usm_h(l)%i(m)
     2951                   j = surf_usm_h(l)%j(m)
     2952                   k = surf_usm_h(l)%k(m)
     2953                   temp_pf(k,j,i) = t_surf_green_h(l)%val(m)
    30402954                ENDDO
    30412955             ELSE
    3042                 l = idsidx
    30432956                DO  m = 1, surf_usm_v(l)%ns
    30442957                   i = surf_usm_v(l)%i(m)
    30452958                   j = surf_usm_v(l)%j(m)
    30462959                   k = surf_usm_v(l)%k(m)
    3047                    temp_pf(k,j,i) = t_surf_green_v(l)%t(m)
     2960                   temp_pf(k,j,i) = t_surf_green_v(l)%val(m)
    30482961                ENDDO
    30492962             ENDIF
    30502963
    30512964          ELSE
    3052              IF ( idsint == iup )  THEN
    3053                 DO  m = 1, surf_usm_h%ns
    3054                    i = surf_usm_h%i(m)
    3055                    j = surf_usm_h%j(m)
    3056                    k = surf_usm_h%k(m)
    3057                    temp_pf(k,j,i) = surf_usm_h%t_surf_green_av(m)
     2965             IF ( horizontal )  THEN
     2966                DO  m = 1, surf_usm_h(l)%ns
     2967                   i = surf_usm_h(l)%i(m)
     2968                   j = surf_usm_h(l)%j(m)
     2969                   k = surf_usm_h(l)%k(m)
     2970                   temp_pf(k,j,i) = surf_usm_h(l)%t_surf_green_av(m)
    30582971                ENDDO
    30592972             ELSE
    3060                 l = idsidx
    30612973                DO  m = 1, surf_usm_v(l)%ns
    30622974                   i = surf_usm_v(l)%i(m)
     
    30742986!--       Near surface temperature for whole surfaces
    30752987          IF ( av == 0 )  THEN
    3076              IF ( idsint == iup )  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%pt_10cm(m)
     2988             IF ( horizontal )  THEN
     2989                DO  m = 1, surf_usm_h(l)%ns
     2990                   i = surf_usm_h(l)%i(m)
     2991                   j = surf_usm_h(l)%j(m)
     2992                   k = surf_usm_h(l)%k(m)
     2993                   temp_pf(k,j,i) = surf_usm_h(l)%pt_10cm(m)
    30822994                ENDDO
    30832995             ELSE
    3084                 l = idsidx
    30852996                DO  m = 1, surf_usm_v(l)%ns
    30862997                   i = surf_usm_v(l)%i(m)
     
    30933004
    30943005          ELSE
    3095              IF ( idsint == iup )  THEN
    3096                 DO  m = 1, surf_usm_h%ns
    3097                    i = surf_usm_h%i(m)
    3098                    j = surf_usm_h%j(m)
    3099                    k = surf_usm_h%k(m)
    3100                    temp_pf(k,j,i) = surf_usm_h%pt_10cm_av(m)
     3006             IF ( horizontal )  THEN
     3007                DO  m = 1, surf_usm_h(l)%ns
     3008                   i = surf_usm_h(l)%i(m)
     3009                   j = surf_usm_h(l)%j(m)
     3010                   k = surf_usm_h(l)%k(m)
     3011                   temp_pf(k,j,i) = surf_usm_h(l)%pt_10cm_av(m)
    31013012                ENDDO
    31023013             ELSE
    3103                 l = idsidx
    31043014                DO  m = 1, surf_usm_v(l)%ns
    31053015                   i = surf_usm_v(l)%i(m)
     
    31163026!--       Wall temperature for  iwl layer of walls and land
    31173027          IF ( av == 0 )  THEN
    3118              IF ( idsint == iup )  THEN
    3119                 DO  m = 1, surf_usm_h%ns
    3120                    i = surf_usm_h%i(m)
    3121                    j = surf_usm_h%j(m)
    3122                    k = surf_usm_h%k(m)
    3123                    temp_pf(k,j,i) = t_wall_h(iwl,m)
     3028             IF ( horizontal )  THEN
     3029                DO  m = 1, surf_usm_h(l)%ns
     3030                   i = surf_usm_h(l)%i(m)
     3031                   j = surf_usm_h(l)%j(m)
     3032                   k = surf_usm_h(l)%k(m)
     3033                   temp_pf(k,j,i) = t_wall_h(l)%val(iwl,m)
    31243034                ENDDO
    31253035             ELSE
    3126                 l = idsidx
    31273036                DO  m = 1, surf_usm_v(l)%ns
    31283037                   i = surf_usm_v(l)%i(m)
    31293038                   j = surf_usm_v(l)%j(m)
    31303039                   k = surf_usm_v(l)%k(m)
    3131                    temp_pf(k,j,i) = t_wall_v(l)%t(iwl,m)
     3040                   temp_pf(k,j,i) = t_wall_v(l)%val(iwl,m)
    31323041                ENDDO
    31333042             ENDIF
    31343043          ELSE
    3135              IF ( idsint == iup )  THEN
    3136                 DO  m = 1, surf_usm_h%ns
    3137                    i = surf_usm_h%i(m)
    3138                    j = surf_usm_h%j(m)
    3139                    k = surf_usm_h%k(m)
    3140                    temp_pf(k,j,i) = surf_usm_h%t_wall_av(iwl,m)
     3044             IF ( horizontal )  THEN
     3045                DO  m = 1, surf_usm_h(l)%ns
     3046                   i = surf_usm_h(l)%i(m)
     3047                   j = surf_usm_h(l)%j(m)
     3048                   k = surf_usm_h(l)%k(m)
     3049                   temp_pf(k,j,i) = surf_usm_h(l)%t_wall_av(iwl,m)
    31413050                ENDDO
    31423051             ELSE
    3143                 l = idsidx
    31443052                DO  m = 1, surf_usm_v(l)%ns
    31453053                   i = surf_usm_v(l)%i(m)
     
    31553063!--       Window temperature for iwl layer of walls and land
    31563064          IF ( av == 0 )  THEN
    3157              IF ( idsint == iup )  THEN
    3158                 DO  m = 1, surf_usm_h%ns
    3159                    i = surf_usm_h%i(m)
    3160                    j = surf_usm_h%j(m)
    3161                    k = surf_usm_h%k(m)
    3162                    temp_pf(k,j,i) = t_window_h(iwl,m)
     3065             IF ( horizontal )  THEN
     3066                DO  m = 1, surf_usm_h(l)%ns
     3067                   i = surf_usm_h(l)%i(m)
     3068                   j = surf_usm_h(l)%j(m)
     3069                   k = surf_usm_h(l)%k(m)
     3070                   temp_pf(k,j,i) = t_window_h(l)%val(iwl,m)
    31633071                ENDDO
    31643072             ELSE
    3165                 l = idsidx
    31663073                DO  m = 1, surf_usm_v(l)%ns
    31673074                   i = surf_usm_v(l)%i(m)
    31683075                   j = surf_usm_v(l)%j(m)
    31693076                   k = surf_usm_v(l)%k(m)
    3170                    temp_pf(k,j,i) = t_window_v(l)%t(iwl,m)
     3077                   temp_pf(k,j,i) = t_window_v(l)%val(iwl,m)
    31713078                ENDDO
    31723079             ENDIF
    31733080          ELSE
    3174              IF ( idsint == iup )  THEN
    3175                 DO  m = 1, surf_usm_h%ns
    3176                    i = surf_usm_h%i(m)
    3177                    j = surf_usm_h%j(m)
    3178                    k = surf_usm_h%k(m)
    3179                    temp_pf(k,j,i) = surf_usm_h%t_window_av(iwl,m)
     3081             IF ( horizontal )  THEN
     3082                DO  m = 1, surf_usm_h(l)%ns
     3083                   i = surf_usm_h(l)%i(m)
     3084                   j = surf_usm_h(l)%j(m)
     3085                   k = surf_usm_h(l)%k(m)
     3086                   temp_pf(k,j,i) = surf_usm_h(l)%t_window_av(iwl,m)
    31803087                ENDDO
    31813088             ELSE
    3182                 l = idsidx
    31833089                DO  m = 1, surf_usm_v(l)%ns
    31843090                   i = surf_usm_v(l)%i(m)
     
    31943100!--       Green temperature for  iwl layer of walls and land
    31953101          IF ( av == 0 )  THEN
    3196              IF ( idsint == iup )  THEN
    3197                 DO  m = 1, surf_usm_h%ns
    3198                    i = surf_usm_h%i(m)
    3199                    j = surf_usm_h%j(m)
    3200                    k = surf_usm_h%k(m)
    3201                    temp_pf(k,j,i) = t_green_h(iwl,m)
     3102             IF ( horizontal )  THEN
     3103                DO  m = 1, surf_usm_h(l)%ns
     3104                   i = surf_usm_h(l)%i(m)
     3105                   j = surf_usm_h(l)%j(m)
     3106                   k = surf_usm_h(l)%k(m)
     3107                   temp_pf(k,j,i) = t_green_h(l)%val(iwl,m)
    32023108                ENDDO
    32033109             ELSE
    3204                 l = idsidx
    32053110                DO  m = 1, surf_usm_v(l)%ns
    32063111                   i = surf_usm_v(l)%i(m)
    32073112                   j = surf_usm_v(l)%j(m)
    32083113                   k = surf_usm_v(l)%k(m)
    3209                    temp_pf(k,j,i) = t_green_v(l)%t(iwl,m)
     3114                   temp_pf(k,j,i) = t_green_v(l)%val(iwl,m)
    32103115                ENDDO
    32113116             ENDIF
    32123117          ELSE
    3213              IF ( idsint == iup )  THEN
    3214                 DO  m = 1, surf_usm_h%ns
    3215                    i = surf_usm_h%i(m)
    3216                    j = surf_usm_h%j(m)
    3217                    k = surf_usm_h%k(m)
    3218                    temp_pf(k,j,i) = surf_usm_h%t_green_av(iwl,m)
     3118             IF ( horizontal )  THEN
     3119                DO  m = 1, surf_usm_h(l)%ns
     3120                   i = surf_usm_h(l)%i(m)
     3121                   j = surf_usm_h(l)%j(m)
     3122                   k = surf_usm_h(l)%k(m)
     3123                   temp_pf(k,j,i) = surf_usm_h(l)%t_green_av(iwl,m)
    32193124                ENDDO
    32203125             ELSE
    3221                 l = idsidx
    32223126                DO  m = 1, surf_usm_v(l)%ns
    32233127                   i = surf_usm_v(l)%i(m)
     
    32333137!--       Soil water content for  iwl layer of walls and land
    32343138          IF ( av == 0 )  THEN
    3235              IF ( idsint == iup )  THEN
    3236                 DO  m = 1, surf_usm_h%ns
    3237                    i = surf_usm_h%i(m)
    3238                    j = surf_usm_h%j(m)
    3239                    k = surf_usm_h%k(m)
    3240                    temp_pf(k,j,i) = swc_h(iwl,m)
     3139             IF ( horizontal )  THEN
     3140                DO  m = 1, surf_usm_h(l)%ns
     3141                   i = surf_usm_h(l)%i(m)
     3142                   j = surf_usm_h(l)%j(m)
     3143                   k = surf_usm_h(l)%k(m)
     3144                   temp_pf(k,j,i) = swc_h(l)%val(iwl,m)
     3145                ENDDO
     3146             ENDIF
     3147          ELSE
     3148             IF ( horizontal )  THEN
     3149                DO  m = 1, surf_usm_h(l)%ns
     3150                   i = surf_usm_h(l)%i(m)
     3151                   j = surf_usm_h(l)%j(m)
     3152                   k = surf_usm_h(l)%k(m)
     3153                   temp_pf(k,j,i) = surf_usm_h(l)%swc_av(iwl,m)
    32413154                ENDDO
    32423155             ELSE
    3243 
    3244              ENDIF
    3245           ELSE
    3246              IF ( idsint == iup )  THEN
    3247                 DO  m = 1, surf_usm_h%ns
    3248                    i = surf_usm_h%i(m)
    3249                    j = surf_usm_h%j(m)
    3250                    k = surf_usm_h%k(m)
    3251                    temp_pf(k,j,i) = surf_usm_h%swc_av(iwl,m)
    3252                 ENDDO
    3253              ELSE
    3254                 l = idsidx
    32553156                DO  m = 1, surf_usm_v(l)%ns
    32563157                   i = surf_usm_v(l)%i(m)
     
    33343235!> Initialization of the wall surface model
    33353236!--------------------------------------------------------------------------------------------------!
    3336  SUBROUTINE usm_init_material_model
     3237 SUBROUTINE usm_init_wall_heat_model
    33373238
    33383239    IMPLICIT NONE
     
    33403241    INTEGER(iwp) ::  k, l, m  !< running indices
    33413242
    3342     IF ( debug_output )  CALL debug_message( 'usm_init_material_model', 'start' )
     3243    IF ( debug_output )  CALL debug_message( 'usm_init_wall_heat_model', 'start' )
    33433244
    33443245!
     
    33463247!-- wall layers.
    33473248!-- First for horizontal surfaces:
    3348     DO  m = 1, surf_usm_h%ns
    3349 
    3350        surf_usm_h%dz_wall(nzb_wall,m) = surf_usm_h%zw(nzb_wall,m)
    3351        DO k = nzb_wall+1, nzt_wall
    3352           surf_usm_h%dz_wall(k,m) = surf_usm_h%zw(k,m) - surf_usm_h%zw(k-1,m)
     3249    DO  l = 0, 1
     3250       DO  m = 1, surf_usm_h(l)%ns
     3251
     3252          surf_usm_h(l)%dz_wall(nzb_wall,m) = surf_usm_h(l)%zw(nzb_wall,m)
     3253          DO k = nzb_wall+1, nzt_wall
     3254             surf_usm_h(l)%dz_wall(k,m) = surf_usm_h(l)%zw(k,m) - surf_usm_h(l)%zw(k-1,m)
     3255          ENDDO
     3256          surf_usm_h(l)%dz_window(nzb_wall,m) = surf_usm_h(l)%zw_window(nzb_wall,m)
     3257          DO  k = nzb_wall+1, nzt_wall
     3258             surf_usm_h(l)%dz_window(k,m) = surf_usm_h(l)%zw_window(k,m) - surf_usm_h(l)%zw_window(k-1,m)
     3259          ENDDO
     3260
     3261          surf_usm_h(l)%dz_wall(nzt_wall+1,m) = surf_usm_h(l)%dz_wall(nzt_wall,m)
     3262
     3263          DO k = nzb_wall, nzt_wall-1
     3264            surf_usm_h(l)%dz_wall_stag(k,m) = 0.5 * ( surf_usm_h(l)%dz_wall(k+1,m) +                        &
     3265                                                     surf_usm_h(l)%dz_wall(k,m) )
     3266          ENDDO
     3267          surf_usm_h(l)%dz_wall_stag(nzt_wall,m) = surf_usm_h(l)%dz_wall(nzt_wall,m)
     3268
     3269          surf_usm_h(l)%dz_window(nzt_wall+1,m) = surf_usm_h(l)%dz_window(nzt_wall,m)
     3270
     3271          DO  k = nzb_wall, nzt_wall-1
     3272             surf_usm_h(l)%dz_window_stag(k,m) = 0.5 * ( surf_usm_h(l)%dz_window(k+1,m) +                   &
     3273                                                      surf_usm_h(l)%dz_window(k,m) )
     3274          ENDDO
     3275          surf_usm_h(l)%dz_window_stag(nzt_wall,m) = surf_usm_h(l)%dz_window(nzt_wall,m)
     3276
     3277          IF (surf_usm_h(l)%green_type_roof(m) == 2.0_wp )  THEN
     3278!
     3279!--          Extensive green roof
     3280!--          Set ratio of substrate layer thickness, soil-type and LAI
     3281             soil_type = 3
     3282             surf_usm_h(l)%lai(m) = 2.0_wp
     3283
     3284             surf_usm_h(l)%zw_green(nzb_wall,m)   = 0.05_wp
     3285             surf_usm_h(l)%zw_green(nzb_wall+1,m) = 0.10_wp
     3286             surf_usm_h(l)%zw_green(nzb_wall+2,m) = 0.15_wp
     3287             surf_usm_h(l)%zw_green(nzb_wall+3,m) = 0.20_wp
     3288          ELSE
     3289!
     3290!--          Intensiv green roof
     3291!--          Set ratio of substrate layer thickness, soil-type and LAI
     3292             soil_type = 6
     3293             surf_usm_h(l)%lai(m) = 4.0_wp
     3294
     3295             surf_usm_h(l)%zw_green(nzb_wall,m)   = 0.05_wp
     3296             surf_usm_h(l)%zw_green(nzb_wall+1,m) = 0.10_wp
     3297             surf_usm_h(l)%zw_green(nzb_wall+2,m) = 0.40_wp
     3298             surf_usm_h(l)%zw_green(nzb_wall+3,m) = 0.80_wp
     3299          ENDIF
     3300
     3301          surf_usm_h(l)%dz_green(nzb_wall,m) = surf_usm_h(l)%zw_green(nzb_wall,m)
     3302          DO k = nzb_wall+1, nzt_wall
     3303              surf_usm_h(l)%dz_green(k,m) = surf_usm_h(l)%zw_green(k,m) - surf_usm_h(l)%zw_green(k-1,m)
     3304          ENDDO
     3305          surf_usm_h(l)%dz_green(nzt_wall+1,m) = surf_usm_h(l)%dz_green(nzt_wall,m)
     3306
     3307          DO k = nzb_wall, nzt_wall-1
     3308              surf_usm_h(l)%dz_green_stag(k,m) = 0.5 * ( surf_usm_h(l)%dz_green(k+1,m) +                    &
     3309                                                      surf_usm_h(l)%dz_green(k,m) )
     3310          ENDDO
     3311          surf_usm_h(l)%dz_green_stag(nzt_wall,m) = surf_usm_h(l)%dz_green(nzt_wall,m)
     3312
     3313         IF ( alpha_vangenuchten == 9999999.9_wp )  THEN
     3314            alpha_vangenuchten = soil_pars(0,soil_type)
     3315         ENDIF
     3316
     3317         IF ( l_vangenuchten == 9999999.9_wp )  THEN
     3318            l_vangenuchten = soil_pars(1,soil_type)
     3319         ENDIF
     3320
     3321         IF ( n_vangenuchten == 9999999.9_wp )  THEN
     3322            n_vangenuchten = soil_pars(2,soil_type)
     3323         ENDIF
     3324
     3325         IF ( hydraulic_conductivity == 9999999.9_wp )  THEN
     3326            hydraulic_conductivity = soil_pars(3,soil_type)
     3327         ENDIF
     3328
     3329         IF ( saturation_moisture == 9999999.9_wp )  THEN
     3330            saturation_moisture = m_soil_pars(0,soil_type)
     3331         ENDIF
     3332
     3333         IF ( field_capacity == 9999999.9_wp )  THEN
     3334            field_capacity = m_soil_pars(1,soil_type)
     3335         ENDIF
     3336
     3337         IF ( wilting_point == 9999999.9_wp )  THEN
     3338            wilting_point = m_soil_pars(2,soil_type)
     3339         ENDIF
     3340
     3341         IF ( residual_moisture == 9999999.9_wp )  THEN
     3342            residual_moisture = m_soil_pars(3,soil_type)
     3343         ENDIF
     3344
     3345         DO  k = nzb_wall, nzt_wall+1
     3346            swc_h(l)%val(k,m) = field_capacity
     3347            rootfr_h(l)%val(k,m) = 0.5_wp
     3348            surf_usm_h(l)%alpha_vg_green(m)      = alpha_vangenuchten
     3349            surf_usm_h(l)%l_vg_green(m)          = l_vangenuchten
     3350            surf_usm_h(l)%n_vg_green(m)          = n_vangenuchten
     3351            surf_usm_h(l)%gamma_w_green_sat(k,m) = hydraulic_conductivity
     3352            swc_sat_h(l)%val(k,m)                = saturation_moisture
     3353            fc_h(l)%val(k,m)                     = field_capacity
     3354            wilt_h(l)%val(k,m)                   = wilting_point
     3355            swc_res_h(l)%val(k,m)                = residual_moisture
     3356         ENDDO
     3357
    33533358       ENDDO
    3354        surf_usm_h%dz_window(nzb_wall,m) = surf_usm_h%zw_window(nzb_wall,m)
    3355        DO  k = nzb_wall+1, nzt_wall
    3356           surf_usm_h%dz_window(k,m) = surf_usm_h%zw_window(k,m) - surf_usm_h%zw_window(k-1,m)
    3357        ENDDO
    3358 
    3359        surf_usm_h%dz_wall(nzt_wall+1,m) = surf_usm_h%dz_wall(nzt_wall,m)
    3360 
    3361        DO k = nzb_wall, nzt_wall-1
    3362          surf_usm_h%dz_wall_stag(k,m) = 0.5 * ( surf_usm_h%dz_wall(k+1,m) +                        &
    3363                                                   surf_usm_h%dz_wall(k,m) )
    3364        ENDDO
    3365        surf_usm_h%dz_wall_stag(nzt_wall,m) = surf_usm_h%dz_wall(nzt_wall,m)
    3366 
    3367        surf_usm_h%dz_window(nzt_wall+1,m) = surf_usm_h%dz_window(nzt_wall,m)
    3368 
    3369        DO  k = nzb_wall, nzt_wall-1
    3370           surf_usm_h%dz_window_stag(k,m) = 0.5 * ( surf_usm_h%dz_window(k+1,m) +                   &
    3371                                                    surf_usm_h%dz_window(k,m) )
    3372        ENDDO
    3373        surf_usm_h%dz_window_stag(nzt_wall,m) = surf_usm_h%dz_window(nzt_wall,m)
    3374 
    3375        IF (surf_usm_h%green_type_roof(m) == 2.0_wp )  THEN
    3376 !
    3377 !-- Extensive green roof
    3378 !-- Set ratio of substrate layer thickness, soil-type and LAI
    3379           soil_type = 3
    3380           surf_usm_h%lai(m) = 2.0_wp
    3381 
    3382           surf_usm_h%zw_green(nzb_wall,m)   = 0.05_wp
    3383           surf_usm_h%zw_green(nzb_wall+1,m) = 0.10_wp
    3384           surf_usm_h%zw_green(nzb_wall+2,m) = 0.15_wp
    3385           surf_usm_h%zw_green(nzb_wall+3,m) = 0.20_wp
    3386        ELSE
    3387 !
    3388 !-- Intensiv green roof
    3389 !-- Set ratio of substrate layer thickness, soil-type and LAI
    3390           soil_type = 6
    3391           surf_usm_h%lai(m) = 4.0_wp
    3392 
    3393           surf_usm_h%zw_green(nzb_wall,m)   = 0.05_wp
    3394           surf_usm_h%zw_green(nzb_wall+1,m) = 0.10_wp
    3395           surf_usm_h%zw_green(nzb_wall+2,m) = 0.40_wp
    3396           surf_usm_h%zw_green(nzb_wall+3,m) = 0.80_wp
    3397        ENDIF
    3398 
    3399        surf_usm_h%dz_green(nzb_wall,m) = surf_usm_h%zw_green(nzb_wall,m)
    3400        DO k = nzb_wall+1, nzt_wall
    3401            surf_usm_h%dz_green(k,m) = surf_usm_h%zw_green(k,m) - surf_usm_h%zw_green(k-1,m)
    3402        ENDDO
    3403        surf_usm_h%dz_green(nzt_wall+1,m) = surf_usm_h%dz_green(nzt_wall,m)
    3404 
    3405        DO k = nzb_wall, nzt_wall-1
    3406            surf_usm_h%dz_green_stag(k,m) = 0.5 * ( surf_usm_h%dz_green(k+1,m) +                    &
    3407                                                    surf_usm_h%dz_green(k,m) )
    3408        ENDDO
    3409        surf_usm_h%dz_green_stag(nzt_wall,m) = surf_usm_h%dz_green(nzt_wall,m)
    3410 
    3411       IF ( alpha_vangenuchten == 9999999.9_wp )  THEN
    3412          alpha_vangenuchten = soil_pars(0,soil_type)
    3413       ENDIF
    3414 
    3415       IF ( l_vangenuchten == 9999999.9_wp )  THEN
    3416          l_vangenuchten = soil_pars(1,soil_type)
    3417       ENDIF
    3418 
    3419       IF ( n_vangenuchten == 9999999.9_wp )  THEN
    3420          n_vangenuchten = soil_pars(2,soil_type)
    3421       ENDIF
    3422 
    3423       IF ( hydraulic_conductivity == 9999999.9_wp )  THEN
    3424          hydraulic_conductivity = soil_pars(3,soil_type)
    3425       ENDIF
    3426 
    3427       IF ( saturation_moisture == 9999999.9_wp )  THEN
    3428          saturation_moisture = m_soil_pars(0,soil_type)
    3429       ENDIF
    3430 
    3431       IF ( field_capacity == 9999999.9_wp )  THEN
    3432          field_capacity = m_soil_pars(1,soil_type)
    3433       ENDIF
    3434 
    3435       IF ( wilting_point == 9999999.9_wp )  THEN
    3436          wilting_point = m_soil_pars(2,soil_type)
    3437       ENDIF
    3438 
    3439       IF ( residual_moisture == 9999999.9_wp )  THEN
    3440          residual_moisture = m_soil_pars(3,soil_type)
    3441       ENDIF
    3442 
    3443       DO  k = nzb_wall, nzt_wall+1
    3444          swc_h(k,m) = field_capacity
    3445          rootfr_h(k,m) = 0.5_wp
    3446          surf_usm_h%alpha_vg_green(m)      = alpha_vangenuchten
    3447          surf_usm_h%l_vg_green(m)          = l_vangenuchten
    3448          surf_usm_h%n_vg_green(m)          = n_vangenuchten
    3449          surf_usm_h%gamma_w_green_sat(k,m) = hydraulic_conductivity
    3450          swc_sat_h(k,m)                    = saturation_moisture
    3451          fc_h(k,m)                         = field_capacity
    3452          wilt_h(k,m)                       = wilting_point
    3453          swc_res_h(k,m)                    = residual_moisture
    3454       ENDDO
    3455 
     3359
     3360       surf_usm_h(l)%ddz_wall        = 1.0_wp / surf_usm_h(l)%dz_wall
     3361       surf_usm_h(l)%ddz_wall_stag   = 1.0_wp / surf_usm_h(l)%dz_wall_stag
     3362       surf_usm_h(l)%ddz_window      = 1.0_wp / surf_usm_h(l)%dz_window
     3363       surf_usm_h(l)%ddz_window_stag = 1.0_wp / surf_usm_h(l)%dz_window_stag
     3364       surf_usm_h(l)%ddz_green       = 1.0_wp / surf_usm_h(l)%dz_green
     3365       surf_usm_h(l)%ddz_green_stag  = 1.0_wp / surf_usm_h(l)%dz_green_stag
    34563366    ENDDO
    3457 
    3458     surf_usm_h%ddz_wall        = 1.0_wp / surf_usm_h%dz_wall
    3459     surf_usm_h%ddz_wall_stag   = 1.0_wp / surf_usm_h%dz_wall_stag
    3460     surf_usm_h%ddz_window      = 1.0_wp / surf_usm_h%dz_window
    3461     surf_usm_h%ddz_window_stag = 1.0_wp / surf_usm_h%dz_window_stag
    3462     surf_usm_h%ddz_green       = 1.0_wp / surf_usm_h%dz_green
    3463     surf_usm_h%ddz_green_stag  = 1.0_wp / surf_usm_h%dz_green_stag
    34643367!
    34653368!-- For vertical surfaces
     
    35123415
    35133416
    3514     IF ( debug_output )  CALL debug_message( 'usm_init_material_model', 'end' )
    3515 
    3516  END SUBROUTINE usm_init_material_model
     3417    IF ( debug_output )  CALL debug_message( 'usm_init_wall_heat_model', 'end' )
     3418
     3419 END SUBROUTINE usm_init_wall_heat_model
    35173420
    35183421
     
    36013504!-- from file, if available. This flag is later used to control initialization of surface attributes.
    36023505!-- Todo: for the moment disable initialization of building roofs with ground-floor-level properties.
    3603     surf_usm_h%ground_level = .FALSE.
     3506    DO  l = 0, 1
     3507      surf_usm_h(l)%ground_level = .FALSE.
     3508    ENDDO
    36043509
    36053510    DO  l = 0, 3
     
    36403545!
    36413546!-- Initialization of resistances.
    3642     DO  m = 1, surf_usm_h%ns
    3643        surf_usm_h%r_a(m)        = 50.0_wp
    3644        surf_usm_h%r_a_green(m)  = 50.0_wp
    3645        surf_usm_h%r_a_window(m) = 50.0_wp
     3547    DO  l = 0, 1
     3548       DO  m = 1, surf_usm_h(l)%ns
     3549          surf_usm_h(l)%r_a(m)        = 50.0_wp
     3550          surf_usm_h(l)%r_a_green(m)  = 50.0_wp
     3551          surf_usm_h(l)%r_a_window(m) = 50.0_wp
     3552       ENDDO
    36463553    ENDDO
    36473554    DO  l = 0, 3
     
    36553562!
    36563563!-- Map values onto horizontal elemements
    3657     DO  m = 1, surf_usm_h%ns
    3658        surf_usm_h%r_canopy(m)     = 200.0_wp !< canopy_resistance
    3659        surf_usm_h%r_canopy_min(m) = 200.0_wp !< min_canopy_resistance
    3660        surf_usm_h%g_d(m)          = 0.0_wp   !< canopy_resistance_coefficient
     3564    DO  l = 0, 1
     3565       DO  m = 1, surf_usm_h(l)%ns
     3566          surf_usm_h(l)%r_canopy(m)     = 200.0_wp !< canopy_resistance
     3567          surf_usm_h(l)%r_canopy_min(m) = 200.0_wp !< min_canopy_resistance
     3568          surf_usm_h(l)%g_d(m)          = 0.0_wp   !< canopy_resistance_coefficient
     3569       ENDDO
    36613570    ENDDO
    36623571!
     
    36743583!--  follow a 3-level approach.
    36753584!--  Level 1 - initialization via default attributes
    3676      DO  m = 1, surf_usm_h%ns
    3677 !
    3678 !--     Now, all horizontal surfaces are roof surfaces (?)
    3679         surf_usm_h%isroof_surf(m)   = .TRUE.
    3680         surf_usm_h%surface_types(m) = roof_category         !< default category for root surface
    3681 !
    3682 !--     In order to distinguish between ground floor level and above-ground-floor level surfaces,
    3683 !--     set input indices.
    3684 
    3685         ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,                     &
    3686                                   surf_usm_h%ground_level(m) )
    3687         ind_lai_r        = MERGE( ind_lai_r_gfl, ind_lai_r_agfl, surf_usm_h%ground_level(m) )
    3688         ind_z0           = MERGE( ind_z0_gfl, ind_z0_agfl, surf_usm_h%ground_level(m) )
    3689         ind_z0qh         = MERGE( ind_z0qh_gfl, ind_z0qh_agfl, surf_usm_h%ground_level(m) )
    3690 !
    3691 !--     Store building type and its name on each surface element
    3692         surf_usm_h%building_type(m)      = building_type
    3693         surf_usm_h%building_type_name(m) = building_type_name(building_type)
    3694 !
    3695 !--     Initialize relatvie wall- (0), green- (1) and window (2) fractions
    3696         surf_usm_h%frac(m,ind_veg_wall)  = building_pars(ind_wall_frac_r,building_type)
    3697         surf_usm_h%frac(m,ind_pav_green) = building_pars(ind_green_frac_r,building_type)
    3698         surf_usm_h%frac(m,ind_wat_win)   = building_pars(ind_win_frac_r,building_type)
    3699         surf_usm_h%lai(m)                = building_pars(ind_lai_r,building_type)
    3700 
    3701         surf_usm_h%rho_c_wall(nzb_wall,m)        = building_pars(ind_hc1_wall_r,building_type)
    3702         surf_usm_h%rho_c_wall(nzb_wall+1,m)      = building_pars(ind_hc1_wall_r,building_type)
    3703         surf_usm_h%rho_c_wall(nzb_wall+2,m)      = building_pars(ind_hc2_wall_r,building_type)
    3704         surf_usm_h%rho_c_wall(nzb_wall+3,m)      = building_pars(ind_hc3_wall_r,building_type)
    3705         surf_usm_h%lambda_h(nzb_wall,m)          = building_pars(ind_tc1_wall_r,building_type)
    3706         surf_usm_h%lambda_h(nzb_wall+1,m)        = building_pars(ind_tc1_wall_r,building_type)
    3707         surf_usm_h%lambda_h(nzb_wall+2,m)        = building_pars(ind_tc2_wall_r,building_type)
    3708         surf_usm_h%lambda_h(nzb_wall+3,m)        = building_pars(ind_tc3_wall_r,building_type)
    3709         surf_usm_h%rho_c_green(nzb_wall,m)       = rho_c_soil !building_pars(ind_hc1_wall_r,building_type)
    3710         surf_usm_h%rho_c_green(nzb_wall+1,m)     = rho_c_soil !building_pars(ind_hc1_wall_r,building_type)
    3711         surf_usm_h%rho_c_green(nzb_wall+2,m)     = rho_c_soil !building_pars(ind_hc2_wall_r,building_type)
    3712         surf_usm_h%rho_c_green(nzb_wall+3,m)     = rho_c_soil !building_pars(ind_hc3_wall_r,building_type)
    3713         surf_usm_h%lambda_h_green(nzb_wall,m)    = lambda_h_green_sm !building_pars(ind_tc1_wall_r,building_type)
    3714         surf_usm_h%lambda_h_green(nzb_wall+1,m)  = lambda_h_green_sm !building_pars(ind_tc1_wall_r,building_type)
    3715         surf_usm_h%lambda_h_green(nzb_wall+2,m)  = lambda_h_green_sm !building_pars(ind_tc2_wall_r,building_type)
    3716         surf_usm_h%lambda_h_green(nzb_wall+3,m)  = lambda_h_green_sm !building_pars(ind_tc3_wall_r,building_type)
    3717         surf_usm_h%rho_c_window(nzb_wall,m)      = building_pars(ind_hc1_win_r,building_type)
    3718         surf_usm_h%rho_c_window(nzb_wall+1,m)    = building_pars(ind_hc1_win_r,building_type)
    3719         surf_usm_h%rho_c_window(nzb_wall+2,m)    = building_pars(ind_hc2_win_r,building_type)
    3720         surf_usm_h%rho_c_window(nzb_wall+3,m)    = building_pars(ind_hc3_win_r,building_type)
    3721         surf_usm_h%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win_r,building_type)
    3722         surf_usm_h%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win_r,building_type)
    3723         surf_usm_h%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win_r,building_type)
    3724         surf_usm_h%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win_r,building_type)
    3725 
    3726         surf_usm_h%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,building_type)
    3727         surf_usm_h%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,building_type)
    3728 !
    3729 !--     Emissivity of wall-, green- and window fraction
    3730         surf_usm_h%emissivity(m,ind_veg_wall)  = building_pars(ind_emis_wall_r,building_type)
    3731         surf_usm_h%emissivity(m,ind_pav_green) = building_pars(ind_emis_green_r,building_type)
    3732         surf_usm_h%emissivity(m,ind_wat_win)   = building_pars(ind_emis_win_r,building_type)
    3733 
    3734         surf_usm_h%transmissivity(m)           = building_pars(ind_trans_r,building_type)
    3735 
    3736         surf_usm_h%z0(m)                       = building_pars(ind_z0,building_type)
    3737         surf_usm_h%z0h(m)                      = building_pars(ind_z0qh,building_type)
    3738         surf_usm_h%z0q(m)                      = building_pars(ind_z0qh,building_type)
    3739 !
    3740 !--     Albedo type for wall fraction, green fraction, window fraction
    3741         surf_usm_h%albedo_type(m,ind_veg_wall)  = INT( building_pars(ind_alb_wall_r,building_type) )
    3742         surf_usm_h%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green_r,building_type) )
    3743         surf_usm_h%albedo_type(m,ind_wat_win)   = INT( building_pars(ind_alb_win_r,building_type) )
    3744 
    3745         surf_usm_h%zw(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,building_type)
    3746         surf_usm_h%zw(nzb_wall+1,m)       = building_pars(ind_thick_2_wall_r,building_type)
    3747         surf_usm_h%zw(nzb_wall+2,m)       = building_pars(ind_thick_3_wall_r,building_type)
    3748         surf_usm_h%zw(nzb_wall+3,m)       = building_pars(ind_thick_4_wall_r,building_type)
    3749 
    3750         surf_usm_h%zw_green(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,building_type)
    3751         surf_usm_h%zw_green(nzb_wall+1,m)       = building_pars(ind_thick_2_wall_r,building_type)
    3752         surf_usm_h%zw_green(nzb_wall+2,m)       = building_pars(ind_thick_3_wall_r,building_type)
    3753         surf_usm_h%zw_green(nzb_wall+3,m)       = building_pars(ind_thick_4_wall_r,building_type)
    3754 
    3755         surf_usm_h%zw_window(nzb_wall,m)         = building_pars(ind_thick_1_win_r,building_type)
    3756         surf_usm_h%zw_window(nzb_wall+1,m)       = building_pars(ind_thick_2_win_r,building_type)
    3757         surf_usm_h%zw_window(nzb_wall+2,m)       = building_pars(ind_thick_3_win_r,building_type)
    3758         surf_usm_h%zw_window(nzb_wall+3,m)       = building_pars(ind_thick_4_win_r,building_type)
    3759 
    3760         surf_usm_h%green_type_roof(m)     = building_pars(ind_green_type_roof,building_type)
    3761 
     3585     DO  l = 0, 1
     3586        DO  m = 1, surf_usm_h(l)%ns
     3587!
     3588!--        Now, all horizontal surfaces are roof surfaces (?)
     3589           surf_usm_h(l)%isroof_surf(m)   = .TRUE.
     3590           surf_usm_h(l)%surface_types(m) = roof_category         !< default category for root surface
     3591!
     3592!--        In order to distinguish between ground floor level and above-ground-floor level surfaces,
     3593!--        set input indices.
     3594
     3595           ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,                     &
     3596                                     surf_usm_h(l)%ground_level(m) )
     3597           ind_lai_r        = MERGE( ind_lai_r_gfl, ind_lai_r_agfl, surf_usm_h(l)%ground_level(m) )
     3598           ind_z0           = MERGE( ind_z0_gfl, ind_z0_agfl, surf_usm_h(l)%ground_level(m) )
     3599           ind_z0qh         = MERGE( ind_z0qh_gfl, ind_z0qh_agfl, surf_usm_h(l)%ground_level(m) )
     3600!
     3601!--        Store building type and its name on each surface element
     3602           surf_usm_h(l)%building_type(m)      = building_type
     3603           surf_usm_h(l)%building_type_name(m) = building_type_name(building_type)
     3604!
     3605!--        Initialize relatvie wall- (0), green- (1) and window (2) fractions
     3606           surf_usm_h(l)%frac(m,ind_veg_wall)  = building_pars(ind_wall_frac_r,building_type)
     3607           surf_usm_h(l)%frac(m,ind_pav_green) = building_pars(ind_green_frac_r,building_type)
     3608           surf_usm_h(l)%frac(m,ind_wat_win)   = building_pars(ind_win_frac_r,building_type)
     3609           surf_usm_h(l)%lai(m)                = building_pars(ind_lai_r,building_type)
     3610
     3611           surf_usm_h(l)%rho_c_wall(nzb_wall,m)        = building_pars(ind_hc1_wall_r,building_type)
     3612           surf_usm_h(l)%rho_c_wall(nzb_wall+1,m)      = building_pars(ind_hc1_wall_r,building_type)
     3613           surf_usm_h(l)%rho_c_wall(nzb_wall+2,m)      = building_pars(ind_hc2_wall_r,building_type)
     3614           surf_usm_h(l)%rho_c_wall(nzb_wall+3,m)      = building_pars(ind_hc3_wall_r,building_type)
     3615           surf_usm_h(l)%lambda_h(nzb_wall,m)          = building_pars(ind_tc1_wall_r,building_type)
     3616           surf_usm_h(l)%lambda_h(nzb_wall+1,m)        = building_pars(ind_tc1_wall_r,building_type)
     3617           surf_usm_h(l)%lambda_h(nzb_wall+2,m)        = building_pars(ind_tc2_wall_r,building_type)
     3618           surf_usm_h(l)%lambda_h(nzb_wall+3,m)        = building_pars(ind_tc3_wall_r,building_type)
     3619           surf_usm_h(l)%rho_c_green(nzb_wall,m)       = rho_c_soil !building_pars(ind_hc1_wall_r,building_type)
     3620           surf_usm_h(l)%rho_c_green(nzb_wall+1,m)     = rho_c_soil !building_pars(ind_hc1_wall_r,building_type)
     3621           surf_usm_h(l)%rho_c_green(nzb_wall+2,m)     = rho_c_soil !building_pars(ind_hc2_wall_r,building_type)
     3622           surf_usm_h(l)%rho_c_green(nzb_wall+3,m)     = rho_c_soil !building_pars(ind_hc3_wall_r,building_type)
     3623           surf_usm_h(l)%lambda_h_green(nzb_wall,m)    = lambda_h_green_sm !building_pars(ind_tc1_wall_r,building_type)
     3624           surf_usm_h(l)%lambda_h_green(nzb_wall+1,m)  = lambda_h_green_sm !building_pars(ind_tc1_wall_r,building_type)
     3625           surf_usm_h(l)%lambda_h_green(nzb_wall+2,m)  = lambda_h_green_sm !building_pars(ind_tc2_wall_r,building_type)
     3626           surf_usm_h(l)%lambda_h_green(nzb_wall+3,m)  = lambda_h_green_sm !building_pars(ind_tc3_wall_r,building_type)
     3627           surf_usm_h(l)%rho_c_window(nzb_wall,m)      = building_pars(ind_hc1_win_r,building_type)
     3628           surf_usm_h(l)%rho_c_window(nzb_wall+1,m)    = building_pars(ind_hc1_win_r,building_type)
     3629           surf_usm_h(l)%rho_c_window(nzb_wall+2,m)    = building_pars(ind_hc2_win_r,building_type)
     3630           surf_usm_h(l)%rho_c_window(nzb_wall+3,m)    = building_pars(ind_hc3_win_r,building_type)
     3631           surf_usm_h(l)%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win_r,building_type)
     3632           surf_usm_h(l)%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win_r,building_type)
     3633           surf_usm_h(l)%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win_r,building_type)
     3634           surf_usm_h(l)%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win_r,building_type)
     3635
     3636           surf_usm_h(l)%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,building_type)
     3637           surf_usm_h(l)%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,building_type)
     3638!
     3639!--        Emissivity of wall-, green- and window fraction
     3640           surf_usm_h(l)%emissivity(m,ind_veg_wall)  = building_pars(ind_emis_wall_r,building_type)
     3641           surf_usm_h(l)%emissivity(m,ind_pav_green) = building_pars(ind_emis_green_r,building_type)
     3642           surf_usm_h(l)%emissivity(m,ind_wat_win)   = building_pars(ind_emis_win_r,building_type)
     3643
     3644           surf_usm_h(l)%transmissivity(m)           = building_pars(ind_trans_r,building_type)
     3645
     3646           surf_usm_h(l)%z0(m)                       = building_pars(ind_z0,building_type)
     3647           surf_usm_h(l)%z0h(m)                      = building_pars(ind_z0qh,building_type)
     3648           surf_usm_h(l)%z0q(m)                      = building_pars(ind_z0qh,building_type)
     3649!
     3650!--        Albedo type for wall fraction, green fraction, window fraction
     3651           surf_usm_h(l)%albedo_type(m,ind_veg_wall)  = INT( building_pars(ind_alb_wall_r,building_type) )
     3652           surf_usm_h(l)%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green_r,building_type) )
     3653           surf_usm_h(l)%albedo_type(m,ind_wat_win)   = INT( building_pars(ind_alb_win_r,building_type) )
     3654
     3655           surf_usm_h(l)%zw(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,building_type)
     3656           surf_usm_h(l)%zw(nzb_wall+1,m)       = building_pars(ind_thick_2_wall_r,building_type)
     3657           surf_usm_h(l)%zw(nzb_wall+2,m)       = building_pars(ind_thick_3_wall_r,building_type)
     3658           surf_usm_h(l)%zw(nzb_wall+3,m)       = building_pars(ind_thick_4_wall_r,building_type)
     3659
     3660           surf_usm_h(l)%zw_green(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,building_type)
     3661           surf_usm_h(l)%zw_green(nzb_wall+1,m)       = building_pars(ind_thick_2_wall_r,building_type)
     3662           surf_usm_h(l)%zw_green(nzb_wall+2,m)       = building_pars(ind_thick_3_wall_r,building_type)
     3663           surf_usm_h(l)%zw_green(nzb_wall+3,m)       = building_pars(ind_thick_4_wall_r,building_type)
     3664
     3665           surf_usm_h(l)%zw_window(nzb_wall,m)         = building_pars(ind_thick_1_win_r,building_type)
     3666           surf_usm_h(l)%zw_window(nzb_wall+1,m)       = building_pars(ind_thick_2_win_r,building_type)
     3667           surf_usm_h(l)%zw_window(nzb_wall+2,m)       = building_pars(ind_thick_3_win_r,building_type)
     3668           surf_usm_h(l)%zw_window(nzb_wall+3,m)       = building_pars(ind_thick_4_win_r,building_type)
     3669
     3670           surf_usm_h(l)%green_type_roof(m)     = building_pars(ind_green_type_roof,building_type)
     3671        ENDDO
    37623672     ENDDO
    37633673
     
    39183828!--  Level 2 - initialization via building type read from file
    39193829     IF ( building_type_f%from_file )  THEN
    3920         DO  m = 1, surf_usm_h%ns
    3921            i = surf_usm_h%i(m)
    3922            j = surf_usm_h%j(m)
    3923 !
    3924 !--        For the moment, limit building type to 6 (to overcome errors in input file).
    3925            st = building_type_f%var(j,i)
    3926            IF ( st /= building_type_f%fill )  THEN
    3927 
    3928 !
    3929 !--           In order to distinguish between ground floor level and above-ground-floor level
    3930 !--           surfaces, set input indices.
    3931 
    3932               ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,               &
    3933                                         surf_usm_h%ground_level(m) )
    3934               ind_lai_r        = MERGE( ind_lai_r_gfl, ind_lai_r_agfl, surf_usm_h%ground_level(m) )
    3935               ind_z0           = MERGE( ind_z0_gfl, ind_z0_agfl, surf_usm_h%ground_level(m) )
    3936               ind_z0qh         = MERGE( ind_z0qh_gfl, ind_z0qh_agfl, surf_usm_h%ground_level(m) )
    3937 !
    3938 !--           Store building type and its name on each surface element
    3939               surf_usm_h%building_type(m)      = st
    3940               surf_usm_h%building_type_name(m) = building_type_name(st)
    3941 !
    3942 !--           Initialize relatvie wall- (0), green- (1) and window (2) fractions
    3943               surf_usm_h%frac(m,ind_veg_wall)  = building_pars(ind_wall_frac_r,st)
    3944               surf_usm_h%frac(m,ind_pav_green) = building_pars(ind_green_frac_r,st)
    3945               surf_usm_h%frac(m,ind_wat_win)   = building_pars(ind_win_frac_r,st)
    3946               surf_usm_h%lai(m)                = building_pars(ind_lai_r,st)
    3947 
    3948               surf_usm_h%rho_c_wall(nzb_wall,m)   = building_pars(ind_hc1_wall_r,st)
    3949               surf_usm_h%rho_c_wall(nzb_wall+1,m) = building_pars(ind_hc1_wall_r,st)
    3950               surf_usm_h%rho_c_wall(nzb_wall+2,m) = building_pars(ind_hc2_wall_r,st)
    3951               surf_usm_h%rho_c_wall(nzb_wall+3,m) = building_pars(ind_hc3_wall_r,st)
    3952               surf_usm_h%lambda_h(nzb_wall,m)     = building_pars(ind_tc1_wall_r,st)
    3953               surf_usm_h%lambda_h(nzb_wall+1,m)   = building_pars(ind_tc1_wall_r,st)
    3954               surf_usm_h%lambda_h(nzb_wall+2,m)   = building_pars(ind_tc2_wall_r,st)
    3955               surf_usm_h%lambda_h(nzb_wall+3,m)   = building_pars(ind_tc3_wall_r,st)
    3956 
    3957               surf_usm_h%rho_c_green(nzb_wall,m)      = rho_c_soil !building_pars(ind_hc1_wall_r,st)
    3958               surf_usm_h%rho_c_green(nzb_wall+1,m)    = rho_c_soil !building_pars(ind_hc1_wall_r,st)
    3959               surf_usm_h%rho_c_green(nzb_wall+2,m)    = rho_c_soil !building_pars(ind_hc2_wall_r,st)
    3960               surf_usm_h%rho_c_green(nzb_wall+3,m)    = rho_c_soil !building_pars(ind_hc3_wall_r,st)
    3961               surf_usm_h%lambda_h_green(nzb_wall,m)   = lambda_h_green_sm !building_pars(ind_tc1_wall_r,st)
    3962               surf_usm_h%lambda_h_green(nzb_wall+1,m) = lambda_h_green_sm !building_pars(ind_tc1_wall_r,st)
    3963               surf_usm_h%lambda_h_green(nzb_wall+2,m) = lambda_h_green_sm !building_pars(ind_tc2_wall_r,st)
    3964               surf_usm_h%lambda_h_green(nzb_wall+3,m) = lambda_h_green_sm !building_pars(ind_tc3_wall_r,st)
    3965 
    3966               surf_usm_h%rho_c_window(nzb_wall,m)      = building_pars(ind_hc1_win_r,st)
    3967               surf_usm_h%rho_c_window(nzb_wall+1,m)    = building_pars(ind_hc1_win_r,st)
    3968               surf_usm_h%rho_c_window(nzb_wall+2,m)    = building_pars(ind_hc2_win_r,st)
    3969               surf_usm_h%rho_c_window(nzb_wall+3,m)    = building_pars(ind_hc3_win_r,st)
    3970               surf_usm_h%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win_r,st)
    3971               surf_usm_h%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win_r,st)
    3972               surf_usm_h%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win_r,st)
    3973               surf_usm_h%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win_r,st)
    3974 
    3975               surf_usm_h%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,st)
    3976               surf_usm_h%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,st)
    3977 !
    3978 !--           Emissivity of wall-, green- and window fraction
    3979               surf_usm_h%emissivity(m,ind_veg_wall)  = building_pars(ind_emis_wall_r,st)
    3980               surf_usm_h%emissivity(m,ind_pav_green) = building_pars(ind_emis_green_r,st)
    3981               surf_usm_h%emissivity(m,ind_wat_win)   = building_pars(ind_emis_win_r,st)
    3982 
    3983               surf_usm_h%transmissivity(m)      = building_pars(ind_trans_r,st)
    3984 
    3985               surf_usm_h%z0(m)                  = building_pars(ind_z0,st)
    3986               surf_usm_h%z0h(m)                 = building_pars(ind_z0qh,st)
    3987               surf_usm_h%z0q(m)                 = building_pars(ind_z0qh,st)
    3988 !
    3989 !--           Albedo type for wall fraction, green fraction, window fraction
    3990               surf_usm_h%albedo_type(m,ind_veg_wall)  = INT( building_pars(ind_alb_wall_r,st) )
    3991               surf_usm_h%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green_r,st) )
    3992               surf_usm_h%albedo_type(m,ind_wat_win)   = INT( building_pars(ind_alb_win_r,st) )
    3993 
    3994               surf_usm_h%zw(nzb_wall,m)   = building_pars(ind_thick_1_wall_r,st)
    3995               surf_usm_h%zw(nzb_wall+1,m) = building_pars(ind_thick_2_wall_r,st)
    3996               surf_usm_h%zw(nzb_wall+2,m) = building_pars(ind_thick_3_wall_r,st)
    3997               surf_usm_h%zw(nzb_wall+3,m) = building_pars(ind_thick_4_wall_r,st)
    3998 
    3999               surf_usm_h%zw_green(nzb_wall,m)   = building_pars(ind_thick_1_wall_r,st)
    4000               surf_usm_h%zw_green(nzb_wall+1,m) = building_pars(ind_thick_2_wall_r,st)
    4001               surf_usm_h%zw_green(nzb_wall+2,m) = building_pars(ind_thick_3_wall_r,st)
    4002               surf_usm_h%zw_green(nzb_wall+3,m) = building_pars(ind_thick_4_wall_r,st)
    4003 
    4004               surf_usm_h%zw_window(nzb_wall,m)   = building_pars(ind_thick_1_win_r,st)
    4005               surf_usm_h%zw_window(nzb_wall+1,m) = building_pars(ind_thick_2_win_r,st)
    4006               surf_usm_h%zw_window(nzb_wall+2,m) = building_pars(ind_thick_3_win_r,st)
    4007               surf_usm_h%zw_window(nzb_wall+3,m) = building_pars(ind_thick_4_win_r,st)
    4008 
    4009               surf_usm_h%green_type_roof(m) = building_pars(ind_green_type_roof,st)
    4010 
    4011            ENDIF
     3830        DO  l = 0, 1
     3831           DO  m = 1, surf_usm_h(l)%ns
     3832              i = surf_usm_h(l)%i(m)
     3833              j = surf_usm_h(l)%j(m)
     3834!
     3835!--           For the moment, limit building type to 6 (to overcome errors in input file).
     3836              st = building_type_f%var(j,i)
     3837              IF ( st /= building_type_f%fill )  THEN
     3838
     3839!
     3840!--              In order to distinguish between ground floor level and above-ground-floor level
     3841!--              surfaces, set input indices.
     3842
     3843                 ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,               &
     3844                                           surf_usm_h(l)%ground_level(m) )
     3845                 ind_lai_r        = MERGE( ind_lai_r_gfl, ind_lai_r_agfl, surf_usm_h(l)%ground_level(m) )
     3846                 ind_z0           = MERGE( ind_z0_gfl, ind_z0_agfl, surf_usm_h(l)%ground_level(m) )
     3847                 ind_z0qh         = MERGE( ind_z0qh_gfl, ind_z0qh_agfl, surf_usm_h(l)%ground_level(m) )
     3848!
     3849!--              Store building type and its name on each surface element
     3850                 surf_usm_h(l)%building_type(m)      = st
     3851                 surf_usm_h(l)%building_type_name(m) = building_type_name(st)
     3852!
     3853!--              Initialize relatvie wall- (0), green- (1) and window (2) fractions
     3854                 surf_usm_h(l)%frac(m,ind_veg_wall)  = building_pars(ind_wall_frac_r,st)
     3855                 surf_usm_h(l)%frac(m,ind_pav_green) = building_pars(ind_green_frac_r,st)
     3856                 surf_usm_h(l)%frac(m,ind_wat_win)   = building_pars(ind_win_frac_r,st)
     3857                 surf_usm_h(l)%lai(m)                = building_pars(ind_lai_r,st)
     3858
     3859                 surf_usm_h(l)%rho_c_wall(nzb_wall,m)   = building_pars(ind_hc1_wall_r,st)
     3860                 surf_usm_h(l)%rho_c_wall(nzb_wall+1,m) = building_pars(ind_hc1_wall_r,st)
     3861                 surf_usm_h(l)%rho_c_wall(nzb_wall+2,m) = building_pars(ind_hc2_wall_r,st)
     3862                 surf_usm_h(l)%rho_c_wall(nzb_wall+3,m) = building_pars(ind_hc3_wall_r,st)
     3863                 surf_usm_h(l)%lambda_h(nzb_wall,m)     = building_pars(ind_tc1_wall_r,st)
     3864                 surf_usm_h(l)%lambda_h(nzb_wall+1,m)   = building_pars(ind_tc1_wall_r,st)
     3865                 surf_usm_h(l)%lambda_h(nzb_wall+2,m)   = building_pars(ind_tc2_wall_r,st)
     3866                 surf_usm_h(l)%lambda_h(nzb_wall+3,m)   = building_pars(ind_tc3_wall_r,st)
     3867
     3868                 surf_usm_h(l)%rho_c_green(nzb_wall,m)      = rho_c_soil !building_pars(ind_hc1_wall_r,st)
     3869                 surf_usm_h(l)%rho_c_green(nzb_wall+1,m)    = rho_c_soil !building_pars(ind_hc1_wall_r,st)
     3870                 surf_usm_h(l)%rho_c_green(nzb_wall+2,m)    = rho_c_soil !building_pars(ind_hc2_wall_r,st)
     3871                 surf_usm_h(l)%rho_c_green(nzb_wall+3,m)    = rho_c_soil !building_pars(ind_hc3_wall_r,st)
     3872                 surf_usm_h(l)%lambda_h_green(nzb_wall,m)   = lambda_h_green_sm !building_pars(ind_tc1_wall_r,st)
     3873                 surf_usm_h(l)%lambda_h_green(nzb_wall+1,m) = lambda_h_green_sm !building_pars(ind_tc1_wall_r,st)
     3874                 surf_usm_h(l)%lambda_h_green(nzb_wall+2,m) = lambda_h_green_sm !building_pars(ind_tc2_wall_r,st)
     3875                 surf_usm_h(l)%lambda_h_green(nzb_wall+3,m) = lambda_h_green_sm !building_pars(ind_tc3_wall_r,st)
     3876
     3877                 surf_usm_h(l)%rho_c_window(nzb_wall,m)      = building_pars(ind_hc1_win_r,st)
     3878                 surf_usm_h(l)%rho_c_window(nzb_wall+1,m)    = building_pars(ind_hc1_win_r,st)
     3879                 surf_usm_h(l)%rho_c_window(nzb_wall+2,m)    = building_pars(ind_hc2_win_r,st)
     3880                 surf_usm_h(l)%rho_c_window(nzb_wall+3,m)    = building_pars(ind_hc3_win_r,st)
     3881                 surf_usm_h(l)%lambda_h_window(nzb_wall,m)   = building_pars(ind_tc1_win_r,st)
     3882                 surf_usm_h(l)%lambda_h_window(nzb_wall+1,m) = building_pars(ind_tc1_win_r,st)
     3883                 surf_usm_h(l)%lambda_h_window(nzb_wall+2,m) = building_pars(ind_tc2_win_r,st)
     3884                 surf_usm_h(l)%lambda_h_window(nzb_wall+3,m) = building_pars(ind_tc3_win_r,st)
     3885
     3886                 surf_usm_h(l)%target_temp_summer(m)  = building_pars(ind_indoor_target_temp_summer,st)
     3887                 surf_usm_h(l)%target_temp_winter(m)  = building_pars(ind_indoor_target_temp_winter,st)
     3888!
     3889!--              Emissivity of wall-, green- and window fraction
     3890                 surf_usm_h(l)%emissivity(m,ind_veg_wall)  = building_pars(ind_emis_wall_r,st)
     3891                 surf_usm_h(l)%emissivity(m,ind_pav_green) = building_pars(ind_emis_green_r,st)
     3892                 surf_usm_h(l)%emissivity(m,ind_wat_win)   = building_pars(ind_emis_win_r,st)
     3893
     3894                 surf_usm_h(l)%transmissivity(m)      = building_pars(ind_trans_r,st)
     3895
     3896                 surf_usm_h(l)%z0(m)                  = building_pars(ind_z0,st)
     3897                 surf_usm_h(l)%z0h(m)                 = building_pars(ind_z0qh,st)
     3898                 surf_usm_h(l)%z0q(m)                 = building_pars(ind_z0qh,st)
     3899!
     3900!--              Albedo type for wall fraction, green fraction, window fraction
     3901                 surf_usm_h(l)%albedo_type(m,ind_veg_wall)  = INT( building_pars(ind_alb_wall_r,st) )
     3902                 surf_usm_h(l)%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green_r,st) )
     3903                 surf_usm_h(l)%albedo_type(m,ind_wat_win)   = INT( building_pars(ind_alb_win_r,st) )
     3904
     3905                 surf_usm_h(l)%zw(nzb_wall,m)   = building_pars(ind_thick_1_wall_r,st)
     3906                 surf_usm_h(l)%zw(nzb_wall+1,m) = building_pars(ind_thick_2_wall_r,st)
     3907                 surf_usm_h(l)%zw(nzb_wall+2,m) = building_pars(ind_thick_3_wall_r,st)
     3908                 surf_usm_h(l)%zw(nzb_wall+3,m) = building_pars(ind_thick_4_wall_r,st)
     3909
     3910                 surf_usm_h(l)%zw_green(nzb_wall,m)   = building_pars(ind_thick_1_wall_r,st)
     3911                 surf_usm_h(l)%zw_green(nzb_wall+1,m) = building_pars(ind_thick_2_wall_r,st)
     3912                 surf_usm_h(l)%zw_green(nzb_wall+2,m) = building_pars(ind_thick_3_wall_r,st)
     3913                 surf_usm_h(l)%zw_green(nzb_wall+3,m) = building_pars(ind_thick_4_wall_r,st)
     3914
     3915                 surf_usm_h(l)%zw_window(nzb_wall,m)   = building_pars(ind_thick_1_win_r,st)
     3916                 surf_usm_h(l)%zw_window(nzb_wall+1,m) = building_pars(ind_thick_2_win_r,st)
     3917                 surf_usm_h(l)%zw_window(nzb_wall+2,m) = building_pars(ind_thick_3_win_r,st)
     3918                 surf_usm_h(l)%zw_window(nzb_wall+3,m) = building_pars(ind_thick_4_win_r,st)
     3919
     3920                 surf_usm_h(l)%green_type_roof(m) = building_pars(ind_green_type_roof,st)
     3921
     3922              ENDIF
     3923           ENDDO
    40123924        ENDDO
    40133925
     
    41794091!--  on level 1 or 2.
    41804092     IF ( building_pars_f%from_file )  THEN
    4181         DO  m = 1, surf_usm_h%ns
    4182            i = surf_usm_h%i(m)
    4183            j = surf_usm_h%j(m)
    4184 
    4185 !
    4186 !--        In order to distinguish between ground floor level and above-ground-floor level surfaces,
    4187 !--        set input indices.
    4188            ind_wall_frac    = MERGE( ind_wall_frac_gfl, ind_wall_frac_agfl,                        &
    4189                                      surf_usm_h%ground_level(m) )
    4190            ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,                  &
    4191                                      surf_usm_h%ground_level(m) )
    4192            ind_win_frac     = MERGE( ind_win_frac_gfl, ind_win_frac_agfl,                          &
    4193                                      surf_usm_h%ground_level(m) )
    4194            ind_lai_r        = MERGE( ind_lai_r_gfl, ind_lai_r_agfl, surf_usm_h%ground_level(m) )
    4195            ind_z0           = MERGE( ind_z0_gfl, ind_z0_agfl, surf_usm_h%ground_level(m) )
    4196            ind_z0qh         = MERGE( ind_z0qh_gfl, ind_z0qh_agfl, surf_usm_h%ground_level(m) )
    4197            ind_hc1          = MERGE( ind_hc1_gfl, ind_hc1_agfl, surf_usm_h%ground_level(m) )
    4198            ind_hc2          = MERGE( ind_hc2_gfl, ind_hc2_agfl, surf_usm_h%ground_level(m) )
    4199            ind_hc3          = MERGE( ind_hc3_gfl, ind_hc3_agfl, surf_usm_h%ground_level(m) )
    4200            ind_tc1          = MERGE( ind_tc1_gfl, ind_tc1_agfl, surf_usm_h%ground_level(m) )
    4201            ind_tc2          = MERGE( ind_tc2_gfl, ind_tc2_agfl, surf_usm_h%ground_level(m) )
    4202            ind_tc3          = MERGE( ind_tc3_gfl, ind_tc3_agfl, surf_usm_h%ground_level(m) )
    4203            ind_emis_wall    = MERGE( ind_emis_wall_gfl, ind_emis_wall_agfl,                        &
    4204                                      surf_usm_h%ground_level(m) )
    4205            ind_emis_green   = MERGE( ind_emis_green_gfl, ind_emis_green_agfl,                      &
    4206                                      surf_usm_h%ground_level(m) )
    4207            ind_emis_win     = MERGE( ind_emis_win_gfl, ind_emis_win_agfl,                          &
    4208                                      surf_usm_h%ground_level(m) )
    4209            ind_trans        = MERGE( ind_trans_gfl, ind_trans_agfl, surf_usm_h%ground_level(m) )
    4210 
    4211 !
    4212 !--        Initialize relatvie wall- (0), green- (1) and window (2) fractions
    4213            IF ( building_pars_f%pars_xy(ind_wall_frac,j,i) /= building_pars_f%fill )               &
    4214               surf_usm_h%frac(m,ind_veg_wall) = building_pars_f%pars_xy(ind_wall_frac,j,i)
    4215 
    4216            IF ( building_pars_f%pars_xy(ind_green_frac_r,j,i) /= building_pars_f%fill )            &
    4217               surf_usm_h%frac(m,ind_pav_green) = building_pars_f%pars_xy(ind_green_frac_r,j,i)
    4218 
    4219            IF ( building_pars_f%pars_xy(ind_win_frac,j,i) /= building_pars_f%fill )                &
    4220               surf_usm_h%frac(m,ind_wat_win) = building_pars_f%pars_xy(ind_win_frac,j,i)
    4221 
    4222            IF ( building_pars_f%pars_xy(ind_lai_r,j,i) /= building_pars_f%fill )                   &
    4223               surf_usm_h%lai(m) = building_pars_f%pars_xy(ind_lai_r,j,i)
    4224 
    4225            IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
    4226               surf_usm_h%rho_c_wall(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
    4227               surf_usm_h%rho_c_wall(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
    4228            ENDIF
    4229 
    4230 
    4231            IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )                     &
    4232               surf_usm_h%rho_c_wall(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
    4233 
    4234            IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )                     &
    4235               surf_usm_h%rho_c_wall(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
    4236 
    4237            IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
    4238               surf_usm_h%rho_c_green(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
    4239               surf_usm_h%rho_c_green(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
    4240            ENDIF
    4241            IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )                     &
    4242               surf_usm_h%rho_c_green(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
    4243 
    4244            IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )                     &
    4245               surf_usm_h%rho_c_green(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
    4246 
    4247            IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
    4248               surf_usm_h%rho_c_window(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
    4249               surf_usm_h%rho_c_window(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
    4250            ENDIF
    4251            IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )                     &
    4252               surf_usm_h%rho_c_window(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
    4253 
    4254            IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )                     &
    4255               surf_usm_h%rho_c_window(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
    4256 
    4257            IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
    4258               surf_usm_h%lambda_h(nzb_wall,m)   = building_pars_f%pars_xy(ind_tc1,j,i)
    4259               surf_usm_h%lambda_h(nzb_wall+1,m) = building_pars_f%pars_xy(ind_tc1,j,i)
    4260            ENDIF
    4261            IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )                     &
    4262               surf_usm_h%lambda_h(nzb_wall+2,m) = building_pars_f%pars_xy(ind_tc2,j,i)
    4263 
    4264            IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )                     &
    4265               surf_usm_h%lambda_h(nzb_wall+3,m) = building_pars_f%pars_xy(ind_tc3,j,i)
    4266 
    4267            IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
    4268               surf_usm_h%lambda_h_green(nzb_wall,m) = building_pars_f%pars_xy(ind_tc1,j,i)
    4269               surf_usm_h%lambda_h_green(nzb_wall+1,m) = building_pars_f%pars_xy(ind_tc1,j,i)
    4270            ENDIF
    4271            IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )                     &
    4272               surf_usm_h%lambda_h_green(nzb_wall+2,m) = building_pars_f%pars_xy(ind_tc2,j,i)
    4273 
    4274            IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )                     &
    4275               surf_usm_h%lambda_h_green(nzb_wall+3,m) = building_pars_f%pars_xy(ind_tc3,j,i)
    4276 
    4277            IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
    4278               surf_usm_h%lambda_h_window(nzb_wall,m) = building_pars_f%pars_xy(ind_tc1,j,i)
    4279               surf_usm_h%lambda_h_window(nzb_wall+1,m) = building_pars_f%pars_xy(ind_tc1,j,i)
    4280            ENDIF
    4281            IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )                     &
    4282               surf_usm_h%lambda_h_window(nzb_wall+2,m) = building_pars_f%pars_xy(ind_tc2,j,i)
    4283 
    4284            IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )                     &
    4285               surf_usm_h%lambda_h_window(nzb_wall+3,m) = building_pars_f%pars_xy(ind_tc3,j,i)
    4286 
    4287            IF ( building_pars_f%pars_xy(ind_indoor_target_temp_summer,j,i) /=                      &
    4288                 building_pars_f%fill )                                                             &
    4289               surf_usm_h%target_temp_summer(m) =                                                   &
    4290               building_pars_f%pars_xy(ind_indoor_target_temp_summer,j,i)
    4291 
    4292            IF ( building_pars_f%pars_xy(ind_indoor_target_temp_winter,j,i) /=                      &
    4293                 building_pars_f%fill )                                                             &
    4294               surf_usm_h%target_temp_winter(m) =                                                   &
    4295               building_pars_f%pars_xy(ind_indoor_target_temp_winter,j,i)
    4296 
    4297            IF ( building_pars_f%pars_xy(ind_emis_wall,j,i) /= building_pars_f%fill )               &
    4298               surf_usm_h%emissivity(m,ind_veg_wall) = building_pars_f%pars_xy(ind_emis_wall,j,i)
    4299 
    4300            IF ( building_pars_f%pars_xy(ind_emis_green,j,i) /= building_pars_f%fill )              &
    4301               surf_usm_h%emissivity(m,ind_pav_green) = building_pars_f%pars_xy(ind_emis_green,j,i)
    4302 
    4303            IF ( building_pars_f%pars_xy(ind_emis_win,j,i) /= building_pars_f%fill )                &
    4304               surf_usm_h%emissivity(m,ind_wat_win) = building_pars_f%pars_xy(ind_emis_win,j,i)
    4305 
    4306            IF ( building_pars_f%pars_xy(ind_trans,j,i) /= building_pars_f%fill )                   &
    4307               surf_usm_h%transmissivity(m) = building_pars_f%pars_xy(ind_trans,j,i)
    4308 
    4309            IF ( building_pars_f%pars_xy(ind_z0,j,i) /= building_pars_f%fill )                      &
    4310               surf_usm_h%z0(m) = building_pars_f%pars_xy(ind_z0,j,i)
    4311 
    4312            IF ( building_pars_f%pars_xy(ind_z0qh,j,i) /= building_pars_f%fill )                    &
    4313               surf_usm_h%z0h(m) = building_pars_f%pars_xy(ind_z0qh,j,i)
    4314 
    4315            IF ( building_pars_f%pars_xy(ind_z0qh,j,i) /= building_pars_f%fill )                    &
    4316               surf_usm_h%z0q(m) = building_pars_f%pars_xy(ind_z0qh,j,i)
    4317 
    4318            IF ( building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) /= building_pars_f%fill )           &
    4319               surf_usm_h%albedo_type(m,ind_veg_wall)  =                                            &
    4320               building_pars_f%pars_xy(ind_alb_wall_agfl,j,i)
    4321 
    4322            IF ( building_pars_f%pars_xy(ind_alb_green_agfl,j,i) /= building_pars_f%fill )          &
    4323               surf_usm_h%albedo_type(m,ind_pav_green) =                                            &
    4324               building_pars_f%pars_xy(ind_alb_green_agfl,j,i)
    4325 
    4326            IF ( building_pars_f%pars_xy(ind_alb_win_agfl,j,i) /= building_pars_f%fill )            &
    4327               surf_usm_h%albedo_type(m,ind_wat_win)   =                                            &
    4328               building_pars_f%pars_xy(ind_alb_win_agfl,j,i)
    4329 
    4330            IF ( building_pars_f%pars_xy(ind_thick_1_agfl,j,i) /= building_pars_f%fill )            &
    4331               surf_usm_h%zw(nzb_wall,m) = building_pars_f%pars_xy(ind_thick_1_agfl,j,i)
    4332 
    4333            IF ( building_pars_f%pars_xy(ind_thick_2_agfl,j,i) /= building_pars_f%fill )            &
    4334               surf_usm_h%zw(nzb_wall+1,m) = building_pars_f%pars_xy(ind_thick_2_agfl,j,i)
    4335 
    4336            IF ( building_pars_f%pars_xy(ind_thick_3_agfl,j,i) /= building_pars_f%fill )            &
    4337               surf_usm_h%zw(nzb_wall+2,m) = building_pars_f%pars_xy(ind_thick_3_agfl,j,i)
    4338 
    4339            IF ( building_pars_f%pars_xy(ind_thick_4_agfl,j,i) /= building_pars_f%fill )            &
    4340               surf_usm_h%zw(nzb_wall+3,m) = building_pars_f%pars_xy(ind_thick_4_agfl,j,i)
    4341 
    4342            IF ( building_pars_f%pars_xy(ind_thick_1_agfl,j,i) /= building_pars_f%fill )            &
    4343               surf_usm_h%zw_green(nzb_wall,m) = building_pars_f%pars_xy(ind_thick_1_agfl,j,i)
    4344 
    4345            IF ( building_pars_f%pars_xy(ind_thick_2_agfl,j,i) /= building_pars_f%fill )            &
    4346               surf_usm_h%zw_green(nzb_wall+1,m) = building_pars_f%pars_xy(ind_thick_2_agfl,j,i)
    4347 
    4348            IF ( building_pars_f%pars_xy(ind_thick_3_agfl,j,i) /= building_pars_f%fill )            &
    4349               surf_usm_h%zw_green(nzb_wall+2,m) = building_pars_f%pars_xy(ind_thick_3_agfl,j,i)
    4350 
    4351            IF ( building_pars_f%pars_xy(ind_thick_4_agfl,j,i) /= building_pars_f%fill )            &
    4352               surf_usm_h%zw_green(nzb_wall+3,m) = building_pars_f%pars_xy(ind_thick_4_agfl,j,i)
     4093        DO  l = 0, 1
     4094           DO  m = 1, surf_usm_h(l)%ns
     4095              i = surf_usm_h(l)%i(m)
     4096              j = surf_usm_h(l)%j(m)
     4097
     4098!
     4099!--           In order to distinguish between ground floor level and above-ground-floor level surfaces,
     4100!--           set input indices.
     4101              ind_wall_frac    = MERGE( ind_wall_frac_gfl, ind_wall_frac_agfl,                        &
     4102                                        surf_usm_h(l)%ground_level(m) )
     4103              ind_green_frac_r = MERGE( ind_green_frac_r_gfl, ind_green_frac_r_agfl,                  &
     4104                                        surf_usm_h(l)%ground_level(m) )
     4105              ind_win_frac     = MERGE( ind_win_frac_gfl, ind_win_frac_agfl,                          &
     4106                                        surf_usm_h(l)%ground_level(m) )
     4107              ind_lai_r        = MERGE( ind_lai_r_gfl, ind_lai_r_agfl, surf_usm_h(l)%ground_level(m) )
     4108              ind_z0           = MERGE( ind_z0_gfl, ind_z0_agfl, surf_usm_h(l)%ground_level(m) )
     4109              ind_z0qh         = MERGE( ind_z0qh_gfl, ind_z0qh_agfl, surf_usm_h(l)%ground_level(m) )
     4110              ind_hc1          = MERGE( ind_hc1_gfl, ind_hc1_agfl, surf_usm_h(l)%ground_level(m) )
     4111              ind_hc2          = MERGE( ind_hc2_gfl, ind_hc2_agfl, surf_usm_h(l)%ground_level(m) )
     4112              ind_hc3          = MERGE( ind_hc3_gfl, ind_hc3_agfl, surf_usm_h(l)%ground_level(m) )
     4113              ind_tc1          = MERGE( ind_tc1_gfl, ind_tc1_agfl, surf_usm_h(l)%ground_level(m) )
     4114              ind_tc2          = MERGE( ind_tc2_gfl, ind_tc2_agfl, surf_usm_h(l)%ground_level(m) )
     4115              ind_tc3          = MERGE( ind_tc3_gfl, ind_tc3_agfl, surf_usm_h(l)%ground_level(m) )
     4116              ind_emis_wall    = MERGE( ind_emis_wall_gfl, ind_emis_wall_agfl,                        &
     4117                                        surf_usm_h(l)%ground_level(m) )
     4118              ind_emis_green   = MERGE( ind_emis_green_gfl, ind_emis_green_agfl,                      &
     4119                                        surf_usm_h(l)%ground_level(m) )
     4120              ind_emis_win     = MERGE( ind_emis_win_gfl, ind_emis_win_agfl,                          &
     4121                                        surf_usm_h(l)%ground_level(m) )
     4122              ind_trans        = MERGE( ind_trans_gfl, ind_trans_agfl, surf_usm_h(l)%ground_level(m) )
     4123
     4124!
     4125!--           Initialize relatvie wall- (0), green- (1) and window (2) fractions
     4126              IF ( building_pars_f%pars_xy(ind_wall_frac,j,i) /= building_pars_f%fill )               &
     4127                 surf_usm_h(l)%frac(m,ind_veg_wall) = building_pars_f%pars_xy(ind_wall_frac,j,i)
     4128
     4129              IF ( building_pars_f%pars_xy(ind_green_frac_r,j,i) /= building_pars_f%fill )            &
     4130                 surf_usm_h(l)%frac(m,ind_pav_green) = building_pars_f%pars_xy(ind_green_frac_r,j,i)
     4131
     4132              IF ( building_pars_f%pars_xy(ind_win_frac,j,i) /= building_pars_f%fill )                &
     4133                 surf_usm_h(l)%frac(m,ind_wat_win) = building_pars_f%pars_xy(ind_win_frac,j,i)
     4134
     4135              IF ( building_pars_f%pars_xy(ind_lai_r,j,i) /= building_pars_f%fill )                   &
     4136                 surf_usm_h(l)%lai(m) = building_pars_f%pars_xy(ind_lai_r,j,i)
     4137
     4138              IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
     4139                 surf_usm_h(l)%rho_c_wall(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
     4140                 surf_usm_h(l)%rho_c_wall(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
     4141              ENDIF
     4142
     4143
     4144              IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )                     &
     4145                 surf_usm_h(l)%rho_c_wall(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
     4146
     4147              IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )                     &
     4148                 surf_usm_h(l)%rho_c_wall(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
     4149
     4150              IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
     4151                 surf_usm_h(l)%rho_c_green(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
     4152                 surf_usm_h(l)%rho_c_green(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
     4153              ENDIF
     4154              IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )                     &
     4155                 surf_usm_h(l)%rho_c_green(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
     4156
     4157              IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )                     &
     4158                 surf_usm_h(l)%rho_c_green(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
     4159
     4160              IF ( building_pars_f%pars_xy(ind_hc1,j,i) /= building_pars_f%fill )  THEN
     4161                 surf_usm_h(l)%rho_c_window(nzb_wall,m) = building_pars_f%pars_xy(ind_hc1,j,i)
     4162                 surf_usm_h(l)%rho_c_window(nzb_wall+1,m) = building_pars_f%pars_xy(ind_hc1,j,i)
     4163              ENDIF
     4164              IF ( building_pars_f%pars_xy(ind_hc2,j,i) /= building_pars_f%fill )                     &
     4165                 surf_usm_h(l)%rho_c_window(nzb_wall+2,m) = building_pars_f%pars_xy(ind_hc2,j,i)
     4166
     4167              IF ( building_pars_f%pars_xy(ind_hc3,j,i) /= building_pars_f%fill )                     &
     4168                 surf_usm_h(l)%rho_c_window(nzb_wall+3,m) = building_pars_f%pars_xy(ind_hc3,j,i)
     4169
     4170              IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
     4171                 surf_usm_h(l)%lambda_h(nzb_wall,m)   = building_pars_f%pars_xy(ind_tc1,j,i)
     4172                 surf_usm_h(l)%lambda_h(nzb_wall+1,m) = building_pars_f%pars_xy(ind_tc1,j,i)
     4173              ENDIF
     4174              IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )                     &
     4175                 surf_usm_h(l)%lambda_h(nzb_wall+2,m) = building_pars_f%pars_xy(ind_tc2,j,i)
     4176
     4177              IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )                     &
     4178                 surf_usm_h(l)%lambda_h(nzb_wall+3,m) = building_pars_f%pars_xy(ind_tc3,j,i)
     4179
     4180              IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
     4181                 surf_usm_h(l)%lambda_h_green(nzb_wall,m) = building_pars_f%pars_xy(ind_tc1,j,i)
     4182                 surf_usm_h(l)%lambda_h_green(nzb_wall+1,m) = building_pars_f%pars_xy(ind_tc1,j,i)
     4183              ENDIF
     4184              IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )                     &
     4185                 surf_usm_h(l)%lambda_h_green(nzb_wall+2,m) = building_pars_f%pars_xy(ind_tc2,j,i)
     4186
     4187              IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )                     &
     4188                 surf_usm_h(l)%lambda_h_green(nzb_wall+3,m) = building_pars_f%pars_xy(ind_tc3,j,i)
     4189
     4190              IF ( building_pars_f%pars_xy(ind_tc1,j,i) /= building_pars_f%fill )  THEN
     4191                 surf_usm_h(l)%lambda_h_window(nzb_wall,m) = building_pars_f%pars_xy(ind_tc1,j,i)
     4192                 surf_usm_h(l)%lambda_h_window(nzb_wall+1,m) = building_pars_f%pars_xy(ind_tc1,j,i)
     4193              ENDIF
     4194              IF ( building_pars_f%pars_xy(ind_tc2,j,i) /= building_pars_f%fill )                     &
     4195                 surf_usm_h(l)%lambda_h_window(nzb_wall+2,m) = building_pars_f%pars_xy(ind_tc2,j,i)
     4196
     4197              IF ( building_pars_f%pars_xy(ind_tc3,j,i) /= building_pars_f%fill )                     &
     4198                 surf_usm_h(l)%lambda_h_window(nzb_wall+3,m) = building_pars_f%pars_xy(ind_tc3,j,i)
     4199
     4200              IF ( building_pars_f%pars_xy(ind_indoor_target_temp_summer,j,i) /=                      &
     4201                   building_pars_f%fill )                                                             &
     4202                 surf_usm_h(l)%target_temp_summer(m) =                                                &
     4203                 building_pars_f%pars_xy(ind_indoor_target_temp_summer,j,i)
     4204
     4205              IF ( building_pars_f%pars_xy(ind_indoor_target_temp_winter,j,i) /=                      &
     4206                   building_pars_f%fill )                                                             &
     4207                 surf_usm_h(l)%target_temp_winter(m) =                                                &
     4208                 building_pars_f%pars_xy(ind_indoor_target_temp_winter,j,i)
     4209
     4210              IF ( building_pars_f%pars_xy(ind_emis_wall,j,i) /= building_pars_f%fill )               &
     4211                 surf_usm_h(l)%emissivity(m,ind_veg_wall) = building_pars_f%pars_xy(ind_emis_wall,j,i)
     4212
     4213              IF ( building_pars_f%pars_xy(ind_emis_green,j,i) /= building_pars_f%fill )              &
     4214                 surf_usm_h(l)%emissivity(m,ind_pav_green) = building_pars_f%pars_xy(ind_emis_green,j,i)
     4215
     4216              IF ( building_pars_f%pars_xy(ind_emis_win,j,i) /= building_pars_f%fill )                &
     4217                 surf_usm_h(l)%emissivity(m,ind_wat_win) = building_pars_f%pars_xy(ind_emis_win,j,i)
     4218
     4219              IF ( building_pars_f%pars_xy(ind_trans,j,i) /= building_pars_f%fill )                   &
     4220                 surf_usm_h(l)%transmissivity(m) = building_pars_f%pars_xy(ind_trans,j,i)
     4221
     4222              IF ( building_pars_f%pars_xy(ind_z0,j,i) /= building_pars_f%fill )                      &
     4223                 surf_usm_h(l)%z0(m) = building_pars_f%pars_xy(ind_z0,j,i)
     4224
     4225              IF ( building_pars_f%pars_xy(ind_z0qh,j,i) /= building_pars_f%fill )                    &
     4226                 surf_usm_h(l)%z0h(m) = building_pars_f%pars_xy(ind_z0qh,j,i)
     4227
     4228              IF ( building_pars_f%pars_xy(ind_z0qh,j,i) /= building_pars_f%fill )                    &
     4229                 surf_usm_h(l)%z0q(m) = building_pars_f%pars_xy(ind_z0qh,j,i)
     4230
     4231              IF ( building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) /= building_pars_f%fill )           &
     4232                 surf_usm_h(l)%albedo_type(m,ind_veg_wall)  =                                         &
     4233                 building_pars_f%pars_xy(ind_alb_wall_agfl,j,i)
     4234
     4235              IF ( building_pars_f%pars_xy(ind_alb_green_agfl,j,i) /= building_pars_f%fill )          &
     4236                 surf_usm_h(l)%albedo_type(m,ind_pav_green) =                                         &
     4237                 building_pars_f%pars_xy(ind_alb_green_agfl,j,i)
     4238
     4239              IF ( building_pars_f%pars_xy(ind_alb_win_agfl,j,i) /= building_pars_f%fill )            &
     4240                 surf_usm_h(l)%albedo_type(m,ind_wat_win)   =                                         &
     4241                 building_pars_f%pars_xy(ind_alb_win_agfl,j,i)
     4242
     4243              IF ( building_pars_f%pars_xy(ind_thick_1_agfl,j,i) /= building_pars_f%fill )            &
     4244                 surf_usm_h(l)%zw(nzb_wall,m) = building_pars_f%pars_xy(ind_thick_1_agfl,j,i)
     4245
     4246              IF ( building_pars_f%pars_xy(ind_thick_2_agfl,j,i) /= building_pars_f%fill )            &
     4247                 surf_usm_h(l)%zw(nzb_wall+1,m) = building_pars_f%pars_xy(ind_thick_2_agfl,j,i)
     4248
     4249              IF ( building_pars_f%pars_xy(ind_thick_3_agfl,j,i) /= building_pars_f%fill )            &
     4250                 surf_usm_h(l)%zw(nzb_wall+2,m) = building_pars_f%pars_xy(ind_thick_3_agfl,j,i)
     4251
     4252              IF ( building_pars_f%pars_xy(ind_thick_4_agfl,j,i) /= building_pars_f%fill )            &
     4253                 surf_usm_h(l)%zw(nzb_wall+3,m) = building_pars_f%pars_xy(ind_thick_4_agfl,j,i)
     4254
     4255              IF ( building_pars_f%pars_xy(ind_thick_1_agfl,j,i) /= building_pars_f%fill )            &
     4256                 surf_usm_h(l)%zw_green(nzb_wall,m) = building_pars_f%pars_xy(ind_thick_1_agfl,j,i)
     4257
     4258              IF ( building_pars_f%pars_xy(ind_thick_2_agfl,j,i) /= building_pars_f%fill )            &
     4259                 surf_usm_h(l)%zw_green(nzb_wall+1,m) = building_pars_f%pars_xy(ind_thick_2_agfl,j,i)
     4260
     4261              IF ( building_pars_f%pars_xy(ind_thick_3_agfl,j,i) /= building_pars_f%fill )            &
     4262                 surf_usm_h(l)%zw_green(nzb_wall+2,m) = building_pars_f%pars_xy(ind_thick_3_agfl,j,i)
     4263
     4264              IF ( building_pars_f%pars_xy(ind_thick_4_agfl,j,i) /= building_pars_f%fill )            &
     4265                 surf_usm_h(l)%zw_green(nzb_wall+3,m) = building_pars_f%pars_xy(ind_thick_4_agfl,j,i)
     4266           ENDDO
    43534267        ENDDO
    43544268
     
    45584472!--  Read building surface pars. If present, they override LOD1-LOD3 building pars where applicable
    45594473     IF ( building_surface_pars_f%from_file )  THEN
    4560         DO  m = 1, surf_usm_h%ns
    4561            i = surf_usm_h%i(m)
    4562            j = surf_usm_h%j(m)
    4563            k = surf_usm_h%k(m)
    4564 !
    4565 !--        Iterate over surfaces in column, check height and orientation
    4566            DO  is = building_surface_pars_f%index_ji(1,j,i), &
    4567                     building_surface_pars_f%index_ji(2,j,i)
    4568               IF ( building_surface_pars_f%coords(4,is) == -surf_usm_h%koff .AND.                  &
    4569                    building_surface_pars_f%coords(1,is) == k )  THEN
    4570 
    4571                  IF ( building_surface_pars_f%pars(ind_s_wall_frac,is) /=                          &
    4572                       building_surface_pars_f%fill )                                               &
    4573                     surf_usm_h%frac(m,ind_veg_wall) =                                              &
    4574                     building_surface_pars_f%pars(ind_s_wall_frac,is)
    4575 
    4576                  IF ( building_surface_pars_f%pars(ind_s_green_frac_w,is) /=                       &
    4577                       building_surface_pars_f%fill )                                               &
    4578                     surf_usm_h%frac(m,ind_pav_green) =                                             &
    4579                     building_surface_pars_f%pars(ind_s_green_frac_w,is)
    4580 
    4581                  IF ( building_surface_pars_f%pars(ind_s_green_frac_r,is) /=                       &
    4582                       building_surface_pars_f%fill )                                               &
    4583                     surf_usm_h%frac(m,ind_pav_green) =                                             &
    4584                     building_surface_pars_f%pars(ind_s_green_frac_r,is)
    4585                     !TODO clarify: why should _w and _r be on the same surface?
    4586 
    4587                  IF ( building_surface_pars_f%pars(ind_s_win_frac,is) /=                           &
    4588                       building_surface_pars_f%fill )                                               &
    4589                     surf_usm_h%frac(m,ind_wat_win) = building_surface_pars_f%pars(ind_s_win_frac,is)
    4590 
    4591                  IF ( building_surface_pars_f%pars(ind_s_lai_r,is) /=                              &
    4592                       building_surface_pars_f%fill )                                               &
    4593                     surf_usm_h%lai(m) = building_surface_pars_f%pars(ind_s_lai_r,is)
    4594 
    4595                  IF ( building_surface_pars_f%pars(ind_s_hc1,is) /=                                &
    4596                       building_surface_pars_f%fill )  THEN
    4597                     surf_usm_h%rho_c_wall(nzb_wall:nzb_wall+1,m) =                                 &
    4598                     building_surface_pars_f%pars(ind_s_hc1,is)
    4599                     surf_usm_h%rho_c_green(nzb_wall:nzb_wall+1,m) =                                &
    4600                     building_surface_pars_f%pars(ind_s_hc1,is)
    4601                     surf_usm_h%rho_c_window(nzb_wall:nzb_wall+1,m) =                               &
    4602                     building_surface_pars_f%pars(ind_s_hc1,is)
     4474        DO  l = 0, 1
     4475           DO  m = 1, surf_usm_h(l)%ns
     4476              i = surf_usm_h(l)%i(m)
     4477              j = surf_usm_h(l)%j(m)
     4478              k = surf_usm_h(l)%k(m)
     4479!
     4480!--           Iterate over surfaces in column, check height and orientation
     4481              DO  is = building_surface_pars_f%index_ji(1,j,i), &
     4482                       building_surface_pars_f%index_ji(2,j,i)
     4483                 IF ( building_surface_pars_f%coords(4,is) == -surf_usm_h(l)%koff .AND.               &
     4484                      building_surface_pars_f%coords(1,is) == k )  THEN
     4485
     4486                    IF ( building_surface_pars_f%pars(ind_s_wall_frac,is) /=                          &
     4487                         building_surface_pars_f%fill )                                               &
     4488                       surf_usm_h(l)%frac(m,ind_veg_wall) =                                           &
     4489                       building_surface_pars_f%pars(ind_s_wall_frac,is)
     4490
     4491                    IF ( building_surface_pars_f%pars(ind_s_green_frac_w,is) /=                       &
     4492                         building_surface_pars_f%fill )                                               &
     4493                       surf_usm_h(l)%frac(m,ind_pav_green) =                                          &
     4494                       building_surface_pars_f%pars(ind_s_green_frac_w,is)
     4495
     4496                    IF ( building_surface_pars_f%pars(ind_s_green_frac_r,is) /=                       &
     4497                         building_surface_pars_f%fill )                                               &
     4498                       surf_usm_h(l)%frac(m,ind_pav_green) =                                          &
     4499                       building_surface_pars_f%pars(ind_s_green_frac_r,is)
     4500                       !TODO clarify: why should _w and _r be on the same surface?
     4501
     4502                    IF ( building_surface_pars_f%pars(ind_s_win_frac,is) /=                           &
     4503                         building_surface_pars_f%fill )                                               &
     4504                       surf_usm_h(l)%frac(m,ind_wat_win) = building_surface_pars_f%pars(ind_s_win_frac,is)
     4505
     4506                    IF ( building_surface_pars_f%pars(ind_s_lai_r,is) /=                              &
     4507                         building_surface_pars_f%fill )                                               &
     4508                       surf_usm_h(l)%lai(m) = building_surface_pars_f%pars(ind_s_lai_r,is)
     4509
     4510                    IF ( building_surface_pars_f%pars(ind_s_hc1,is) /=                                &
     4511                         building_surface_pars_f%fill )  THEN
     4512                       surf_usm_h(l)%rho_c_wall(nzb_wall:nzb_wall+1,m) =                              &
     4513                       building_surface_pars_f%pars(ind_s_hc1,is)
     4514                       surf_usm_h(l)%rho_c_green(nzb_wall:nzb_wall+1,m) =                             &
     4515                       building_surface_pars_f%pars(ind_s_hc1,is)
     4516                       surf_usm_h(l)%rho_c_window(nzb_wall:nzb_wall+1,m) =                            &
     4517                       building_surface_pars_f%pars(ind_s_hc1,is)
     4518                    ENDIF
     4519
     4520                    IF ( building_surface_pars_f%pars(ind_s_hc2,is) /=                                &
     4521                         building_surface_pars_f%fill )  THEN
     4522                       surf_usm_h(l)%rho_c_wall(nzb_wall+2,m) =                                       &
     4523                       building_surface_pars_f%pars(ind_s_hc2,is)
     4524                       surf_usm_h(l)%rho_c_green(nzb_wall+2,m) =                                      &
     4525                       building_surface_pars_f%pars(ind_s_hc2,is)
     4526                       surf_usm_h(l)%rho_c_window(nzb_wall+2,m) =                                     &
     4527                       building_surface_pars_f%pars(ind_s_hc2,is)
     4528                    ENDIF
     4529
     4530                    IF ( building_surface_pars_f%pars(ind_s_hc3,is) /=                                &
     4531                         building_surface_pars_f%fill )  THEN
     4532                       surf_usm_h(l)%rho_c_wall(nzb_wall+3,m) =                                       &
     4533                       building_surface_pars_f%pars(ind_s_hc3,is)
     4534                       surf_usm_h(l)%rho_c_green(nzb_wall+3,m) =                                      &
     4535                       building_surface_pars_f%pars(ind_s_hc3,is)
     4536                       surf_usm_h(l)%rho_c_window(nzb_wall+3,m) =                                     &
     4537                       building_surface_pars_f%pars(ind_s_hc3,is)
     4538                    ENDIF
     4539
     4540                    IF ( building_surface_pars_f%pars(ind_s_tc1,is) /=                                &
     4541                         building_surface_pars_f%fill )  THEN
     4542                       surf_usm_h(l)%lambda_h(nzb_wall:nzb_wall+1,m) =                                &
     4543                       building_surface_pars_f%pars(ind_s_tc1,is)
     4544                       surf_usm_h(l)%lambda_h_green(nzb_wall:nzb_wall+1,m) =                          &
     4545                       building_surface_pars_f%pars(ind_s_tc1,is)
     4546                       surf_usm_h(l)%lambda_h_window(nzb_wall:nzb_wall+1,m) =                         &
     4547                       building_surface_pars_f%pars(ind_s_tc1,is)
     4548                    ENDIF
     4549
     4550                    IF ( building_surface_pars_f%pars(ind_s_tc2,is) /=                                &
     4551                         building_surface_pars_f%fill )  THEN
     4552                       surf_usm_h(l)%lambda_h(nzb_wall+2,m) =                                         &
     4553                       building_surface_pars_f%pars(ind_s_tc2,is)
     4554                       surf_usm_h(l)%lambda_h_green(nzb_wall+2,m) =                                   &
     4555                       building_surface_pars_f%pars(ind_s_tc2,is)
     4556                       surf_usm_h(l)%lambda_h_window(nzb_wall+2,m) =                                  &
     4557                       building_surface_pars_f%pars(ind_s_tc2,is)
     4558                    ENDIF
     4559
     4560                    IF ( building_surface_pars_f%pars(ind_s_tc3,is) /=                                &
     4561                         building_surface_pars_f%fill )  THEN
     4562                       surf_usm_h(l)%lambda_h(nzb_wall+3,m) =                                         &
     4563                       building_surface_pars_f%pars(ind_s_tc3,is)
     4564                       surf_usm_h(l)%lambda_h_green(nzb_wall+3,m) =                                   &
     4565                       building_surface_pars_f%pars(ind_s_tc3,is)
     4566                       surf_usm_h(l)%lambda_h_window(nzb_wall+3,m) =                                  &
     4567                       building_surface_pars_f%pars(ind_s_tc3,is)
     4568                    ENDIF
     4569
     4570                    IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is) /=          &
     4571                         building_surface_pars_f%fill )                                               &
     4572                       surf_usm_h(l)%target_temp_summer(m) =                                          &
     4573                       building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is)
     4574
     4575                    IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is) /=          &
     4576                         building_surface_pars_f%fill )                                               &
     4577                       surf_usm_h(l)%target_temp_winter(m) =                                          &
     4578                       building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is)
     4579
     4580                    IF ( building_surface_pars_f%pars(ind_s_emis_wall,is) /=                          &
     4581                         building_surface_pars_f%fill )                                               &
     4582                       surf_usm_h(l)%emissivity(m,ind_veg_wall) =                                     &
     4583                       building_surface_pars_f%pars(ind_s_emis_wall,is)
     4584
     4585                    IF ( building_surface_pars_f%pars(ind_s_emis_green,is) /=                         &
     4586                         building_surface_pars_f%fill )                                               &
     4587                       surf_usm_h(l)%emissivity(m,ind_pav_green) =                                    &
     4588                       building_surface_pars_f%pars(ind_s_emis_green,is)
     4589
     4590                    IF ( building_surface_pars_f%pars(ind_s_emis_win,is) /=                           &
     4591                         building_surface_pars_f%fill )                                               &
     4592                       surf_usm_h(l)%emissivity(m,ind_wat_win) =                                      &
     4593                       building_surface_pars_f%pars(ind_s_emis_win,is)
     4594
     4595                    IF ( building_surface_pars_f%pars(ind_s_trans,is) /=                              &
     4596                         building_surface_pars_f%fill )                                               &
     4597                       surf_usm_h(l)%transmissivity(m) = building_surface_pars_f%pars(ind_s_trans,is)
     4598
     4599                    IF ( building_surface_pars_f%pars(ind_s_z0,is) /=                                 &
     4600                         building_surface_pars_f%fill )                                               &
     4601                       surf_usm_h(l)%z0(m) = building_surface_pars_f%pars(ind_s_z0,is)
     4602
     4603                    IF ( building_surface_pars_f%pars(ind_s_z0qh,is) /=                               &
     4604                         building_surface_pars_f%fill )  THEN
     4605                       surf_usm_h(l)%z0q(m) = building_surface_pars_f%pars(ind_s_z0qh,is)
     4606                       surf_usm_h(l)%z0h(m) = building_surface_pars_f%pars(ind_s_z0qh,is)
     4607                    ENDIF
     4608
     4609                    EXIT ! Surface was found and processed
    46034610                 ENDIF
    4604 
    4605                  IF ( building_surface_pars_f%pars(ind_s_hc2,is) /=                                &
    4606                       building_surface_pars_f%fill )  THEN
    4607                     surf_usm_h%rho_c_wall(nzb_wall+2,m) =                                          &
    4608                     building_surface_pars_f%pars(ind_s_hc2,is)
    4609                     surf_usm_h%rho_c_green(nzb_wall+2,m) =                                         &
    4610                     building_surface_pars_f%pars(ind_s_hc2,is)
    4611                     surf_usm_h%rho_c_window(nzb_wall+2,m) =                                        &
    4612                     building_surface_pars_f%pars(ind_s_hc2,is)
    4613                  ENDIF
    4614 
    4615                  IF ( building_surface_pars_f%pars(ind_s_hc3,is) /=                                &
    4616                       building_surface_pars_f%fill )  THEN
    4617                     surf_usm_h%rho_c_wall(nzb_wall+3,m) =                                          &
    4618                     building_surface_pars_f%pars(ind_s_hc3,is)
    4619                     surf_usm_h%rho_c_green(nzb_wall+3,m) =                                         &
    4620                     building_surface_pars_f%pars(ind_s_hc3,is)
    4621                     surf_usm_h%rho_c_window(nzb_wall+3,m) =                                        &
    4622                     building_surface_pars_f%pars(ind_s_hc3,is)
    4623                  ENDIF
    4624 
    4625                  IF ( building_surface_pars_f%pars(ind_s_tc1,is) /=                                &
    4626                       building_surface_pars_f%fill )  THEN
    4627                     surf_usm_h%lambda_h(nzb_wall:nzb_wall+1,m) =                                   &
    4628                     building_surface_pars_f%pars(ind_s_tc1,is)
    4629                     surf_usm_h%lambda_h_green(nzb_wall:nzb_wall+1,m) =                             &
    4630                     building_surface_pars_f%pars(ind_s_tc1,is)
    4631                     surf_usm_h%lambda_h_window(nzb_wall:nzb_wall+1,m) =                            &
    4632                     building_surface_pars_f%pars(ind_s_tc1,is)
    4633                  ENDIF
    4634 
    4635                  IF ( building_surface_pars_f%pars(ind_s_tc2,is) /=                                &
    4636                       building_surface_pars_f%fill )  THEN
    4637                     surf_usm_h%lambda_h(nzb_wall+2,m) =                                            &
    4638                     building_surface_pars_f%pars(ind_s_tc2,is)
    4639                     surf_usm_h%lambda_h_green(nzb_wall+2,m) =                                      &
    4640                     building_surface_pars_f%pars(ind_s_tc2,is)
    4641                     surf_usm_h%lambda_h_window(nzb_wall+2,m) =                                     &
    4642                     building_surface_pars_f%pars(ind_s_tc2,is)
    4643                  ENDIF
    4644 
    4645                  IF ( building_surface_pars_f%pars(ind_s_tc3,is) /=                                &
    4646                       building_surface_pars_f%fill )  THEN
    4647                     surf_usm_h%lambda_h(nzb_wall+3,m) =                                            &
    4648                     building_surface_pars_f%pars(ind_s_tc3,is)
    4649                     surf_usm_h%lambda_h_green(nzb_wall+3,m) =                                      &
    4650                     building_surface_pars_f%pars(ind_s_tc3,is)
    4651                     surf_usm_h%lambda_h_window(nzb_wall+3,m) =                                     &
    4652                     building_surface_pars_f%pars(ind_s_tc3,is)
    4653                  ENDIF
    4654 
    4655                  IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is) /=          &
    4656                       building_surface_pars_f%fill )                                               &
    4657                     surf_usm_h%target_temp_summer(m) =                                             &
    4658                     building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is)
    4659 
    4660                  IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is) /=          &
    4661                       building_surface_pars_f%fill )                                               &
    4662                     surf_usm_h%target_temp_winter(m) =                                             &
    4663                     building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is)
    4664 
    4665                  IF ( building_surface_pars_f%pars(ind_s_emis_wall,is) /=                          &
    4666                       building_surface_pars_f%fill )                                               &
    4667                     surf_usm_h%emissivity(m,ind_veg_wall) =                                        &
    4668                     building_surface_pars_f%pars(ind_s_emis_wall,is)
    4669 
    4670                  IF ( building_surface_pars_f%pars(ind_s_emis_green,is) /=                         &
    4671                       building_surface_pars_f%fill )                                               &
    4672                     surf_usm_h%emissivity(m,ind_pav_green) =                                       &
    4673                     building_surface_pars_f%pars(ind_s_emis_green,is)
    4674 
    4675                  IF ( building_surface_pars_f%pars(ind_s_emis_win,is) /=                           &
    4676                       building_surface_pars_f%fill )                                               &
    4677                     surf_usm_h%emissivity(m,ind_wat_win) =                                         &
    4678                     building_surface_pars_f%pars(ind_s_emis_win,is)
    4679 
    4680                  IF ( building_surface_pars_f%pars(ind_s_trans,is) /=                              &
    4681                       building_surface_pars_f%fill )                                               &
    4682                     surf_usm_h%transmissivity(m) = building_surface_pars_f%pars(ind_s_trans,is)
    4683 
    4684                  IF ( building_surface_pars_f%pars(ind_s_z0,is) /=                                 &
    4685                       building_surface_pars_f%fill )                                               &
    4686                     surf_usm_h%z0(m) = building_surface_pars_f%pars(ind_s_z0,is)
    4687 
    4688                  IF ( building_surface_pars_f%pars(ind_s_z0qh,is) /=                               &
    4689                       building_surface_pars_f%fill )  THEN
    4690                     surf_usm_h%z0q(m) = building_surface_pars_f%pars(ind_s_z0qh,is)
    4691                     surf_usm_h%z0h(m) = building_surface_pars_f%pars(ind_s_z0qh,is)
    4692                  ENDIF
    4693 
    4694                  EXIT ! Surface was found and processed
    4695               ENDIF
     4611              ENDDO
    46964612           ENDDO
    46974613        ENDDO
     
    48424758     ENDIF
    48434759!
    4844 !--    Initialize albedo type via given type from static input file. Please note, even though
    4845 !--    the albedo type has been already given by the pars, albedo_type overwrites these values.
    4846        IF ( albedo_type_f%from_file )  THEN
    4847           DO  m = 1, surf_usm_h%ns
    4848              i = surf_usm_h%i(m)
    4849              j = surf_usm_h%j(m)
    4850              IF ( albedo_type_f%var(j,i) /= albedo_type_f%fill )                                   &
    4851                 surf_usm_h%albedo_type(m,:) = albedo_type_f%var(j,i)
    4852           ENDDO
    4853           DO  l = 0, 3
    4854              DO  m = 1, surf_usm_v(l)%ns
    4855                 i = surf_usm_v(l)%i(m) + surf_usm_v(l)%ioff
    4856                 j = surf_usm_v(l)%j(m) + surf_usm_v(l)%joff
    4857 
    4858                 IF ( albedo_type_f%var(j,i) /= albedo_type_f%fill )                                &
    4859                    surf_usm_v(l)%albedo_type(m,:) = albedo_type_f%var(j,i)
    4860              ENDDO
    4861           ENDDO
    4862        ENDIF
     4760!--  Initialize albedo type via given type from static input file. Please note, even though
     4761!--  the albedo type has been already given by the pars, albedo_type overwrites these values.
     4762     IF ( albedo_type_f%from_file )  THEN
     4763        DO  l = 0, 1
     4764           DO  m = 1, surf_usm_h(l)%ns
     4765              i = surf_usm_h(l)%i(m)
     4766              j = surf_usm_h(l)%j(m)
     4767              IF ( albedo_type_f%var(j,i) /= albedo_type_f%fill )                               &
     4768                 surf_usm_h(l)%albedo_type(m,:) = albedo_type_f%var(j,i)
     4769           ENDDO
     4770        ENDDO
     4771        DO  l = 0, 3
     4772           DO  m = 1, surf_usm_v(l)%ns
     4773              i = surf_usm_v(l)%i(m) + surf_usm_v(l)%ioff
     4774              j = surf_usm_v(l)%j(m) + surf_usm_v(l)%joff
     4775             IF ( albedo_type_f%var(j,i) /= albedo_type_f%fill )                                &
     4776                 surf_usm_v(l)%albedo_type(m,:) = albedo_type_f%var(j,i)
     4777           ENDDO
     4778        ENDDO
     4779     ENDIF
    48634780!
    48644781!--  Run further checks to ensure that the respecitve material fractions are prescribed properly.
    48654782!--  Start with horizontal surfaces (roofs).
    48664783     relative_fractions_corrected = .FALSE.
    4867      DO  m = 1, surf_usm_h%ns
    4868         sum_frac = SUM( surf_usm_h%frac(m,:) )
    4869         IF ( sum_frac /= 1.0_wp )  THEN
    4870            relative_fractions_corrected = .TRUE.
    4871 !
    4872 !--        Normalize relative fractions to 1. Deviations from 1 can arise, e.g. by rounding errors
    4873 !--        but also by inconsistent driver creation.
    4874            IF ( sum_frac /= 0.0_wp )  THEN
    4875               surf_usm_h%frac(m,:) = surf_usm_h%frac(m,:) / sum_frac
    4876 !
    4877 !--        In case all relative fractions are erroneously set to zero, set wall fraction to 1.
    4878            ELSE
    4879               surf_usm_h%frac(m,ind_veg_wall)  = 1.0_wp
    4880               surf_usm_h%frac(m,ind_wat_win)   = 0.0_wp
    4881               surf_usm_h%frac(m,ind_pav_green) = 0.0_wp
     4784     DO  l = 0, 1
     4785        DO  m = 1, surf_usm_h(l)%ns
     4786           sum_frac = SUM( surf_usm_h(l)%frac(m,:) )
     4787           IF ( sum_frac /= 1.0_wp )  THEN
     4788              relative_fractions_corrected = .TRUE.
     4789!
     4790!--           Normalize relative fractions to 1. Deviations from 1 can arise, e.g. by rounding errors
     4791!--           but also by inconsistent driver creation.
     4792              IF ( sum_frac /= 0.0_wp )  THEN
     4793                 surf_usm_h(l)%frac(m,:) = surf_usm_h(l)%frac(m,:) / sum_frac
     4794!
     4795!--           In case all relative fractions are erroneously set to zero, set wall fraction to 1.
     4796              ELSE
     4797                 surf_usm_h(l)%frac(m,ind_veg_wall)  = 1.0_wp
     4798                 surf_usm_h(l)%frac(m,ind_wat_win)   = 0.0_wp
     4799                 surf_usm_h(l)%frac(m,ind_pav_green) = 0.0_wp
     4800              ENDIF
    48824801           ENDIF
    4883         ENDIF
     4802        ENDDO
    48844803     ENDDO
    48854804!
     
    49284847     ENDIF
    49294848!
    4930 !--  Read the surface_types array.
    4931 !--  Please note, here also initialization of surface attributes is done as long as _urbsurf and
    4932 !--  _surfpar files are available. Values from above will be overwritten. This might be removed
    4933 !--  later, but is still in the code to enable compatibility with older model version.
    4934      CALL usm_read_urban_surface_types()
    4935 
    4936      CALL usm_init_material_model()
     4849!--  Initialization of the wall/roof materials
     4850     CALL usm_init_wall_heat_model()
    49374851
    49384852!--  Init skin layer properties (can be done after initialization of wall layers)
    4939 
    4940      DO  m = 1, surf_usm_h%ns
    4941         i = surf_usm_h%i(m)
    4942         j = surf_usm_h%j(m)
    4943 
    4944          surf_usm_h%c_surface(m)           = surf_usm_h%rho_c_wall(nzb_wall,m) *                   &
    4945                                              surf_usm_h%dz_wall(nzb_wall,m) * 0.25_wp
    4946          surf_usm_h%lambda_surf(m)         = surf_usm_h%lambda_h(nzb_wall,m) *                     &
    4947                                              surf_usm_h%ddz_wall(nzb_wall,m) * 2.0_wp
    4948          surf_usm_h%c_surface_green(m)     = surf_usm_h%rho_c_wall(nzb_wall,m) *                   &
    4949                                              surf_usm_h%dz_wall(nzb_wall,m) * 0.25_wp
    4950          surf_usm_h%lambda_surf_green(m)   = surf_usm_h%lambda_h_green(nzb_wall,m) *               &
    4951                                              surf_usm_h%ddz_green(nzb_wall,m) * 2.0_wp
    4952          surf_usm_h%c_surface_window(m)    = surf_usm_h%rho_c_window(nzb_wall,m) *                 &
    4953                                              surf_usm_h%dz_window(nzb_wall,m) * 0.25_wp
    4954          surf_usm_h%lambda_surf_window(m)  = surf_usm_h%lambda_h_window(nzb_wall,m) *              &
    4955                                              surf_usm_h%ddz_window(nzb_wall,m) * 2.0_wp
     4853     DO  l = 0, 1
     4854        DO  m = 1, surf_usm_h(l)%ns
     4855           i = surf_usm_h(l)%i(m)
     4856           j = surf_usm_h(l)%j(m)
     4857
     4858            surf_usm_h(l)%c_surface(m)           = surf_usm_h(l)%rho_c_wall(nzb_wall,m) *          &
     4859                                                surf_usm_h(l)%dz_wall(nzb_wall,m) * 0.25_wp
     4860            surf_usm_h(l)%lambda_surf(m)         = surf_usm_h(l)%lambda_h(nzb_wall,m) *            &
     4861                                                surf_usm_h(l)%ddz_wall(nzb_wall,m) * 2.0_wp
     4862            surf_usm_h(l)%c_surface_green(m)     = surf_usm_h(l)%rho_c_wall(nzb_wall,m) *          &
     4863                                                surf_usm_h(l)%dz_wall(nzb_wall,m) * 0.25_wp
     4864            surf_usm_h(l)%lambda_surf_green(m)   = surf_usm_h(l)%lambda_h_green(nzb_wall,m) *      &
     4865                                                surf_usm_h(l)%ddz_green(nzb_wall,m) * 2.0_wp
     4866            surf_usm_h(l)%c_surface_window(m)    = surf_usm_h(l)%rho_c_window(nzb_wall,m) *        &
     4867                                                surf_usm_h(l)%dz_window(nzb_wall,m) * 0.25_wp
     4868            surf_usm_h(l)%lambda_surf_window(m)  = surf_usm_h(l)%lambda_h_window(nzb_wall,m) *     &
     4869                                                surf_usm_h(l)%ddz_window(nzb_wall,m) * 2.0_wp
     4870        ENDDO
    49564871     ENDDO
    49574872
     
    49774892
    49784893!
    4979 !--  Init anthropogenic sources of heat
    4980      IF ( usm_anthropogenic_heat )  THEN
    4981 !
    4982 !--      Init anthropogenic sources of heat (from transportation for now)
    4983          CALL usm_read_anthropogenic_heat()
    4984      ENDIF
    4985 
    4986 !
    49874894!-- Check for consistent initialization.
    49884895!-- Check if roughness length for momentum, or heat, exceed surface-layer height and decrease local
    49894896!-- roughness length where necessary.
    4990     DO  m = 1, surf_usm_h%ns
    4991        IF ( surf_usm_h%z0(m) >= surf_usm_h%z_mo(m) )  THEN
    4992 
    4993           surf_usm_h%z0(m) = 0.9_wp * surf_usm_h%z_mo(m)
    4994 
    4995           WRITE( message_string, * ) 'z0 exceeds surface-layer height at horizontal urban ' //     &
    4996                                      'surface and is decreased appropriately at grid point ' //    &
    4997                                      '(i,j) = ',  surf_usm_h%i(m), surf_usm_h%j(m)
    4998           CALL message( 'urban_surface_model_mod', 'PA0503', 0, 0, myid, 6, 0 )
    4999        ENDIF
    5000        IF ( surf_usm_h%z0h(m) >= surf_usm_h%z_mo(m) )  THEN
    5001 
    5002           surf_usm_h%z0h(m) = 0.9_wp * surf_usm_h%z_mo(m)
    5003           surf_usm_h%z0q(m) = 0.9_wp * surf_usm_h%z_mo(m)
    5004 
    5005           WRITE( message_string, * ) 'z0h exceeds surface-layer height at horizontal urban ' //    &
    5006                                      'surface and is decreased appropriately at grid point ' //    &
    5007                                      '(i,j) = ', surf_usm_h%i(m), surf_usm_h%j(m)
    5008           CALL message( 'urban_surface_model_mod', 'PA0507', 0, 0, myid, 6, 0 )
    5009        ENDIF
     4897    DO  l = 0, 1
     4898       DO  m = 1, surf_usm_h(l)%ns
     4899          IF ( surf_usm_h(l)%z0(m) >= surf_usm_h(l)%z_mo(m) )  THEN
     4900
     4901             surf_usm_h(l)%z0(m) = 0.9_wp * surf_usm_h(l)%z_mo(m)
     4902
     4903             WRITE( message_string, * ) 'z0 exceeds surface-layer height at horizontal urban ' //     &
     4904                                        'surface and is decreased appropriately at grid point ' //    &
     4905                                        '(i,j) = ',  surf_usm_h(l)%i(m), surf_usm_h(l)%j(m)
     4906             CALL message( 'urban_surface_model_mod', 'PA0503', 0, 0, myid, 6, 0 )
     4907          ENDIF
     4908          IF ( surf_usm_h(l)%z0h(m) >= surf_usm_h(l)%z_mo(m) )  THEN
     4909
     4910             surf_usm_h(l)%z0h(m) = 0.9_wp * surf_usm_h(l)%z_mo(m)
     4911             surf_usm_h(l)%z0q(m) = 0.9_wp * surf_usm_h(l)%z_mo(m)
     4912
     4913             WRITE( message_string, * ) 'z0h exceeds surface-layer height at horizontal urban ' //    &
     4914                                        'surface and is decreased appropriately at grid point ' //    &
     4915                                        '(i,j) = ', surf_usm_h(l)%i(m), surf_usm_h(l)%j(m)
     4916             CALL message( 'urban_surface_model_mod', 'PA0507', 0, 0, myid, 6, 0 )
     4917          ENDIF
     4918       ENDDO
    50104919    ENDDO
    50114920
     
    50444953!--     At horizontal surfaces. Please note, t_surf_wall_h is defined on a different data type,
    50454954!--     but with the same dimension.
    5046          DO  m = 1, surf_usm_h%ns
    5047             i = surf_usm_h%i(m)
    5048             j = surf_usm_h%j(m)
    5049             k = surf_usm_h%k(m)
    5050 
    5051             t_surf_wall_h(m) = pt(k,j,i) * exner(k)
    5052             t_surf_window_h(m) = pt(k,j,i) * exner(k)
    5053             t_surf_green_h(m) = pt(k,j,i) * exner(k)
    5054             surf_usm_h%pt_surface(m) = pt(k,j,i) * exner(k)
     4955         DO  l = 0, 1
     4956            DO  m = 1, surf_usm_h(l)%ns
     4957               i = surf_usm_h(l)%i(m)
     4958               j = surf_usm_h(l)%j(m)
     4959               k = surf_usm_h(l)%k(m)
     4960
     4961               t_surf_wall_h(l)%val(m) = pt(k,j,i) * exner(k)
     4962               t_surf_window_h(l)%val(m) = pt(k,j,i) * exner(k)
     4963               t_surf_green_h(l)%val(m) = pt(k,j,i) * exner(k)
     4964               surf_usm_h(l)%pt_surface(m) = pt(k,j,i) * exner(k)
     4965            ENDDO
    50554966         ENDDO
    50564967!
     
    50624973               k = surf_usm_v(l)%k(m)
    50634974
    5064                t_surf_wall_v(l)%t(m) = pt(k,j,i) * exner(k)
    5065                t_surf_window_v(l)%t(m) = pt(k,j,i) * exner(k)
    5066                t_surf_green_v(l)%t(m) = pt(k,j,i) * exner(k)
     4975               t_surf_wall_v(l)%val(m) = pt(k,j,i) * exner(k)
     4976               t_surf_window_v(l)%val(m) = pt(k,j,i) * exner(k)
     4977               t_surf_green_v(l)%val(m) = pt(k,j,i) * exner(k)
    50674978               surf_usm_v(l)%pt_surface(m) = pt(k,j,i) * exner(k)
    50684979            ENDDO
     
    50734984!--      Note, at urban surfaces q_surface is initialized with 0.
    50744985         IF ( humidity )  THEN
    5075             DO  m = 1, surf_usm_h%ns
    5076                surf_usm_h%q_surface(m) = 0.0_wp
     4986            DO  l = 0, 1
     4987               DO  m = 1, surf_usm_h(l)%ns
     4988                  surf_usm_h(l)%q_surface(m) = 0.0_wp
     4989               ENDDO
    50774990            ENDDO
    50784991            DO  l = 0, 3
     
    50875000!--      and profile is logaritmic (linear in nz).
    50885001!--      Horizontal surfaces
    5089          DO  m = 1, surf_usm_h%ns
    5090 !
    5091 !--         Roof
    5092             IF ( surf_usm_h%isroof_surf(m) )  THEN
    5093                 tin = roof_inner_temperature
    5094                 twin = window_inner_temperature
    5095 !
    5096 !--         Normal land surface
    5097             ELSE
    5098                 tin = soil_inner_temperature
    5099                 twin = window_inner_temperature
    5100             ENDIF
    5101 
    5102             DO k = nzb_wall, nzt_wall+1
    5103                 c = REAL( k - nzb_wall, wp ) / REAL( nzt_wall + 1 - nzb_wall , wp )
    5104 
    5105                 t_wall_h(k,m) = ( 1.0_wp - c ) * t_surf_wall_h(m) + c * tin
    5106                 t_window_h(k,m) = ( 1.0_wp - c ) * t_surf_window_h(m) + c * twin
    5107                 t_green_h(k,m) = t_surf_wall_h(m)
    5108                 swc_h(k,m) = 0.5_wp
    5109                 swc_sat_h(k,m) = 0.95_wp
    5110                 swc_res_h(k,m) = 0.05_wp
    5111                 rootfr_h(k,m) = 0.1_wp
    5112                 wilt_h(k,m) = 0.1_wp
    5113                 fc_h(k,m) = 0.9_wp
     5002         DO  l = 0, 1
     5003            DO  m = 1, surf_usm_h(l)%ns
     5004!
     5005!--            Roof
     5006               IF ( surf_usm_h(l)%isroof_surf(m) )  THEN
     5007                   tin = roof_inner_temperature
     5008                   twin = window_inner_temperature
     5009!
     5010!--            Normal land surface
     5011               ELSE
     5012                   tin = soil_inner_temperature
     5013                   twin = window_inner_temperature
     5014               ENDIF
     5015
     5016               DO k = nzb_wall, nzt_wall+1
     5017                   c = REAL( k - nzb_wall, wp ) / REAL( nzt_wall + 1 - nzb_wall , wp )
     5018
     5019                   t_wall_h(l)%val(k,m) = ( 1.0_wp - c ) * t_surf_wall_h(l)%val(m) + c * tin
     5020                   t_window_h(l)%val(k,m) = ( 1.0_wp - c ) * t_surf_window_h(l)%val(m) + c * twin
     5021                   t_green_h(l)%val(k,m) = t_surf_wall_h(l)%val(m)
     5022                   swc_h(l)%val(k,m) = 0.5_wp
     5023                   swc_sat_h(l)%val(k,m) = 0.95_wp
     5024                   swc_res_h(l)%val(k,m) = 0.05_wp
     5025                   rootfr_h(l)%val(k,m) = 0.1_wp
     5026                   wilt_h(l)%val(k,m) = 0.1_wp
     5027                   fc_h(l)%val(k,m) = 0.9_wp
     5028               ENDDO
    51145029            ENDDO
    51155030         ENDDO
     
    51255040               DO k = nzb_wall, nzt_wall+1
    51265041                  c = REAL( k - nzb_wall, wp ) / REAL( nzt_wall + 1 - nzb_wall , wp )
    5127                   t_wall_v(l)%t(k,m) = ( 1.0_wp - c ) * t_surf_wall_v(l)%t(m) + c * tin
    5128                   t_window_v(l)%t(k,m) = ( 1.0_wp - c ) * t_surf_window_v(l)%t(m) + c * twin
    5129                   t_green_v(l)%t(k,m) = t_surf_wall_v(l)%t(m)
     5042                  t_wall_v(l)%val(k,m) = ( 1.0_wp - c ) * t_surf_wall_v(l)%val(m) + c * tin
     5043                  t_window_v(l)%val(k,m) = ( 1.0_wp - c ) * t_surf_window_v(l)%val(m) + c * twin
     5044                  t_green_v(l)%val(k,m) = t_surf_wall_v(l)%val(m)
    51305045               ENDDO
    51315046            ENDDO
    51325047         ENDDO
    51335048     ENDIF
    5134 
    5135 !
    5136 !--  If specified, replace constant wall temperatures with fully 3D values from file
    5137      IF ( read_wall_temp_3d )  CALL usm_read_wall_temperature()
    51385049
    51395050!--
     
    51595070!
    51605071!-- Set initial values for prognostic soil quantities
    5161     IF ( TRIM( initializing_actions ) /= 'read_restart_data' )  THEN
    5162        m_liq_usm_h%var_usm_1d  = 0.0_wp
    5163     ENDIF
    5164     m_liq_usm_h_p = m_liq_usm_h
    5165 !
    5166 !-- Set initial values for prognostic quantities
    5167 !-- Horizontal surfaces
    5168     surf_usm_h%c_liq     = 0.0_wp
    5169     surf_usm_h%qsws_liq  = 0.0_wp
    5170     surf_usm_h%qsws_veg  = 0.0_wp
     5072    DO  l = 0, 1
     5073       IF ( TRIM( initializing_actions ) /= 'read_restart_data' )  THEN
     5074          m_liq_usm_h(l)%val  = 0.0_wp
     5075       ENDIF
     5076       m_liq_usm_h_p(l)%val = m_liq_usm_h(l)%val
     5077!
     5078!--    Set initial values for prognostic quantities
     5079!--    Horizontal surfaces
     5080       surf_usm_h(l)%c_liq     = 0.0_wp
     5081       surf_usm_h(l)%qsws_liq  = 0.0_wp
     5082       surf_usm_h(l)%qsws_veg  = 0.0_wp
     5083    ENDDO
    51715084
    51725085!
     
    51955108!> during spinup to increase possible timestep.
    51965109!--------------------------------------------------------------------------------------------------!
    5197  SUBROUTINE usm_material_heat_model( during_spinup )
     5110 SUBROUTINE usm_wall_heat_model( horizontal, l, during_spinup )
    51985111
    51995112
    52005113    IMPLICIT NONE
    52015114
    5202     INTEGER(iwp)  ::  i,j,k,l,kw, m  !< running indices
    5203 
    5204     LOGICAL  ::  during_spinup  !< if true, no calculation of window temperatures
     5115    LOGICAL       ::  horizontal     !< Flag indicating horizontal or vertical surfaces
     5116    INTEGER(iwp)  ::  l              !< direction index
     5117    LOGICAL       ::  during_spinup  !< if true, no calculation of window temperatures
     5118
     5119    INTEGER(iwp)  ::  i,j,k,kw, m    !< running indices
    52055120
    52065121    REAL(wp)  ::  win_absorp  !< absorption coefficient from transmissivity
     
    52095124    REAL(wp), DIMENSION(nzb_wall:nzt_wall)  ::  wtend, wintend  !< tendency
    52105125
    5211 
     5126    TYPE(surf_type),        POINTER         ::  surf            !< surface-date type variable
     5127    TYPE(surf_type_2d_usm), POINTER         ::  t_wall
     5128    TYPE(surf_type_2d_usm), POINTER         ::  t_wall_p
     5129    TYPE(surf_type_2d_usm), POINTER         ::  t_window
     5130    TYPE(surf_type_2d_usm), POINTER         ::  t_window_p
     5131    TYPE(surf_type_2d_usm), POINTER         ::  t_green
    52125132
    52135133    IF ( debug_output_timestep )  THEN
    5214        WRITE( debug_string, * ) 'usm_material_heat_model | during_spinup: ', during_spinup
     5134       WRITE( debug_string, * ) 'usm_wall_heat_model: ', horizontal, l, during_spinup
    52155135       CALL debug_message( debug_string, 'start' )
    52165136    ENDIF
     
    52245144    ENDIF
    52255145
    5226 !
    5227 !-- For horizontal surfaces
     5146    IF ( horizontal )  THEN
     5147       surf         => surf_usm_h(l)
     5148       t_wall       => t_wall_h(l)
     5149       t_wall_p     => t_wall_h_p(l)
     5150       t_window     => t_window_h(l)
     5151       t_window_p   => t_window_h_p(l)
     5152       t_green      => t_green_h(l)
     5153    ELSE
     5154       surf         => surf_usm_v(l)
     5155       t_wall       => t_wall_v(l)
     5156       t_wall_p     => t_wall_v_p(l)
     5157       t_window     => t_window_v(l)
     5158       t_window_p   => t_window_v_p(l)
     5159       t_green      => t_green_v(l)
     5160    ENDIF
     5161!
     5162!-- Cycle for all surfaces in given direction
    52285163    !$OMP DO SCHEDULE (STATIC)
    5229     DO  m = 1, surf_usm_h%ns
     5164    DO  m = 1, surf%ns
    52305165!
    52315166!--    Obtain indices
    5232        i = surf_usm_h%i(m)
    5233        j = surf_usm_h%j(m)
    5234        k = surf_usm_h%k(m)
    5235 !
    5236 !--    Prognostic equation for ground/roof temperature t_wall_h
     5167       i = surf%i(m)
     5168       j = surf%j(m)
     5169       k = surf%k(m)
     5170!
     5171!--    Prognostic equation for ground/roof temperature t_wall
    52375172       wtend(:) = 0.0_wp
    5238        wtend(nzb_wall) = ( 1.0_wp / surf_usm_h%rho_c_wall(nzb_wall,m) )                            &
    5239                           * ( surf_usm_h%lambda_h(nzb_wall,m) * wall_mod(nzb_wall)                 &
    5240                               * ( t_wall_h(nzb_wall+1,m) - t_wall_h(nzb_wall,m) )                  &
    5241                               * surf_usm_h%ddz_wall(nzb_wall+1,m)                                  &
    5242                               + surf_usm_h%frac(m,ind_veg_wall)                                    &
    5243                               / ( surf_usm_h%frac(m,ind_veg_wall)                                  &
    5244                                   + surf_usm_h%frac(m,ind_pav_green) )                             &
    5245                               * surf_usm_h%wghf_eb(m)                                              &
    5246                               - surf_usm_h%frac(m,ind_pav_green)                                   &
    5247                               / ( surf_usm_h%frac(m,ind_veg_wall)                                  &
    5248                                   + surf_usm_h%frac(m,ind_pav_green) )                             &
    5249                               * ( surf_usm_h%lambda_h_green(nzt_wall,m)                            &
    5250                               * wall_mod(nzt_wall)                                                 &
    5251                               * surf_usm_h%ddz_green(nzt_wall,m)                                   &
    5252                               + surf_usm_h%lambda_h(nzb_wall,m)                                    &
    5253                               * wall_mod(nzb_wall)                                                 &
    5254                               * surf_usm_h%ddz_wall(nzb_wall,m) )                                  &
    5255                               / ( surf_usm_h%ddz_green(nzt_wall,m)                                 &
    5256                               + surf_usm_h%ddz_wall(nzb_wall,m) )                                  &
    5257                               * ( t_wall_h(nzb_wall,m) - t_green_h(nzt_wall,m) )                   &
    5258                             ) * surf_usm_h%ddz_wall_stag(nzb_wall,m)
    5259 !
    5260 !-- If indoor model is used inner wall layer is calculated by using iwghf (indoor wall ground heat flux)
     5173       wtend(nzb_wall) = ( 1.0_wp / surf%rho_c_wall(nzb_wall,m) )                     &
     5174                          * ( surf%lambda_h(nzb_wall,m) * wall_mod(nzb_wall)          &
     5175                              * ( t_wall%val(nzb_wall+1,m) - t_wall%val(nzb_wall,m) )              &
     5176                              * surf%ddz_wall(nzb_wall+1,m)                           &
     5177                              + surf%frac(m,ind_veg_wall)                             &
     5178                              / ( surf%frac(m,ind_veg_wall)                           &
     5179                                  + surf%frac(m,ind_pav_green) )                      &
     5180                              * surf%wghf_eb(m)                                       &
     5181                              - surf%frac(m,ind_pav_green)                            &
     5182                              / ( surf%frac(m,ind_veg_wall)                           &
     5183                                  + surf%frac(m,ind_pav_green) )                      &
     5184                              * ( surf%lambda_h_green(nzt_wall,m)                     &
     5185                              * wall_mod(nzt_wall)                                             &
     5186                              * surf%ddz_green(nzt_wall,m)                            &
     5187                              + surf%lambda_h(nzb_wall,m)                             &
     5188                              * wall_mod(nzb_wall)                                             &
     5189                              * surf%ddz_wall(nzb_wall,m) )                           &
     5190                              / ( surf%ddz_green(nzt_wall,m)                          &
     5191                              + surf%ddz_wall(nzb_wall,m) )                           &
     5192                              * ( t_wall%val(nzb_wall,m) - t_green%val(nzt_wall,m) )               &
     5193                            ) * surf%ddz_wall_stag(nzb_wall,m)
     5194!
     5195!--    If indoor model is used inner wall layer is calculated by using iwghf (indoor wall ground heat flux)
    52615196       IF ( indoor_model )  THEN
    52625197          DO  kw = nzb_wall+1, nzt_wall-1
    5263              wtend(kw) = ( 1.0_wp / surf_usm_h%rho_c_wall(kw,m) )                                  &
    5264                          * ( surf_usm_h%lambda_h(kw,m)                                             &
    5265                              * wall_mod(kw)                                                        &
    5266                              * ( t_wall_h(kw+1,m) - t_wall_h(kw,m) )                               &
    5267                              * surf_usm_h%ddz_wall(kw+1,m)                                         &
    5268                              - surf_usm_h%lambda_h(kw-1,m)                                         &
    5269                              * wall_mod(kw-1)                                                      &
    5270                              * ( t_wall_h(kw,m) - t_wall_h(kw-1,m) )                               &
    5271                              * surf_usm_h%ddz_wall(kw,m)                                           &
    5272                            ) * surf_usm_h%ddz_wall_stag(kw,m)
     5198             wtend(kw) = ( 1.0_wp / surf%rho_c_wall(kw,m) )                           &
     5199                         * ( surf%lambda_h(kw,m) * wall_mod(kw)                       &
     5200                             * ( t_wall%val(kw+1,m) - t_wall%val(kw,m) )                           &
     5201                             * surf%ddz_wall(kw+1,m)                                  &
     5202                             - surf%lambda_h(kw-1,m) * wall_mod(kw-1)                 &
     5203                             * ( t_wall%val(kw,m) - t_wall%val(kw-1,m) )                           &
     5204                             * surf%ddz_wall(kw,m)                                    &
     5205                           ) * surf%ddz_wall_stag(kw,m)
    52735206          ENDDO
    5274           wtend(nzt_wall) = ( 1.0_wp / surf_usm_h%rho_c_wall(nzt_wall,m) )                         &
    5275                             * ( -surf_usm_h%lambda_h(nzt_wall-1,m) * wall_mod(nzt_wall-1)          &
    5276                                 * ( t_wall_h(nzt_wall,m) - t_wall_h(nzt_wall-1,m) )                &
    5277                                 * surf_usm_h%ddz_wall(nzt_wall,m)                                  &
    5278                                 + surf_usm_h%iwghf_eb(m)                                           &
    5279                               ) * surf_usm_h%ddz_wall_stag(nzt_wall,m)
     5207          wtend(nzt_wall) = ( 1.0_wp / surf%rho_c_wall(nzt_wall,m) )                  &
     5208                            * ( -surf%lambda_h(nzt_wall-1,m) * wall_mod(nzt_wall-1)   &
     5209                                * ( t_wall%val(nzt_wall,m) - t_wall%val(nzt_wall-1,m) )            &
     5210                                * surf%ddz_wall(nzt_wall,m)                           &
     5211                                + surf%iwghf_eb(m)                                    &
     5212                              ) * surf%ddz_wall_stag(nzt_wall,m)
    52805213       ELSE
    52815214          DO  kw = nzb_wall+1, nzt_wall
    5282              wtend(kw) = ( 1.0_wp / surf_usm_h%rho_c_wall(kw,m) )                                  &
    5283                         * ( surf_usm_h%lambda_h(kw,m)  * wall_mod(kw)                              &
    5284                             * ( t_wall_h(kw+1,m) - t_wall_h(kw,m) )                                &
    5285                             * surf_usm_h%ddz_wall(kw+1,m)                                          &
    5286                             - surf_usm_h%lambda_h(kw-1,m)                                          &
    5287                             * wall_mod(kw-1)                                                       &
    5288                             * ( t_wall_h(kw,m) - t_wall_h(kw-1,m) )                                &
    5289                             * surf_usm_h%ddz_wall(kw,m)                                            &
    5290                           ) * surf_usm_h%ddz_wall_stag(kw,m)
     5215             wtend(kw) = ( 1.0_wp / surf%rho_c_wall(kw,m) )                           &
     5216                        * ( surf%lambda_h(kw,m)  * wall_mod(kw)                       &
     5217                            * ( t_wall%val(kw+1,m) - t_wall%val(kw,m) )                            &
     5218                            * surf%ddz_wall(kw+1,m)                                   &
     5219                            - surf%lambda_h(kw-1,m) * wall_mod(kw-1)                  &
     5220                            * ( t_wall%val(kw,m) - t_wall%val(kw-1,m) )                            &
     5221                            * surf%ddz_wall(kw,m)                                     &
     5222                          ) * surf%ddz_wall_stag(kw,m)
    52915223          ENDDO
    52925224       ENDIF
    52935225
    5294        t_wall_h_p(nzb_wall:nzt_wall,m) = t_wall_h(nzb_wall:nzt_wall,m) + dt_3d                     &
    5295                                          * ( tsc(2) * wtend(nzb_wall:nzt_wall) + tsc(3)            &
    5296                                              * surf_usm_h%tt_wall_m(nzb_wall:nzt_wall,m) )
    5297 
    5298 !
    5299 !-- During spinup the tempeature inside window layers is not calculated to make larger timesteps possible
     5226       t_wall_p%val(nzb_wall:nzt_wall,m) = t_wall%val(nzb_wall:nzt_wall,m) + dt_3d                 &
     5227                                         * ( tsc(2) * wtend(nzb_wall:nzt_wall) + tsc(3)        &
     5228                                             * surf%tt_wall_m(nzb_wall:nzt_wall,m) )
     5229
     5230!
     5231!--    During spinup the tempeature inside window layers is not calculated to make larger timesteps possible
    53005232       IF ( .NOT. during_spinup )  THEN
    5301           win_absorp = -log( surf_usm_h%transmissivity(m) ) / surf_usm_h%zw_window(nzt_wall,m)
    5302 !
    5303 !--       Prognostic equation for ground/roof window temperature t_window_h takes absorption of
    5304 !--       shortwave radiation into account
     5233          win_absorp = -log( surf%transmissivity(m) ) /                                &
     5234                        surf%zw_window(nzt_wall,m)
     5235!
     5236!--       Prognostic equation for ground/roof window temperature t_window takes absorption
     5237!--       of shortwave radiation into account
    53055238          wintend(:) = 0.0_wp
    5306           wintend(nzb_wall) = ( 1.0_wp / surf_usm_h%rho_c_window(nzb_wall,m) ) *                   &
    5307                               ( surf_usm_h%lambda_h_window(nzb_wall,m)                             &
    5308                                 * ( t_window_h(nzb_wall+1,m) - t_window_h(nzb_wall,m) )            &
    5309                                 * surf_usm_h%ddz_window(nzb_wall+1,m)                              &
    5310                                 + surf_usm_h%wghf_eb_window(m)                                     &
    5311                                 + surf_usm_h%rad_sw_in(m)                                          &
    5312                                 * ( 1.0_wp - exp( -win_absorp * surf_usm_h%zw_window(nzb_wall,m) ) ) &
    5313                               ) * surf_usm_h%ddz_window_stag(nzb_wall,m)
     5239          wintend(nzb_wall) = ( 1.0_wp / surf%rho_c_window(nzb_wall,m) )               &
     5240                                * ( surf%lambda_h_window(nzb_wall,m)                   &
     5241                                * ( t_window%val(nzb_wall+1,m) - t_window%val(nzb_wall,m) )         &
     5242                                * surf%ddz_window(nzb_wall+1,m)                        &
     5243                                + surf%wghf_eb_window(m)                               &
     5244                                + surf%rad_sw_in(m)                                    &
     5245                                * ( 1.0_wp - exp( -win_absorp                                   &
     5246                                    * surf%zw_window(nzb_wall,m) ) )                   &
     5247                              ) * surf%ddz_window_stag(nzb_wall,m)
    53145248
    53155249          IF ( indoor_model ) THEN
    53165250             DO  kw = nzb_wall+1, nzt_wall-1
    5317                 wintend(kw) = ( 1.0_wp / surf_usm_h%rho_c_window(kw,m) )                           &
    5318                               * ( surf_usm_h%lambda_h_window(kw,m)                                 &
    5319                                   * ( t_window_h(kw+1,m) - t_window_h(kw,m) )                      &
    5320                                   * surf_usm_h%ddz_window(kw+1,m)                                  &
    5321                                   - surf_usm_h%lambda_h_window(kw-1,m)                             &
    5322                                  * ( t_window_h(kw,m) - t_window_h(kw-1,m) )                       &
    5323                                  * surf_usm_h%ddz_window(kw,m)                                     &
    5324                                  + surf_usm_h%rad_sw_in(m)                                         &
    5325                                  * ( exp( -win_absorp * surf_usm_h%zw_window(kw-1,m) )             &
    5326                                      - exp(-win_absorp * surf_usm_h%zw_window(kw,m) )              &
    5327                                    )                                                               &
    5328                                  ) * surf_usm_h%ddz_window_stag(kw,m)
     5251                wintend(kw) = ( 1.0_wp / surf%rho_c_window(kw,m) )                     &
     5252                              * ( surf%lambda_h_window(kw,m)                           &
     5253                                  * ( t_window%val(kw+1,m) - t_window%val(kw,m) )                   &
     5254                                  * surf%ddz_window(kw+1,m)                            &
     5255                                  - surf%lambda_h_window(kw-1,m)                       &
     5256                                 * ( t_window%val(kw,m) - t_window%val(kw-1,m) )                    &
     5257                                 * surf%ddz_window(kw,m)                               &
     5258                                 + surf%rad_sw_in(m)                                   &
     5259                                 * ( exp( -win_absorp * surf%zw_window(kw-1,m) )       &
     5260                                     - exp(-win_absorp * surf%zw_window(kw,m) )        &
     5261                                   )                                                            &
     5262                                 ) * surf%ddz_window_stag(kw,m)
    53295263
    53305264             ENDDO
    5331              wintend(nzt_wall) = ( 1.0_wp / surf_usm_h%rho_c_window(nzt_wall,m) )                  &
    5332                                  * ( -surf_usm_h%lambda_h_window(nzt_wall-1,m)                     &
    5333                                     * ( t_window_h(nzt_wall,m) - t_window_h(nzt_wall-1,m) )        &
    5334                                     * surf_usm_h%ddz_window(nzt_wall,m)                            &
    5335                                     + surf_usm_h%iwghf_eb_window(m)                                &
    5336                                     + surf_usm_h%rad_sw_in(m)                                      &
    5337                                     * ( exp( -win_absorp * surf_usm_h%zw_window(nzt_wall-1,m) )    &
    5338                                         - exp( -win_absorp * surf_usm_h%zw_window(nzt_wall,m) )    &
    5339                                       )                                                            &
    5340                                     ) * surf_usm_h%ddz_window_stag(nzt_wall,m)
     5265             wintend(nzt_wall) = ( 1.0_wp / surf%rho_c_window(nzt_wall,m) )            &
     5266                                 * ( -surf%lambda_h_window(nzt_wall-1,m)               &
     5267                                    * ( t_window%val(nzt_wall,m) - t_window%val(nzt_wall-1,m) )     &
     5268                                    * surf%ddz_window(nzt_wall,m)                      &
     5269                                    + surf%iwghf_eb_window(m)                          &
     5270                                    + surf%rad_sw_in(m)                                &
     5271                                    * ( exp( -win_absorp                                        &
     5272                                        * surf%zw_window(nzt_wall-1,m) )               &
     5273                                      - exp( -win_absorp                                        &
     5274                                        * surf%zw_window(nzt_wall,m) )                 &
     5275                                      )                                                         &
     5276                                    ) * surf%ddz_window_stag(nzt_wall,m)
    53415277          ELSE
    53425278             DO  kw = nzb_wall+1, nzt_wall
    5343                 wintend(kw) = ( 1.0_wp / surf_usm_h%rho_c_window(kw,m) )                           &
    5344                               * ( surf_usm_h%lambda_h_window(kw,m)                                 &
    5345                                   * ( t_window_h(kw+1,m) - t_window_h(kw,m) )                      &
    5346                                   * surf_usm_h%ddz_window(kw+1,m)                                  &
    5347                                   - surf_usm_h%lambda_h_window(kw-1,m)                             &
    5348                                   * ( t_window_h(kw,m)                                             &
    5349                                   - t_window_h(kw-1,m) )                                           &
    5350                                   * surf_usm_h%ddz_window(kw,m) + surf_usm_h%rad_sw_in(m)          &
    5351                                    * ( exp( -win_absorp * surf_usm_h%zw_window(kw-1,m) )           &
    5352                                        - exp(-win_absorp * surf_usm_h%zw_window(kw,m) )            &
    5353                                      )                                                             &
    5354                                  ) * surf_usm_h%ddz_window_stag(kw,m)
     5279                wintend(kw) = ( 1.0_wp / surf%rho_c_window(kw,m) )                     &
     5280                              * ( surf%lambda_h_window(kw,m)                           &
     5281                                  * ( t_window%val(kw+1,m) - t_window%val(kw,m) )                   &
     5282                                  * surf%ddz_window(kw+1,m)                            &
     5283                                  - surf%lambda_h_window(kw-1,m)                       &
     5284                                  * ( t_window%val(kw,m)                                          &
     5285                                  - t_window%val(kw-1,m) )                                        &
     5286                                  * surf%ddz_window(kw,m)                              &
     5287                                  + surf%rad_sw_in(m)                                  &
     5288                                   * ( exp( -win_absorp * surf%zw_window(kw-1,m) )     &
     5289                                       - exp(-win_absorp * surf%zw_window(kw,m) )      &
     5290                                     )                                                          &
     5291                                 ) * surf%ddz_window_stag(kw,m)
    53555292
    53565293             ENDDO
    53575294          ENDIF
    53585295
    5359           t_window_h_p(nzb_wall:nzt_wall,m) = t_window_h(nzb_wall:nzt_wall,m) + dt_3d              &
    5360                                               * ( tsc(2) * wintend(nzb_wall:nzt_wall) + tsc(3)     &
    5361                                                   * surf_usm_h%tt_window_m(nzb_wall:nzt_wall,m) )
     5296          t_window_p%val(nzb_wall:nzt_wall,m) = t_window%val(nzb_wall:nzt_wall,m) + dt_3d           &
     5297                                              * ( tsc(2) * wintend(nzb_wall:nzt_wall) + tsc(3)  &
     5298                                              * surf%tt_window_m(nzb_wall:nzt_wall,m) )
    53625299
    53635300       ENDIF
     
    53685305           IF ( intermediate_timestep_count == 1 )  THEN
    53695306              DO  kw = nzb_wall, nzt_wall
    5370                  surf_usm_h%tt_wall_m(kw,m) = wtend(kw)
     5307                 surf%tt_wall_m(kw,m) = wtend(kw)
    53715308              ENDDO
    53725309           ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
    53735310               DO  kw = nzb_wall, nzt_wall
    5374                   surf_usm_h%tt_wall_m(kw,m) = -9.5625_wp * wtend(kw) +                            &
    5375                                                5.3125_wp * surf_usm_h%tt_wall_m(kw,m)
     5311                  surf%tt_wall_m(kw,m) = -9.5625_wp * wtend(kw) +                            &
     5312                                               5.3125_wp * surf%tt_wall_m(kw,m)
    53765313               ENDDO
    53775314           ENDIF
     
    53845321              IF ( intermediate_timestep_count == 1 )  THEN
    53855322                 DO  kw = nzb_wall, nzt_wall
    5386                     surf_usm_h%tt_window_m(kw,m) = wintend(kw)
     5323                    surf%tt_window_m(kw,m) = wintend(kw)
    53875324                 ENDDO
    53885325              ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
    53895326                  DO  kw = nzb_wall, nzt_wall
    5390                      surf_usm_h%tt_window_m(kw,m) = -9.5625_wp * wintend(kw) +                     &
    5391                                                     5.3125_wp * surf_usm_h%tt_window_m(kw,m)
     5327                     surf%tt_window_m(kw,m) = -9.5625_wp * wintend(kw) +                     &
     5328                                                    5.3125_wp * surf%tt_window_m(kw,m)
    53925329                  ENDDO
    53935330              ENDIF
    53945331          ENDIF
    53955332       ENDIF
    5396 
    53975333    ENDDO
    5398 
    5399 !
    5400 !-- For vertical surfaces
    5401     !$OMP DO SCHEDULE (STATIC)
    5402     DO  l = 0, 3
    5403        DO  m = 1, surf_usm_v(l)%ns
    5404 !
    5405 !--       Obtain indices
    5406           i = surf_usm_v(l)%i(m)
    5407           j = surf_usm_v(l)%j(m)
    5408           k = surf_usm_v(l)%k(m)
    5409 !
    5410 !--       Prognostic equation for wall temperature t_wall_v
    5411           wtend(:) = 0.0_wp
    5412 
    5413           wtend(nzb_wall) = ( 1.0_wp / surf_usm_v(l)%rho_c_wall(nzb_wall,m) )                      &
    5414                             * ( surf_usm_v(l)%lambda_h(nzb_wall,m)                                 &
    5415                                 * wall_mod(nzb_wall)                                               &
    5416                                 * ( t_wall_v(l)%t(nzb_wall+1,m)                                    &
    5417                                 - t_wall_v(l)%t(nzb_wall,m) )                                      &
    5418                                 * surf_usm_v(l)%ddz_wall(nzb_wall+1,m)                             &
    5419                                 + surf_usm_v(l)%frac(m,ind_veg_wall)                               &
    5420                                 / (surf_usm_v(l)%frac(m,ind_veg_wall)                              &
    5421                                 + surf_usm_v(l)%frac(m,ind_pav_green) )                            &
    5422                                 * surf_usm_v(l)%wghf_eb(m)                                         &
    5423                                 - surf_usm_v(l)%frac(m,ind_pav_green)                              &
    5424                                 / (surf_usm_v(l)%frac(m,ind_veg_wall)                              &
    5425                                 + surf_usm_v(l)%frac(m,ind_pav_green) )                            &
    5426                                 * ( surf_usm_v(l)%lambda_h_green(nzt_wall,m)                       &
    5427                                 * wall_mod(nzt_wall)                                               &
    5428                                 * surf_usm_v(l)%ddz_green(nzt_wall,m)                              &
    5429                                 + surf_usm_v(l)%lambda_h(nzb_wall,m)                               &
    5430                                 * wall_mod(nzb_wall)                                               &
    5431                                 * surf_usm_v(l)%ddz_wall(nzb_wall,m) )                             &
    5432                                 / ( surf_usm_v(l)%ddz_green(nzt_wall,m)                            &
    5433                                 + surf_usm_v(l)%ddz_wall(nzb_wall,m) )                             &
    5434                                 * ( t_wall_v(l)%t(nzb_wall,m)                                      &
    5435                                 - t_green_v(l)%t(nzt_wall,m) )                                     &
    5436                               ) * surf_usm_v(l)%ddz_wall_stag(nzb_wall,m)
    5437 
    5438           IF ( indoor_model )  THEN
    5439              DO  kw = nzb_wall+1, nzt_wall-1
    5440                 wtend(kw) = ( 1.0_wp / surf_usm_v(l)%rho_c_wall(kw,m) )                            &
    5441                           * ( surf_usm_v(l)%lambda_h(kw,m)  * wall_mod(kw)                         &
    5442                               * ( t_wall_v(l)%t(kw+1,m) - t_wall_v(l)%t(kw,m) )                    &
    5443                               * surf_usm_v(l)%ddz_wall(kw+1,m)                                     &
    5444                               - surf_usm_v(l)%lambda_h(kw-1,m)                                     &
    5445                               * wall_mod(kw-1)                                                     &
    5446                               * ( t_wall_v(l)%t(kw,m) - t_wall_v(l)%t(kw-1,m) )                    &
    5447                               * surf_usm_v(l)%ddz_wall(kw,m)                                       &
    5448                             ) * surf_usm_v(l)%ddz_wall_stag(kw,m)
     5334    !$OMP END PARALLEL
     5335
     5336    IF ( debug_output_timestep )  THEN
     5337       WRITE( debug_string, * ) 'usm_wall_heat_model: ', horizontal, l, during_spinup
     5338       CALL debug_message( debug_string, 'end' )
     5339    ENDIF
     5340
     5341 END SUBROUTINE usm_wall_heat_model
     5342
     5343!--------------------------------------------------------------------------------------------------!
     5344! Description:
     5345! ------------
     5346!
     5347!> Green and substrate model as part of the urban surface model. The model predicts ground
     5348!> temperatures.
     5349!>
     5350!> Important: green-heat model crashes due to unknown reason. Green fraction is thus set to zero
     5351!> (in favor of wall fraction).
     5352!--------------------------------------------------------------------------------------------------!
     5353 SUBROUTINE usm_green_heat_model( horizontal, l )
     5354
     5355
     5356    IMPLICIT NONE
     5357
     5358    LOGICAL       ::  horizontal          !< Flag indicating horizontal or vertical surfaces
     5359    INTEGER(iwp)  ::  l                   !< direction index
     5360
     5361    INTEGER(iwp)  ::  i, j, k, kw, m      !< running indices
     5362
     5363    LOGICAL  ::  conserve_water_content = .TRUE.  !<
     5364
     5365    REAL(wp)  ::  drho_l_lv               !< frequently used parameter
     5366    REAL(wp)  ::  h_vg                    !< Van Genuchten coef. h
     5367    REAL(wp)  ::  ke, lambda_h_green_sat  !< heat conductivity for saturated soil
     5368
     5369    REAL(wp), DIMENSION(nzb_wall:nzt_wall)   ::  gtend,tend         !< tendency
     5370    REAL(wp), DIMENSION(nzb_wall:nzt_wall)   ::  root_extr_green    !<
     5371
     5372    REAL(wp), DIMENSION(nzb_wall:nzt_wall+1) ::  gamma_green_temp   !< temp. gamma
     5373    REAL(wp), DIMENSION(nzb_wall:nzt_wall+1) ::  lambda_green_temp  !< temp. lambda
     5374
     5375    TYPE(surf_type), POINTER                 ::  surf               !< surface-date type variable
     5376    TYPE(surf_type_2d_usm), POINTER          ::  t_wall
     5377    TYPE(surf_type_2d_usm), POINTER          ::  t_green
     5378
     5379    IF ( debug_output_timestep )  THEN
     5380       WRITE( debug_string, * ) 'usm_green_heat_model: ', horizontal, l
     5381       CALL debug_message( debug_string, 'start' )
     5382    ENDIF
     5383
     5384    drho_l_lv = 1.0_wp / (rho_l * l_v)
     5385
     5386!
     5387!-- For horizontal upward surfaces.
     5388    IF ( horizontal .AND. l==0 )  THEN
     5389       surf => surf_usm_h(l)
     5390       t_wall       => t_wall_h(l)
     5391       t_green      => t_green_h(l)
     5392
     5393!--    Set tendency array for soil moisture to zero
     5394       IF ( surf%ns > 0 )  THEN
     5395          IF ( intermediate_timestep_count == 1 )  surf%tswc_h_m = 0.0_wp
     5396       ENDIF
     5397
     5398       !$OMP PARALLEL PRIVATE (m, i, j, k, kw, lambda_h_green_sat, ke, lambda_green_temp, gtend,    &
     5399       !$OMP&                  tend, h_vg, gamma_green_temp, m_total, root_extr_green)
     5400       !$OMP DO SCHEDULE (STATIC)
     5401       DO  m = 1, surf%ns
     5402          IF (surf%frac(m,ind_pav_green) > 0.0_wp)  THEN
     5403!
     5404!--         Obtain indices
     5405             i = surf%i(m)
     5406             j = surf%j(m)
     5407             k = surf%k(m)
     5408
     5409             DO  kw = nzb_wall, nzt_wall
     5410!
     5411!--             Calculate volumetric heat capacity of the soil, taking into account water content
     5412                surf%rho_c_total_green(kw,m) = (surf%rho_c_green(kw,m)              &
     5413                                                     * (1.0_wp - swc_sat_h(l)%val(kw,m))                     &
     5414                                                     + rho_c_water * swc_h(l)%val(kw,m))
     5415
     5416!
     5417!--             Calculate soil heat conductivity at the center of the soil layers
     5418                lambda_h_green_sat = lambda_h_green_sm ** ( 1.0_wp - swc_sat_h(l)%val(kw,m) )                &
     5419                                     * lambda_h_water ** swc_h(l)%val(kw,m)
     5420
     5421                ke = 1.0_wp + LOG10( MAX( 0.1_wp,swc_h(l)%val(kw,m) / swc_sat_h(l)%val(kw,m) ) )
     5422
     5423                lambda_green_temp(kw) = ke * (lambda_h_green_sat - lambda_h_green_dry)                &
     5424                                        + lambda_h_green_dry
     5425
    54495426             ENDDO
    5450              wtend(nzt_wall) = ( 1.0_wp / surf_usm_v(l)%rho_c_wall(nzt_wall,m) )                   &
    5451                                * ( -surf_usm_v(l)%lambda_h(nzt_wall-1,m) * wall_mod(nzt_wall-1)    &
    5452                                    * ( t_wall_v(l)%t(nzt_wall,m) - t_wall_v(l)%t(nzt_wall-1,m) )   &
    5453                                    * surf_usm_v(l)%ddz_wall(nzt_wall,m)                            &
    5454                                    + surf_usm_v(l)%iwghf_eb(m)                                     &
    5455                                  ) * surf_usm_v(l)%ddz_wall_stag(nzt_wall,m)
    5456           ELSE
     5427             lambda_green_temp(nzt_wall+1) = lambda_green_temp(nzt_wall)
     5428
     5429
     5430!
     5431!--          Calculate soil heat conductivity (lambda_h) at the _stag level using linear interpolation.
     5432!--          For pavement surface, the true pavement depth is considered
     5433             DO  kw = nzb_wall, nzt_wall
     5434                surf%lambda_h_green(kw,m) = ( lambda_green_temp(kw+1) + lambda_green_temp(kw) ) &
     5435                                                  * 0.5_wp
     5436             ENDDO
     5437
     5438             t_green_h(l)%val(nzt_wall+1,m) = t_wall_h(l)%val(nzb_wall,m)
     5439!
     5440!--          Prognostic equation for ground/roof temperature t_green_h
     5441             gtend(:) = 0.0_wp
     5442             gtend(nzb_wall) = ( 1.0_wp / surf%rho_c_total_green(nzb_wall,m) )                &
     5443                               * ( surf%lambda_h_green(nzb_wall,m)                            &
     5444                                   * ( t_green_h(l)%val(nzb_wall+1,m)                                         &
     5445                                   - t_green_h(l)%val(nzb_wall,m) )                                           &
     5446                                   * surf%ddz_green(nzb_wall+1,m)                             &
     5447                                   + surf%wghf_eb_green(m)                                    &
     5448                                 ) * surf%ddz_green_stag(nzb_wall,m)
     5449
    54575450             DO  kw = nzb_wall+1, nzt_wall
    5458                  wtend(kw) = ( 1.0_wp / surf_usm_v(l)%rho_c_wall(kw,m) )                           &
    5459                              * ( surf_usm_v(l)%lambda_h(kw,m) * wall_mod(kw)                       &
    5460                                  * ( t_wall_v(l)%t(kw+1,m) - t_wall_v(l)%t(kw,m) )                 &
    5461                                  * surf_usm_v(l)%ddz_wall(kw+1,m)                                  &
    5462                                  - surf_usm_v(l)%lambda_h(kw-1,m)                                  &
    5463                                  * wall_mod(kw-1)                                                  &
    5464                                  * ( t_wall_v(l)%t(kw,m) - t_wall_v(l)%t(kw-1,m) )                 &
    5465                                  * surf_usm_v(l)%ddz_wall(kw,m)                                    &
    5466                                ) * surf_usm_v(l)%ddz_wall_stag(kw,m)
     5451                gtend(kw) = ( 1.0_wp / surf%rho_c_total_green(kw,m) )                         &
     5452                            * ( surf%lambda_h_green(kw,m)                                     &
     5453                                * ( t_green_h(l)%val(kw+1,m) - t_green_h(l)%val(kw,m) )                              &
     5454                                * surf%ddz_green(kw+1,m)                                      &
     5455                                - surf%lambda_h_green(kw-1,m)                                 &
     5456                                * ( t_green_h(l)%val(kw,m) - t_green_h(l)%val(kw-1,m) )                              &
     5457                                * surf%ddz_green(kw,m)                                        &
     5458                              ) * surf%ddz_green_stag(kw,m)
    54675459             ENDDO
    5468           ENDIF
    5469 
    5470           t_wall_v_p(l)%t(nzb_wall:nzt_wall,m) =  t_wall_v(l)%t(nzb_wall:nzt_wall,m) + dt_3d       &
    5471                                                   * ( tsc(2) * wtend(nzb_wall:nzt_wall) + tsc(3)   &
    5472                                                       * surf_usm_v(l)%tt_wall_m(nzb_wall:nzt_wall, &
    5473                                                       m) )
    5474 
    5475           IF ( .NOT. during_spinup )  THEN
    5476              win_absorp = -log( surf_usm_v(l)%transmissivity(m) ) /                                &
    5477                           surf_usm_v(l)%zw_window(nzt_wall,m)
    5478 !
    5479 !--          Prognostic equation for window temperature t_window_v
    5480              wintend(:) = 0.0_wp
    5481              wintend(nzb_wall) = ( 1.0_wp / surf_usm_v(l)%rho_c_window(nzb_wall,m) )               &
    5482                                  * ( surf_usm_v(l)%lambda_h_window(nzb_wall,m)                     &
    5483                                      * ( t_window_v(l)%t(nzb_wall+1,m)                             &
    5484                                      - t_window_v(l)%t(nzb_wall,m) )                               &
    5485                                      * surf_usm_v(l)%ddz_window(nzb_wall+1,m)                      &
    5486                                      + surf_usm_v(l)%wghf_eb_window(m)                             &
    5487                                      + surf_usm_v(l)%rad_sw_in(m)                                  &
    5488                                      * ( 1.0_wp - exp( -win_absorp                                 &
    5489                                          * surf_usm_v(l)%zw_window(nzb_wall,m) ) )                 &
    5490                                    ) * surf_usm_v(l)%ddz_window_stag(nzb_wall,m)
    5491 
    5492              IF ( indoor_model ) THEN
    5493                 DO  kw = nzb_wall+1, nzt_wall -1
    5494                    wintend(kw) = ( 1.0_wp / surf_usm_v(l)%rho_c_window(kw,m) )                     &
    5495                                  * ( surf_usm_v(l)%lambda_h_window(kw,m)                           &
    5496                                      * ( t_window_v(l)%t(kw+1,m) - t_window_v(l)%t(kw,m) )         &
    5497                                      * surf_usm_v(l)%ddz_window(kw+1,m)                            &
    5498                                      - surf_usm_v(l)%lambda_h_window(kw-1,m)                       &
    5499                                      * ( t_window_v(l)%t(kw,m) - t_window_v(l)%t(kw-1,m) )         &
    5500                                      * surf_usm_v(l)%ddz_window(kw,m)                              &
    5501                                      + surf_usm_v(l)%rad_sw_in(m)                                  &
    5502                                      * ( exp( -win_absorp * surf_usm_v(l)%zw_window(kw-1,m) )      &
    5503                                          - exp(-win_absorp * surf_usm_v(l)%zw_window(kw,m) )       &
    5504                                        )                                                           &
    5505                                  ) * surf_usm_v(l)%ddz_window_stag(kw,m)
    5506                  ENDDO
    5507                  wintend(nzt_wall) = ( 1.0_wp / surf_usm_v(l)%rho_c_window(nzt_wall,m) )           &
    5508                                      * ( -surf_usm_v(l)%lambda_h_window(nzt_wall-1,m)              &
    5509                                          * ( t_window_v(l)%t(nzt_wall,m)                           &
    5510                                              - t_window_v(l)%t(nzt_wall-1,m) )                     &
    5511                                          * surf_usm_v(l)%ddz_window(nzt_wall,m)                    &
    5512                                          + surf_usm_v(l)%iwghf_eb_window(m)                        &
    5513                                          + surf_usm_v(l)%rad_sw_in(m)                              &
    5514                                          * ( exp( -win_absorp                                      &
    5515                                              * surf_usm_v(l)%zw_window(nzt_wall-1,m) )             &
    5516                                              - exp(-win_absorp                                     &
    5517                                              * surf_usm_v(l)%zw_window(nzt_wall,m) )               &
    5518                                            )                                                       &
    5519                                         ) * surf_usm_v(l)%ddz_window_stag(nzt_wall,m)
    5520              ELSE
    5521                 DO  kw = nzb_wall+1, nzt_wall
    5522                    wintend(kw) = ( 1.0_wp / surf_usm_v(l)%rho_c_window(kw,m) )                     &
    5523                                  * ( surf_usm_v(l)%lambda_h_window(kw,m)                           &
    5524                                      * ( t_window_v(l)%t(kw+1,m) - t_window_v(l)%t(kw,m) )         &
    5525                                      * surf_usm_v(l)%ddz_window(kw+1,m)                            &
    5526                                      - surf_usm_v(l)%lambda_h_window(kw-1,m)                       &
    5527                                      * ( t_window_v(l)%t(kw,m) - t_window_v(l)%t(kw-1,m) )         &
    5528                                      * surf_usm_v(l)%ddz_window(kw,m)                              &
    5529                                      + surf_usm_v(l)%rad_sw_in(m)                                  &
    5530                                      * ( exp( -win_absorp * surf_usm_v(l)%zw_window(kw-1,m) )      &
    5531                                          - exp(-win_absorp                                         &
    5532                                          * surf_usm_v(l)%zw_window(kw,m) )                         &
    5533                                        )                                                           &
    5534                                    ) * surf_usm_v(l)%ddz_window_stag(kw,m)
    5535                 ENDDO
    5536              ENDIF
    5537 
    5538              t_window_v_p(l)%t(nzb_wall:nzt_wall,m) =  t_window_v(l)%t(nzb_wall:nzt_wall,m)        &
    5539                                                        + dt_3d * ( tsc(2)                          &
    5540                                                        * wintend(nzb_wall:nzt_wall)                &
    5541                                                        + tsc(3)                                    &
    5542                                                  * surf_usm_v(l)%tt_window_m(nzb_wall:nzt_wall,m) )
    5543           ENDIF
    5544 
    5545 !
    5546 !--       Calculate t_wall tendencies for the next Runge-Kutta step
    5547           IF ( timestep_scheme(1:5) == 'runge' )  THEN
    5548               IF ( intermediate_timestep_count == 1 )  THEN
    5549                  DO  kw = nzb_wall, nzt_wall
    5550                     surf_usm_v(l)%tt_wall_m(kw,m) = wtend(kw)
    5551                  ENDDO
    5552               ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
    5553                   DO  kw = nzb_wall, nzt_wall
    5554                      surf_usm_v(l)%tt_wall_m(kw,m) = - 9.5625_wp * wtend(kw) +                     &
    5555                                                      5.3125_wp * surf_usm_v(l)%tt_wall_m(kw,m)
    5556                   ENDDO
    5557               ENDIF
    5558           ENDIF
    5559 
    5560 
    5561           IF ( .NOT. during_spinup )  THEN
    5562 !
    5563 !--          Calculate t_window tendencies for the next Runge-Kutta step
     5460
     5461             t_green_h_p(l)%val(nzb_wall:nzt_wall,m) = t_green_h(l)%val(nzb_wall:nzt_wall,m)  &
     5462                            + dt_3d * ( tsc(2) * gtend(nzb_wall:nzt_wall) + tsc(3)            &
     5463                            * surf%tt_green_m(nzb_wall:nzt_wall,m) )
     5464
     5465
     5466!
     5467!--          Calculate t_green tendencies for the next Runge-Kutta step
    55645468             IF ( timestep_scheme(1:5) == 'runge' )  THEN
    55655469                 IF ( intermediate_timestep_count == 1 )  THEN
    55665470                    DO  kw = nzb_wall, nzt_wall
    5567                        surf_usm_v(l)%tt_window_m(kw,m) = wintend(kw)
     5471                       surf%tt_green_m(kw,m) = gtend(kw)
    55685472                    ENDDO
    5569                  ELSEIF ( intermediate_timestep_count <  intermediate_timestep_count_max )  THEN
     5473                 ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
    55705474                     DO  kw = nzb_wall, nzt_wall
    5571                         surf_usm_v(l)%tt_window_m(kw,m) =  - 9.5625_wp * wintend(kw) + 5.3125_wp * &
    5572                                                            surf_usm_v(l)%tt_window_m(kw,m)
     5475                        surf%tt_green_m(kw,m) = -9.5625_wp * gtend(kw) + 5.3125_wp            &
     5476                                                      * surf%tt_green_m(kw,m)
    55735477                     ENDDO
    55745478                 ENDIF
    55755479             ENDIF
    5576           ENDIF
    5577 
    5578        ENDDO
    5579     ENDDO
    5580     !$OMP END PARALLEL
    5581 
    5582     IF ( debug_output_timestep )  THEN
    5583        WRITE( debug_string, * ) 'usm_material_heat_model | during_spinup: ', during_spinup
    5584        CALL debug_message( debug_string, 'end' )
    5585     ENDIF
    5586 
    5587  END SUBROUTINE usm_material_heat_model
    5588 
    5589 !--------------------------------------------------------------------------------------------------!
    5590 ! Description:
    5591 ! ------------
    5592 !
    5593 !> Green and substrate model as part of the urban surface model. The model predicts ground
    5594 !> temperatures.
    5595 !>
    5596 !> Important: gree-heat model crashes due to unknown reason. Green fraction is thus set to zero
    5597 !> (in favor of wall fraction).
    5598 !--------------------------------------------------------------------------------------------------!
    5599  SUBROUTINE usm_green_heat_model
    5600 
    5601 
    5602     IMPLICIT NONE
    5603 
    5604     INTEGER(iwp)  ::  i, j, k, l, kw, m  !< running indices
    5605 
    5606     LOGICAL  ::  conserve_water_content = .TRUE.  !<
    5607 
    5608     REAL(wp)  ::  drho_l_lv               !< frequently used parameter
    5609     REAL(wp)  ::  h_vg                    !< Van Genuchten coef. h
    5610     REAL(wp)  ::  ke, lambda_h_green_sat  !< heat conductivity for saturated soil
    5611 
    5612     REAL(wp), DIMENSION(nzb_wall:nzt_wall)  ::  gtend,tend       !< tendency
    5613     REAL(wp), DIMENSION(nzb_wall:nzt_wall)  ::  root_extr_green  !<
    5614 
    5615     REAL(wp), DIMENSION(nzb_wall:nzt_wall+1)  ::  gamma_green_temp   !< temp. gamma
    5616     REAL(wp), DIMENSION(nzb_wall:nzt_wall+1)  ::  lambda_green_temp  !< temp. lambda
    5617 
    5618 
    5619 
    5620 
    5621 
    5622     IF ( debug_output_timestep )  CALL debug_message( 'usm_green_heat_model', 'start' )
    5623 
    5624     drho_l_lv = 1.0_wp / (rho_l * l_v)
    5625 
    5626 !
    5627 !-- For horizontal surfaces.
    5628 !-- Set tendency array for soil moisture to zero
    5629     IF ( surf_usm_h%ns > 0 )  THEN
    5630        IF ( intermediate_timestep_count == 1 )  surf_usm_h%tswc_h_m = 0.0_wp
    5631     ENDIF
    5632 
    5633     !$OMP PARALLEL PRIVATE (m, i, j, k, kw, lambda_h_green_sat, ke, lambda_green_temp, gtend,       &
    5634     !$OMP&                  tend, h_vg, gamma_green_temp, m_total, root_extr_green)
    5635     !$OMP DO SCHEDULE (STATIC)
    5636     DO  m = 1, surf_usm_h%ns
    5637        IF (surf_usm_h%frac(m,ind_pav_green) > 0.0_wp)  THEN
    5638 !
    5639 !--       Obtain indices
    5640           i = surf_usm_h%i(m)
    5641           j = surf_usm_h%j(m)
    5642           k = surf_usm_h%k(m)
    5643 
    5644           DO  kw = nzb_wall, nzt_wall
    5645 !
    5646 !--          Calculate volumetric heat capacity of the soil, taking into account water content
    5647              surf_usm_h%rho_c_total_green(kw,m) = (surf_usm_h%rho_c_green(kw,m)                    &
    5648                                                   * (1.0_wp - swc_sat_h(kw,m))                     &
    5649                                                   + rho_c_water * swc_h(kw,m))
    5650 
    5651 !
    5652 !--          Calculate soil heat conductivity at the center of the soil layers
    5653              lambda_h_green_sat = lambda_h_green_sm ** ( 1.0_wp - swc_sat_h(kw,m) )                &
    5654                                   * lambda_h_water ** swc_h(kw,m)
    5655 
    5656              ke = 1.0_wp + LOG10( MAX( 0.1_wp,swc_h(kw,m) / swc_sat_h(kw,m) ) )
    5657 
    5658              lambda_green_temp(kw) = ke * (lambda_h_green_sat - lambda_h_green_dry)                &
    5659                                      + lambda_h_green_dry
    5660 
    5661           ENDDO
    5662           lambda_green_temp(nzt_wall+1) = lambda_green_temp(nzt_wall)
    5663 
    5664 
    5665 !
    5666 !--       Calculate soil heat conductivity (lambda_h) at the _stag level using linear interpolation.
    5667 !--       For pavement surface, the true pavement depth is considered
    5668           DO  kw = nzb_wall, nzt_wall
    5669              surf_usm_h%lambda_h_green(kw,m) = ( lambda_green_temp(kw+1) + lambda_green_temp(kw) ) &
    5670                                                * 0.5_wp
    5671           ENDDO
    5672 
    5673           t_green_h(nzt_wall+1,m) = t_wall_h(nzb_wall,m)
    5674 !
    5675 !--       Prognostic equation for ground/roof temperature t_green_h
    5676           gtend(:) = 0.0_wp
    5677           gtend(nzb_wall) = ( 1.0_wp / surf_usm_h%rho_c_total_green(nzb_wall,m) )                  &
    5678                             * ( surf_usm_h%lambda_h_green(nzb_wall,m)                              &
    5679                                 * ( t_green_h(nzb_wall+1,m)                                        &
    5680                                 - t_green_h(nzb_wall,m) )                                          &
    5681                                 * surf_usm_h%ddz_green(nzb_wall+1,m)                               &
    5682                                 + surf_usm_h%wghf_eb_green(m)                                      &
    5683                               ) * surf_usm_h%ddz_green_stag(nzb_wall,m)
    5684 
    5685            DO  kw = nzb_wall+1, nzt_wall
    5686               gtend(kw) = ( 1.0_wp / surf_usm_h%rho_c_total_green(kw,m) )                          &
    5687                           * ( surf_usm_h%lambda_h_green(kw,m)                                      &
    5688                               * ( t_green_h(kw+1,m) - t_green_h(kw,m) )                            &
    5689                               * surf_usm_h%ddz_green(kw+1,m)                                       &
    5690                               - surf_usm_h%lambda_h_green(kw-1,m)                                  &
    5691                               * ( t_green_h(kw,m) - t_green_h(kw-1,m) )                            &
    5692                               * surf_usm_h%ddz_green(kw,m)                                         &
    5693                             ) * surf_usm_h%ddz_green_stag(kw,m)
    5694            ENDDO
    5695 
    5696            t_green_h_p(nzb_wall:nzt_wall,m) = t_green_h(nzb_wall:nzt_wall,m) + dt_3d               &
    5697                                               * ( tsc(2) * gtend(nzb_wall:nzt_wall) + tsc(3)       &
    5698                                                   * surf_usm_h%tt_green_m(nzb_wall:nzt_wall,m) )
    5699 
    5700 
    5701 !
    5702 !--       Calculate t_green tendencies for the next Runge-Kutta step
    5703           IF ( timestep_scheme(1:5) == 'runge' )  THEN
    5704               IF ( intermediate_timestep_count == 1 )  THEN
    5705                  DO  kw = nzb_wall, nzt_wall
    5706                     surf_usm_h%tt_green_m(kw,m) = gtend(kw)
    5707                  ENDDO
    5708               ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
    5709                   DO  kw = nzb_wall, nzt_wall
    5710                      surf_usm_h%tt_green_m(kw,m) = -9.5625_wp * gtend(kw) + 5.3125_wp              &
    5711                                                    * surf_usm_h%tt_green_m(kw,m)
    5712                   ENDDO
    5713               ENDIF
    5714           ENDIF
    5715 
    5716           DO  kw = nzb_wall, nzt_wall
    5717 
    5718 !
    5719 !--          Calculate soil diffusivity at the center of the soil layers
    5720              lambda_green_temp(kw) = ( - b_ch * surf_usm_h%gamma_w_green_sat(kw,m) * psi_sat       &
    5721                                        / swc_sat_h(kw,m) )                                         &
    5722                                      * ( MAX( swc_h(kw,m), wilt_h(kw,m) ) / swc_sat_h(kw,m) )**    &
    5723                                        ( b_ch + 2.0_wp )
    5724 
    5725 !
    5726 !--          Parametrization of Van Genuchten
    5727              IF ( soil_type /= 7 )  THEN
    5728 !
    5729 !--             Calculate the hydraulic conductivity after Van Genuchten (1980)
    5730                 h_vg = ( ( (swc_res_h(kw,m) - swc_sat_h(kw,m)) / ( swc_res_h(kw,m) -               &
    5731                            MAX( swc_h(kw,m), wilt_h(kw,m) ) ) )**                                  &
    5732                            ( surf_usm_h%n_vg_green(m) / (surf_usm_h%n_vg_green(m) - 1.0_wp ) )     &
    5733                            - 1.0_wp                                                                &
    5734                        )** ( 1.0_wp / surf_usm_h%n_vg_green(m) ) / surf_usm_h%alpha_vg_green(m)
    5735 
    5736 
    5737                 gamma_green_temp(kw) = surf_usm_h%gamma_w_green_sat(kw,m)                          &
    5738                                        * ( ( ( 1.0_wp + ( surf_usm_h%alpha_vg_green(m) * h_vg )**  &
    5739                                              surf_usm_h%n_vg_green(m) )**                          &
    5740                                              ( 1.0_wp - 1.0_wp / surf_usm_h%n_vg_green(m) )        &
    5741                                              - ( surf_usm_h%alpha_vg_green(m) * h_vg )**           &
    5742                                              ( surf_usm_h%n_vg_green(m) - 1.0_wp) )**2             &
    5743                                          ) / ( ( 1.0_wp + ( surf_usm_h%alpha_vg_green(m) * h_vg )**&
    5744                                                surf_usm_h%n_vg_green(m) )**                        &
    5745                                                ( ( 1.0_wp  - 1.0_wp / surf_usm_h%n_vg_green(m) )   &
    5746                                                  *( surf_usm_h%l_vg_green(m) + 2.0_wp) )           &
    5747                                              )
    5748 
    5749 !
    5750 !--          Parametrization of Clapp & Hornberger
    5751              ELSE
    5752                 gamma_green_temp(kw) = surf_usm_h%gamma_w_green_sat(kw,m) * ( swc_h(kw,m)          &
    5753                                        / swc_sat_h(kw,m) )**( 2.0_wp * b_ch + 3.0_wp )
    5754              ENDIF
    5755 
    5756           ENDDO
    5757 
    5758 !
    5759 !--       Prognostic equation for soil moisture content. Only performed, when humidity is enabled in
    5760 !--       the atmosphere
    5761           IF ( humidity )  THEN
    5762 !
    5763 !--          Calculate soil diffusivity (lambda_w) at the _stag level using linear interpolation.
    5764 !--          To do: replace this with ECMWF-IFS Eq. 8.81
    5765              DO  kw = nzb_wall, nzt_wall-1
    5766 
    5767                 surf_usm_h%lambda_w_green(kw,m) = ( lambda_green_temp(kw+1)                        &
    5768                                                     + lambda_green_temp(kw) )                      &
    5769                                                   * 0.5_wp
    5770                 surf_usm_h%gamma_w_green(kw,m)  = ( gamma_green_temp(kw+1)                         &
    5771                                                     + gamma_green_temp(kw) )                       &
    5772                                                   * 0.5_wp
     5480
     5481             DO  kw = nzb_wall, nzt_wall
     5482
     5483!
     5484!--             Calculate soil diffusivity at the center of the soil layers
     5485                lambda_green_temp(kw) = ( - b_ch * surf%gamma_w_green_sat(kw,m) * psi_sat      &
     5486                                          / swc_sat_h(l)%val(kw,m) )                           &
     5487                                        * ( MAX( swc_h(l)%val(kw,m), wilt_h(l)%val(kw,m) )     &
     5488                                          / swc_sat_h(l)%val(kw,m) )**( b_ch + 2.0_wp )
     5489
     5490!
     5491!--             Parametrization of Van Genuchten
     5492                IF ( soil_type /= 7 )  THEN
     5493!
     5494!--                Calculate the hydraulic conductivity after Van Genuchten (1980)
     5495                   h_vg = ( ( (swc_res_h(l)%val(kw,m) - swc_sat_h(l)%val(kw,m))                &
     5496                              / ( swc_res_h(l)%val(kw,m) -                 &
     5497                              MAX( swc_h(l)%val(kw,m), wilt_h(l)%val(kw,m) ) ) )**                                    &
     5498                              ( surf%n_vg_green(m) / (surf%n_vg_green(m) - 1.0_wp ) ) &
     5499                              - 1.0_wp                                                                  &
     5500                          )** ( 1.0_wp / surf%n_vg_green(m) ) / surf%alpha_vg_green(m)
     5501
     5502
     5503                   gamma_green_temp(kw) = surf%gamma_w_green_sat(kw,m)                          &
     5504                                          * ( ( ( 1.0_wp + ( surf%alpha_vg_green(m) * h_vg )**  &
     5505                                                surf%n_vg_green(m) )**                          &
     5506                                                ( 1.0_wp - 1.0_wp / surf%n_vg_green(m) )        &
     5507                                                - ( surf%alpha_vg_green(m) * h_vg )**           &
     5508                                                ( surf%n_vg_green(m) - 1.0_wp) )**2             &
     5509                                            ) / ( ( 1.0_wp + ( surf%alpha_vg_green(m) * h_vg )**&
     5510                                                  surf%n_vg_green(m) )**                        &
     5511                                                  ( ( 1.0_wp  - 1.0_wp / surf%n_vg_green(m) )   &
     5512                                                    *( surf%l_vg_green(m) + 2.0_wp) )           &
     5513                                                )
     5514
     5515!
     5516!--             Parametrization of Clapp & Hornberger
     5517                ELSE
     5518                   gamma_green_temp(kw) = surf%gamma_w_green_sat(kw,m) * ( swc_h(l)%val(kw,m)   &
     5519                                          / swc_sat_h(l)%val(kw,m) )**( 2.0_wp * b_ch + 3.0_wp )
     5520                ENDIF
    57735521
    57745522             ENDDO
    57755523
    57765524!
    5777 !--          In case of a closed bottom (= water content is conserved), set hydraulic conductivity
    5778 !--          to zero so that no water will be lost in the bottom layer.
    5779              IF ( conserve_water_content )  THEN
    5780                 surf_usm_h%gamma_w_green(kw,m) = 0.0_wp
    5781              ELSE
    5782                 surf_usm_h%gamma_w_green(kw,m) = gamma_green_temp(nzt_wall)
    5783              ENDIF
    5784 
    5785 !--          The root extraction (= root_extr * qsws_veg / (rho_l * l_v)) ensures the mass
    5786 !--          conservation for water. The transpiration of plants equals the cumulative withdrawals
    5787 !--          by the roots in the soil. The scheme takes into account the availability of water in
    5788 !--          the soil layers as well as the root fraction in the respective layer. Layer with
    5789 !--          moisture below wilting point will not contribute, which reflects the preference of
    5790 !--          plants to take water from moister layers.
    5791 
    5792 !
    5793 !--          Calculate the root extraction (ECMWF 7.69, the sum of root_extr = 1). The energy
    5794 !--          balance solver guarantees a positive transpiration, so that there is no need for an
    5795 !--          additional check.
    5796              m_total = 0.0_wp
    5797              DO  kw = nzb_wall, nzt_wall
    5798                  IF ( swc_h(kw,m) > wilt_h(kw,m) )  THEN
    5799                     m_total = m_total + rootfr_h(kw,m) * swc_h(kw,m)
    5800                  ENDIF
    5801              ENDDO
    5802 
    5803              IF ( m_total > 0.0_wp )  THEN
     5525!--          Prognostic equation for soil moisture content. Only performed, when humidity is enabled in
     5526!--          the atmosphere
     5527             IF ( humidity )  THEN
     5528!
     5529!--             Calculate soil diffusivity (lambda_w) at the _stag level using linear interpolation.
     5530!--             To do: replace this with ECMWF-IFS Eq. 8.81
     5531                DO  kw = nzb_wall, nzt_wall-1
     5532
     5533                   surf%lambda_w_green(kw,m) = ( lambda_green_temp(kw+1)                     &
     5534                                                       + lambda_green_temp(kw) )                      &
     5535                                                     * 0.5_wp
     5536                   surf%gamma_w_green(kw,m)  = ( gamma_green_temp(kw+1)                      &
     5537                                                       + gamma_green_temp(kw) )                       &
     5538                                                     * 0.5_wp
     5539
     5540                ENDDO
     5541
     5542!
     5543!--             In case of a closed bottom (= water content is conserved), set hydraulic conductivity
     5544!--             to zero so that no water will be lost in the bottom layer.
     5545                IF ( conserve_water_content )  THEN
     5546                   surf%gamma_w_green(kw,m) = 0.0_wp
     5547                ELSE
     5548                   surf%gamma_w_green(kw,m) = gamma_green_temp(nzt_wall)
     5549                ENDIF
     5550
     5551!--             The root extraction (= root_extr * qsws_veg / (rho_l * l_v)) ensures the mass
     5552!--             conservation for water. The transpiration of plants equals the cumulative withdrawals
     5553!--             by the roots in the soil. The scheme takes into account the availability of water in
     5554!--             the soil layers as well as the root fraction in the respective layer. Layer with
     5555!--             moisture below wilting point will not contribute, which reflects the preference of
     5556!--             plants to take water from moister layers.
     5557
     5558!
     5559!--             Calculate the root extraction (ECMWF 7.69, the sum of root_extr = 1). The energy
     5560!--             balance solver guarantees a positive transpiration, so that there is no need for an
     5561!--             additional check.
     5562                m_total = 0.0_wp
    58045563                DO  kw = nzb_wall, nzt_wall
    5805                    IF ( swc_h(kw,m) > wilt_h(kw,m) )  THEN
    5806                       root_extr_green(kw) = rootfr_h(kw,m) * swc_h(kw,m) / m_total
    5807                    ELSE
    5808                       root_extr_green(kw) = 0.0_wp
    5809                    ENDIF
     5564                    IF ( swc_h(l)%val(kw,m) > wilt_h(l)%val(kw,m) )  THEN
     5565                       m_total = m_total + rootfr_h(l)%val(kw,m) * swc_h(l)%val(kw,m)
     5566                    ENDIF
    58105567                ENDDO
    5811              ENDIF
    5812 
    5813 !
    5814 !--          Prognostic equation for soil water content m_soil.
    5815              tend(:) = 0.0_wp
    5816 
    5817              tend(nzb_wall) = ( surf_usm_h%lambda_w_green(nzb_wall,m)                              &
    5818                               * ( swc_h(nzb_wall+1,m) - swc_h(nzb_wall,m) )                        &
    5819                               * surf_usm_h%ddz_green(nzb_wall+1,m)                                 &
    5820                               - surf_usm_h%gamma_w_green(nzb_wall,m)                               &
    5821                               - ( root_extr_green(nzb_wall) * surf_usm_h%qsws_veg(m)               &
    5822 !                                 + surf_usm_h%qsws_soil_green(m)                                  &
    5823                                 ) * drho_l_lv )                                                    &
    5824                               * surf_usm_h%ddz_green_stag(nzb_wall,m)
    5825 
    5826              DO  kw = nzb_wall+1, nzt_wall-1
    5827                 tend(kw) = ( surf_usm_h%lambda_w_green(kw,m)                                       &
    5828                              * ( swc_h(kw+1,m) - swc_h(kw,m) )                                     &
    5829                              * surf_usm_h%ddz_green(kw+1,m)                                        &
    5830                              - surf_usm_h%gamma_w_green(kw,m)                                      &
    5831                              - surf_usm_h%lambda_w_green(kw-1,m)                                   &
    5832                              * ( swc_h(kw,m) - swc_h(kw-1,m) )                                     &
    5833                              * surf_usm_h%ddz_green(kw,m)                                          &
    5834                              + surf_usm_h%gamma_w_green(kw-1,m)                                    &
    5835                              - (root_extr_green(kw)                                                &
    5836                              * surf_usm_h%qsws_veg(m)                                              &
    5837                              * drho_l_lv)                                                          &
    5838                           ) * surf_usm_h%ddz_green_stag(kw,m)
    5839 
    5840              ENDDO
    5841              tend(nzt_wall) = ( - surf_usm_h%gamma_w_green(nzt_wall,m)                             &
    5842                                 - surf_usm_h%lambda_w_green(nzt_wall-1,m)                          &
    5843                                 * (swc_h(nzt_wall,m)                                               &
    5844                                 - swc_h(nzt_wall-1,m))                                             &
    5845                                 * surf_usm_h%ddz_green(nzt_wall,m)                                 &
    5846                                 + surf_usm_h%gamma_w_green(nzt_wall-1,m)                           &
    5847                                 - ( root_extr_green(nzt_wall)                                      &
    5848                                 * surf_usm_h%qsws_veg(m)                                           &
    5849                                 * drho_l_lv  )                                                     &
    5850                               ) * surf_usm_h%ddz_green_stag(nzt_wall,m)
    5851 
    5852              swc_h_p(nzb_wall:nzt_wall,m) = swc_h(nzb_wall:nzt_wall,m) + dt_3d                     &
    5853                                             * ( tsc(2) * tend(:) + tsc(3)                          &
    5854                                                 * surf_usm_h%tswc_h_m(:,m)                         &
    5855                                                )
    5856 
    5857 !
    5858 !--          Account for dry soils (find a better solution here!)
    5859              DO  kw = nzb_wall, nzt_wall
    5860                 IF ( swc_h_p(kw,m) < 0.0_wp )  swc_h_p(kw,m) = 0.0_wp
    5861              ENDDO
    5862 
    5863 !
    5864 !--          Calculate m_soil tendencies for the next Runge-Kutta step
    5865              IF ( timestep_scheme(1:5) == 'runge' )  THEN
    5866                 IF ( intermediate_timestep_count == 1 )  THEN
     5568
     5569                IF ( m_total > 0.0_wp )  THEN
    58675570                   DO  kw = nzb_wall, nzt_wall
    5868                       surf_usm_h%tswc_h_m(kw,m) = tend(kw)
    5869                    ENDDO
    5870                 ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
    5871                    DO  kw = nzb_wall, nzt_wall
    5872                       surf_usm_h%tswc_h_m(kw,m) = -9.5625_wp * tend(kw) + 5.3125_wp                &
    5873                                                   * surf_usm_h%tswc_h_m(kw,m)
     5571                      IF ( swc_h(l)%val(kw,m) > wilt_h(l)%val(kw,m) )  THEN
     5572                         root_extr_green(kw) = rootfr_h(l)%val(kw,m) * swc_h(l)%val(kw,m) / m_total
     5573                      ELSE
     5574                         root_extr_green(kw) = 0.0_wp
     5575                      ENDIF
    58745576                   ENDDO
    58755577                ENDIF
     5578
     5579!
     5580!--             Prognostic equation for soil water content m_soil.
     5581                tend(:) = 0.0_wp
     5582
     5583                tend(nzb_wall) = ( surf_usm_h(l)%lambda_w_green(nzb_wall,m)                           &
     5584                                 * ( swc_h(l)%val(nzb_wall+1,m) - swc_h(l)%val(nzb_wall,m) )          &
     5585                                 * surf_usm_h(l)%ddz_green(nzb_wall+1,m)                              &
     5586                                 - surf_usm_h(l)%gamma_w_green(nzb_wall,m)                            &
     5587                                 - ( root_extr_green(nzb_wall) * surf_usm_h(l)%qsws_veg(m)            &
     5588!                                    + surf_usm_h(l)%qsws_soil_green(m)                               &
     5589                                   ) * drho_l_lv )                                                    &
     5590                                 * surf_usm_h(l)%ddz_green_stag(nzb_wall,m)
     5591
     5592                DO  kw = nzb_wall+1, nzt_wall-1
     5593                   tend(kw) = ( surf_usm_h(l)%lambda_w_green(kw,m)                                    &
     5594                                * ( swc_h(l)%val(kw+1,m) - swc_h(l)%val(kw,m) )                       &
     5595                                * surf_usm_h(l)%ddz_green(kw+1,m)                                     &
     5596                                - surf_usm_h(l)%gamma_w_green(kw,m)                                   &
     5597                                - surf_usm_h(l)%lambda_w_green(kw-1,m)                                &
     5598                                * ( swc_h(l)%val(kw,m) - swc_h(l)%val(kw-1,m) )                       &
     5599                                * surf_usm_h(l)%ddz_green(kw,m)                                       &
     5600                                + surf_usm_h(l)%gamma_w_green(kw-1,m)                                 &
     5601                                - (root_extr_green(kw)                                                &
     5602                                * surf_usm_h(l)%qsws_veg(m)                                           &
     5603                                * drho_l_lv)                                                          &
     5604                             ) * surf_usm_h(l)%ddz_green_stag(kw,m)
     5605
     5606                ENDDO
     5607                tend(nzt_wall) = ( - surf_usm_h(l)%gamma_w_green(nzt_wall,m)                          &
     5608                                   - surf_usm_h(l)%lambda_w_green(nzt_wall-1,m)                       &
     5609                                   * (swc_h(l)%val(nzt_wall,m)                                        &
     5610                                   - swc_h(l)%val(nzt_wall-1,m))                                      &
     5611                                   * surf_usm_h(l)%ddz_green(nzt_wall,m)                              &
     5612                                   + surf_usm_h(l)%gamma_w_green(nzt_wall-1,m)                        &
     5613                                   - ( root_extr_green(nzt_wall)                                      &
     5614                                   * surf_usm_h(l)%qsws_veg(m)                                        &
     5615                                   * drho_l_lv  )                                                     &
     5616                                 ) * surf_usm_h(l)%ddz_green_stag(nzt_wall,m)
     5617
     5618                swc_h_p(l)%val(nzb_wall:nzt_wall,m) = swc_h(l)%val(nzb_wall:nzt_wall,m) + dt_3d       &
     5619                                               * ( tsc(2) * tend(:) + tsc(3)                          &
     5620                                                   * surf_usm_h(l)%tswc_h_m(:,m)                      &
     5621                                                  )
     5622
     5623!
     5624!--             Account for dry soils (find a better solution here!)
     5625                DO  kw = nzb_wall, nzt_wall
     5626                   IF ( swc_h_p(l)%val(kw,m) < 0.0_wp )  swc_h_p(l)%val(kw,m) = 0.0_wp
     5627                ENDDO
     5628
     5629!
     5630!--             Calculate m_soil tendencies for the next Runge-Kutta step
     5631                IF ( timestep_scheme(1:5) == 'runge' )  THEN
     5632                   IF ( intermediate_timestep_count == 1 )  THEN
     5633                      DO  kw = nzb_wall, nzt_wall
     5634                         surf_usm_h(l)%tswc_h_m(kw,m) = tend(kw)
     5635                      ENDDO
     5636                   ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
     5637                      DO  kw = nzb_wall, nzt_wall
     5638                         surf_usm_h(l)%tswc_h_m(kw,m) = -9.5625_wp * tend(kw) + 5.3125_wp             &
     5639                                                     * surf_usm_h(l)%tswc_h_m(kw,m)
     5640                      ENDDO
     5641                   ENDIF
     5642                ENDIF
    58765643             ENDIF
    5877           ENDIF
    5878 
     5644
     5645          ENDIF
     5646       ENDDO
     5647       !$OMP END PARALLEL
     5648    ELSE
     5649       IF ( horizontal) THEN
     5650!--       For horizontal downward surfaces
     5651          surf         => surf_usm_h(l)
     5652          t_wall       => t_wall_h(l)
     5653          t_green      => t_green_h(l)
     5654       ELSE
     5655!--       For vertical surfaces
     5656          surf         => surf_usm_v(l)
     5657          t_wall       => t_wall_v(l)
     5658          t_green      => t_green_v(l)
    58795659       ENDIF
    5880 
    5881     ENDDO
    5882     !$OMP END PARALLEL
    5883 
    5884 !
    5885 !-- For vertical surfaces
    5886     DO  l = 0, 3
    5887        DO  m = 1, surf_usm_v(l)%ns
    5888 
    5889           IF (surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp)  THEN
     5660       !$OMP DO SCHEDULE (STATIC)
     5661       DO  m = 1, surf%ns
     5662          IF (surf%frac(m,ind_pav_green) > 0.0_wp)  THEN
    58905663!
    58915664!-- No substrate layer for green walls / only groundbase green walls (ivy i.e.) -> Green layers get
     
    58965669! !
    58975670! !--          Obtain indices
    5898 !              i = surf_usm_v(l)%i(m)
    5899 !              j = surf_usm_v(l)%j(m)
    5900 !              k = surf_usm_v(l)%k(m)
    5901 !
    5902 !              t_green_v(l)%t(nzt_wall+1,m) = t_wall_v(l)%t(nzb_wall,m)
     5671!              i = surf%i(m)
     5672!              j = surf%j(m)
     5673!              k = surf%k(m)
     5674!
     5675!              t_green%val(nzt_wall+1,m) = t_wall%val(nzb_wall,m)
    59035676! !
    59045677! !--          Prognostic equation for green temperature t_green_v
    59055678!              gtend(:) = 0.0_wp
    5906 !              gtend(nzb_wall) = (1.0_wp / surf_usm_v(l)%rho_c_green(nzb_wall,m)) * &
    5907 !                                      ( surf_usm_v(l)%lambda_h_green(nzb_wall,m) * &
    5908 !                                        ( t_green_v(l)%t(nzb_wall+1,m)             &
    5909 !                                        - t_green_v(l)%t(nzb_wall,m) ) *           &
    5910 !                                        surf_usm_v(l)%ddz_green(nzb_wall+1,m)      &
    5911 !                                      + surf_usm_v(l)%wghf_eb(m) ) *               &
    5912 !                                        surf_usm_v(l)%ddz_green_stag(nzb_wall,m)
     5679!              gtend(nzb_wall) = (1.0_wp / surf%rho_c_green(nzb_wall,m)) * &
     5680!                                      ( surf%lambda_h_green(nzb_wall,m) * &
     5681!                                        ( t_green%val(nzb_wall+1,m)             &
     5682!                                        - t_green%val(nzb_wall,m) ) *           &
     5683!                                        surf%ddz_green(nzb_wall+1,m)      &
     5684!                                      + surf%wghf_eb(m) ) *               &
     5685!                                        surf%ddz_green_stag(nzb_wall,m)
    59135686!
    59145687!              DO  kw = nzb_wall+1, nzt_wall
    5915 !                 gtend(kw) = (1.0_wp / surf_usm_v(l)%rho_c_green(kw,m))          &
    5916 !                           * (   surf_usm_v(l)%lambda_h_green(kw,m)              &
    5917 !                             * ( t_green_v(l)%t(kw+1,m) - t_green_v(l)%t(kw,m) ) &
    5918 !                             * surf_usm_v(l)%ddz_green(kw+1,m)                   &
    5919 !                           - surf_usm_v(l)%lambda_h(kw-1,m)                      &
    5920 !                             * ( t_green_v(l)%t(kw,m) - t_green_v(l)%t(kw-1,m) ) &
    5921 !                             * surf_usm_v(l)%ddz_green(kw,m) )                   &
    5922 !                           * surf_usm_v(l)%ddz_green_stag(kw,m)
     5688!                 gtend(kw) = (1.0_wp / surf%rho_c_green(kw,m))          &
     5689!                           * (   surf%lambda_h_green(kw,m)              &
     5690!                             * ( t_green%val(kw+1,m) - t_green%val(kw,m) ) &
     5691!                             * surf%ddz_green(kw+1,m)                   &
     5692!                           - surf%lambda_h(kw-1,m)                      &
     5693!                             * ( t_green%val(kw,m) - t_green%val(kw-1,m) ) &
     5694!                             * surf%ddz_green(kw,m) )                   &
     5695!                           * surf%ddz_green_stag(kw,m)
    59235696!              ENDDO
    59245697!
    5925 !              t_green_v_p(l)%t(nzb_wall:nzt_wall,m) =                              &
    5926 !                                   t_green_v(l)%t(nzb_wall:nzt_wall,m)             &
     5698!              t_green_v_p(l)%val(nzb_wall:nzt_wall,m) =                              &
     5699!                                   t_green%val(nzb_wall:nzt_wall,m)             &
    59275700!                                 + dt_3d * ( tsc(2)                                &
    59285701!                                 * gtend(nzb_wall:nzt_wall) + tsc(3)               &
    5929 !                                 * surf_usm_v(l)%tt_green_m(nzb_wall:nzt_wall,m) )
     5702!                                 * surf%tt_green_m(nzb_wall:nzt_wall,m) )
    59305703!
    59315704! !
     
    59345707!                  IF ( intermediate_timestep_count == 1 )  THEN
    59355708!                     DO  kw = nzb_wall, nzt_wall
    5936 !                        surf_usm_v(l)%tt_green_m(kw,m) = gtend(kw)
     5709!                        surf%tt_green_m(kw,m) = gtend(kw)
    59375710!                     ENDDO
    59385711!                  ELSEIF ( intermediate_timestep_count <                           &
    59395712!                           intermediate_timestep_count_max )  THEN
    59405713!                      DO  kw = nzb_wall, nzt_wall
    5941 !                         surf_usm_v(l)%tt_green_m(kw,m) =                          &
     5714!                         surf%tt_green_m(kw,m) =                          &
    59425715!                                     - 9.5625_wp * gtend(kw) +                     &
    5943 !                                       5.3125_wp * surf_usm_v(l)%tt_green_m(kw,m)
     5716!                                       5.3125_wp * surf%tt_green_m(kw,m)
    59445717!                      ENDDO
    59455718!                  ENDIF
    59465719!              ENDIF
    5947 
    59485720             DO  kw = nzb_wall, nzt_wall+1
    5949                  t_green_v(l)%t(kw,m) = t_wall_v(l)%t(nzb_wall,m)
     5721                 t_green%val(kw,m) = t_wall%val(nzb_wall,m)
    59505722             ENDDO
    5951 
    5952           ENDIF
    5953 
     5723          ENDIF
    59545724       ENDDO
    5955     ENDDO
    5956 
    5957     IF ( debug_output_timestep )  CALL debug_message( 'usm_green_heat_model', 'end' )
     5725    ENDIF
     5726
     5727    IF ( debug_output_timestep )  THEN
     5728       WRITE( debug_string, * ) 'usm_green_heat_model: ', horizontal, l
     5729       CALL debug_message( debug_string, 'end' )
     5730    ENDIF
    59585731
    59595732 END SUBROUTINE usm_green_heat_model
     
    59725745    NAMELIST /urban_surface_par/                                                                   &
    59735746                        building_type,                                                             &
    5974                         land_category,                                                             &
    5975                         naheatlayers,                                                              &
    5976                         pedestrian_category,                                                       &
    5977                         read_wall_temp_3d,                                                         &
    59785747                        roof_category,                                                             &
    59795748                        roof_inner_temperature,                                                    &
     
    59815750                        soil_inner_temperature,                                                    &
    59825751                        urban_surface,                                                             &
    5983                         usm_anthropogenic_heat,                                                    &
    5984                         usm_material_model,                                                        &
    59855752                        usm_wall_mod,                                                              &
    59865753                        wall_category,                                                             &
     
    59915758    NAMELIST /urban_surface_parameters/                                                            &
    59925759                        building_type,                                                             &
    5993                         land_category,                                                             &
    5994                         naheatlayers,                                                              &
    5995                         pedestrian_category,                                                       &
    5996                         read_wall_temp_3d,                                                         &
    59975760                        roof_category,                                                             &
    59985761                        roof_inner_temperature,                                                    &
     
    60005763                        soil_inner_temperature,                                                    &
    60015764                        urban_surface,                                                             &
    6002                         usm_anthropogenic_heat,                                                    &
    6003                         usm_material_model,                                                        &
    60045765                        usm_wall_mod,                                                              &
    60055766                        wall_category,                                                             &
     
    60635824
    60645825 END SUBROUTINE usm_parin
    6065 
    6066 
    6067 !--------------------------------------------------------------------------------------------------!
    6068 ! Description:
    6069 ! ------------
    6070 !
    6071 !> This subroutine is part of the urban surface model.
    6072 !> It reads daily heat produced by anthropogenic source and the diurnal cycle of the heat.
    6073 !--------------------------------------------------------------------------------------------------!
    6074  SUBROUTINE usm_read_anthropogenic_heat
    6075 
    6076     INTEGER(iwp)  ::  i, ii, j, k  !< running indices
    6077 
    6078     REAL(wp)      ::  heat      !< anthropogenic heat
    6079 
    6080 !
    6081 !-- Allocation of array of sources of anthropogenic heat and their diural profile
    6082     ALLOCATE( aheat(naheatlayers,nys:nyn,nxl:nxr) )
    6083     ALLOCATE( aheatprof(naheatlayers,0:24) )
    6084 
    6085 !
    6086 !-- Read daily amount of heat and its daily cycle
    6087     aheat = 0.0_wp
    6088     DO  ii = 0, io_blocks-1
    6089         IF ( ii == io_group )  THEN
    6090 
    6091 !--         Open anthropogenic heat file
    6092             OPEN( 151, file = 'ANTHROPOGENIC_HEAT' // TRIM( coupling_char ), action = 'read',      &
    6093                   status = 'old', form = 'formatted', err = 11 )
    6094             i = 0
    6095             j = 0
    6096             DO
    6097                 READ( 151, *, ERR=12, END=13 )  i, j, k, heat
    6098                 IF ( i >= nxl  .AND.  i <= nxr  .AND.  j >= nys  .AND.  j <= nyn )  THEN
    6099                     IF ( k <= naheatlayers  .AND.  k > topo_top_ind(j,i,0) )  THEN
    6100 !--                     Write heat into the array
    6101                         aheat(k,j,i) = heat
    6102                     ENDIF
    6103                 ENDIF
    6104                 CYCLE
    6105  12             WRITE( message_string, '(a,2i4)' ) 'error in file ANTHROPOGENIC_HEAT'              &
    6106                                                    // TRIM( coupling_char ) // ' after line ', i, j
    6107                 CALL message( 'usm_read_anthropogenic_heat', 'PA0515', 0, 1, 0, 6, 0 )
    6108             ENDDO
    6109  13         CLOSE( 151 )
    6110             CYCLE
    6111  11         message_string = 'file ANTHROPOGENIC_HEAT' // TRIM( coupling_char ) // ' does not exist'
    6112             CALL message( 'usm_read_anthropogenic_heat', 'PA0516', 1, 2, 0, 6, 0 )
    6113         ENDIF
    6114 
    6115 #if defined( __parallel )
    6116         CALL MPI_BARRIER( comm2d, ierr )
    6117 #endif
    6118     ENDDO
    6119 
    6120 !
    6121 !-- Read diurnal profiles of heat sources
    6122     aheatprof = 0.0_wp
    6123     DO  ii = 0, io_blocks-1
    6124        IF ( ii == io_group )  THEN
    6125 !
    6126 !--         Open anthropogenic heat profile file
    6127             OPEN( 151, file = 'ANTHROPOGENIC_HEAT_PROFILE' // TRIM( coupling_char ),               &
    6128                   action = 'read', status = 'old', form = 'formatted', err = 21 )
    6129             i = 0
    6130             DO
    6131                READ( 151, *, err = 22, end = 23 )  i, k, heat
    6132 !
    6133 !--            Write heat into the array
    6134                IF ( i >= 0  .AND.  i <= 24  .AND.  k <= naheatlayers )  THEN
    6135                    aheatprof(k,i) = heat
    6136                ENDIF
    6137                CYCLE
    6138  22            WRITE( message_string, '(a,i4)' ) 'error in file ANTHROPOGENIC_HEAT_PROFILE' //     &
    6139                                                   TRIM( coupling_char ) // ' after line ', i
    6140                CALL message( 'usm_read_anthropogenic_heat', 'PA0517', 0, 1, 0, 6, 0 )
    6141             ENDDO
    6142             aheatprof(:,24) = aheatprof(:,0)
    6143  23         CLOSE( 151 )
    6144             CYCLE
    6145  21         message_string = 'file ANTHROPOGENIC_HEAT_PROFILE'//TRIM(coupling_char)//' does not exist'
    6146             CALL message( 'usm_read_anthropogenic_heat', 'PA0518', 1, 2, 0, 6, 0 )
    6147         ENDIF
    6148 
    6149 #if defined( __parallel )
    6150         CALL MPI_BARRIER( comm2d, ierr )
    6151 #endif
    6152     ENDDO
    6153 
    6154  END SUBROUTINE usm_read_anthropogenic_heat
    61555826
    61565827
     
    61735844    INTEGER(iwp)  ::  k                 !< running index over previous input files covering current local domain
    61745845    INTEGER(iwp)  ::  l                 !< index variable for surface type
    6175     INTEGER(iwp)  ::  ns_h_on_file_usm  !< number of horizontal surface elements (urban type) on file
    61765846    INTEGER(iwp)  ::  nxlc              !< index of left boundary on current subdomain
    61775847    INTEGER(iwp)  ::  nxlf              !< index of left boundary on former subdomain
     
    61845854    INTEGER(iwp)  ::  nysf              !< index of south boundary on former subdomain
    61855855    INTEGER(iwp)  ::  nys_on_file       !< index of south boundary on former local domain
     5856    INTEGER(iwp)  ::  ns_h_on_file_usm(0:1)  !< number of horizontal surface elements (urban type) on file
    61865857    INTEGER(iwp)  ::  ns_v_on_file_usm(0:3)  !< number of vertical surface elements (urban type) on file
    61875858!
     
    61945865
    61955866! MS: Why are there individual temporary arrays that all have the same size?
    6196     REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE ::  tmp_surf_green_h   !<
    6197     REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE ::  tmp_surf_mliq_h    !<
    6198     REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE ::  tmp_surf_wall_h    !<
    6199     REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE ::  tmp_surf_waste_h   !<
    6200     REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE ::  tmp_surf_window_h  !<
    6201 
    6202     REAL(wp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  tmp_green_h   !<
    6203     REAL(wp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  tmp_wall_h    !<
    6204     REAL(wp), DIMENSION(:,:), ALLOCATABLE, SAVE ::  tmp_window_h  !<
    6205 
    6206     TYPE( t_surf_vertical ), DIMENSION(0:3), SAVE ::  tmp_surf_green_v   !<
    6207     TYPE( t_surf_vertical ), DIMENSION(0:3), SAVE ::  tmp_surf_wall_v    !<
    6208     TYPE( t_surf_vertical ), DIMENSION(0:3), SAVE ::  tmp_surf_waste_v   !<
    6209     TYPE( t_surf_vertical ), DIMENSION(0:3), SAVE ::  tmp_surf_window_v  !<
    6210 
    6211     TYPE( t_wall_vertical ), DIMENSION(0:3), SAVE ::  tmp_green_v   !<
    6212     TYPE( t_wall_vertical ), DIMENSION(0:3), SAVE ::  tmp_wall_v    !<
    6213     TYPE( t_wall_vertical ), DIMENSION(0:3), SAVE ::  tmp_window_v  !<
     5867    TYPE( surf_type_1d_usm ), DIMENSION(0:1), SAVE ::  tmp_surf_green_h   !<
     5868    TYPE( surf_type_1d_usm ), DIMENSION(0:1), SAVE ::  tmp_surf_mliq_h    !<
     5869    TYPE( surf_type_1d_usm ), DIMENSION(0:1), SAVE ::  tmp_surf_wall_h    !<
     5870    TYPE( surf_type_1d_usm ), DIMENSION(0:1), SAVE ::  tmp_surf_waste_h   !<
     5871    TYPE( surf_type_1d_usm ), DIMENSION(0:1), SAVE ::  tmp_surf_window_h  !<
     5872
     5873    TYPE( surf_type_2d_usm ), DIMENSION(0:1), SAVE ::  tmp_green_h   !<
     5874    TYPE( surf_type_2d_usm ), DIMENSION(0:1), SAVE ::  tmp_wall_h    !<
     5875    TYPE( surf_type_2d_usm ), DIMENSION(0:1), SAVE ::  tmp_window_h  !<
     5876
     5877    TYPE( surf_type_1d_usm ), DIMENSION(0:3), SAVE ::  tmp_surf_green_v   !<
     5878    TYPE( surf_type_1d_usm ), DIMENSION(0:3), SAVE ::  tmp_surf_wall_v    !<
     5879    TYPE( surf_type_1d_usm ), DIMENSION(0:3), SAVE ::  tmp_surf_waste_v   !<
     5880    TYPE( surf_type_1d_usm ), DIMENSION(0:3), SAVE ::  tmp_surf_window_v  !<
     5881
     5882    TYPE( surf_type_2d_usm ), DIMENSION(0:3), SAVE ::  tmp_green_v   !<
     5883    TYPE( surf_type_2d_usm ), DIMENSION(0:3), SAVE ::  tmp_wall_v    !<
     5884    TYPE( surf_type_2d_usm ), DIMENSION(0:3), SAVE ::  tmp_window_v  !<
    62145885
    62155886
     
    62235894             READ ( 13 ) ns_h_on_file_usm
    62245895
    6225              IF ( ALLOCATED( tmp_surf_wall_h ) )    DEALLOCATE( tmp_surf_wall_h )
    6226              IF ( ALLOCATED( tmp_wall_h ) )         DEALLOCATE( tmp_wall_h )
    6227              IF ( ALLOCATED( tmp_surf_window_h ) )  DEALLOCATE( tmp_surf_window_h )
    6228              IF ( ALLOCATED( tmp_window_h) )        DEALLOCATE( tmp_window_h )
    6229              IF ( ALLOCATED( tmp_surf_green_h) )    DEALLOCATE( tmp_surf_green_h )
    6230              IF ( ALLOCATED( tmp_green_h) )         DEALLOCATE( tmp_green_h )
    6231              IF ( ALLOCATED( tmp_surf_mliq_h) )     DEALLOCATE( tmp_surf_mliq_h )
    6232              IF ( ALLOCATED( tmp_surf_waste_h) )    DEALLOCATE( tmp_surf_waste_h )
     5896             DO  l = 0, 1
     5897                IF ( ALLOCATED( tmp_surf_wall_h(l)%val ) )    DEALLOCATE( tmp_surf_wall_h(l)%val )
     5898                IF ( ALLOCATED( tmp_wall_h(l)%val ) )         DEALLOCATE( tmp_wall_h(l)%val )
     5899                IF ( ALLOCATED( tmp_surf_window_h(l)%val ) )  DEALLOCATE( tmp_surf_window_h(l)%val )
     5900                IF ( ALLOCATED( tmp_window_h(l)%val) )        DEALLOCATE( tmp_window_h(l)%val )
     5901                IF ( ALLOCATED( tmp_surf_green_h(l)%val) )    DEALLOCATE( tmp_surf_green_h(l)%val )
     5902                IF ( ALLOCATED( tmp_green_h(l)%val) )         DEALLOCATE( tmp_green_h(l)%val )
     5903                IF ( ALLOCATED( tmp_surf_mliq_h(l)%val) )     DEALLOCATE( tmp_surf_mliq_h(l)%val )
     5904                IF ( ALLOCATED( tmp_surf_waste_h(l)%val) )    DEALLOCATE( tmp_surf_waste_h(l)%val )
     5905             ENDDO
    62335906
    62345907!
     
    62365909!--          elements do not necessarily need  to match the size of present surface elements on
    62375910!--          current processor, as the number of processors between restarts can change.
    6238              ALLOCATE( tmp_surf_wall_h(1:ns_h_on_file_usm) )
    6239              ALLOCATE( tmp_wall_h(nzb_wall:nzt_wall+1, 1:ns_h_on_file_usm) )
    6240              ALLOCATE( tmp_surf_window_h(1:ns_h_on_file_usm) )
    6241              ALLOCATE( tmp_window_h(nzb_wall:nzt_wall+1, 1:ns_h_on_file_usm) )
    6242              ALLOCATE( tmp_surf_green_h(1:ns_h_on_file_usm) )
    6243              ALLOCATE( tmp_green_h(nzb_wall:nzt_wall+1, 1:ns_h_on_file_usm) )
    6244              ALLOCATE( tmp_surf_mliq_h(1:ns_h_on_file_usm) )
    6245              ALLOCATE( tmp_surf_waste_h(1:ns_h_on_file_usm) )
     5911             DO  l = 0, 1
     5912                ALLOCATE( tmp_surf_wall_h(l)%val(1:ns_h_on_file_usm(l)) )
     5913                ALLOCATE( tmp_wall_h(l)%val(nzb_wall:nzt_wall+1, 1:ns_h_on_file_usm(l) ) )
     5914                ALLOCATE( tmp_surf_window_h(l)%val(1:ns_h_on_file_usm(l)) )
     5915                ALLOCATE( tmp_window_h(l)%val(nzb_wall:nzt_wall+1, 1:ns_h_on_file_usm(l) ) )
     5916                ALLOCATE( tmp_surf_green_h(l)%val(1:ns_h_on_file_usm(l)) )
     5917                ALLOCATE( tmp_green_h(l)%val(nzb_wall:nzt_wall+1, 1:ns_h_on_file_usm(l) ) )
     5918                ALLOCATE( tmp_surf_mliq_h(l)%val(1:ns_h_on_file_usm(l)) )
     5919                ALLOCATE( tmp_surf_waste_h(l)%val(1:ns_h_on_file_usm(l)) )
     5920             ENDDO
    62465921
    62475922          ENDIF
     
    62525927
    62535928             DO  l = 0, 3
    6254                 IF ( ALLOCATED( tmp_surf_wall_v(l)%t ) )    DEALLOCATE( tmp_surf_wall_v(l)%t )
    6255                 IF ( ALLOCATED( tmp_wall_v(l)%t ) )         DEALLOCATE( tmp_wall_v(l)%t )
    6256                 IF ( ALLOCATED( tmp_surf_window_v(l)%t ) )  DEALLOCATE( tmp_surf_window_v(l)%t )
    6257                 IF ( ALLOCATED( tmp_window_v(l)%t ) )       DEALLOCATE( tmp_window_v(l)%t )
    6258                 IF ( ALLOCATED( tmp_surf_green_v(l)%t ) )   DEALLOCATE( tmp_surf_green_v(l)%t )
    6259                 IF ( ALLOCATED( tmp_green_v(l)%t ) )        DEALLOCATE( tmp_green_v(l)%t )
    6260                 IF ( ALLOCATED( tmp_surf_waste_v(l)%t ) )   DEALLOCATE( tmp_surf_waste_v(l)%t )
     5929                IF ( ALLOCATED( tmp_surf_wall_v(l)%val ) )    DEALLOCATE( tmp_surf_wall_v(l)%val )
     5930                IF ( ALLOCATED( tmp_wall_v(l)%val ) )         DEALLOCATE( tmp_wall_v(l)%val )
     5931                IF ( ALLOCATED( tmp_surf_window_v(l)%val ) )  DEALLOCATE( tmp_surf_window_v(l)%val )
     5932                IF ( ALLOCATED( tmp_window_v(l)%val ) )       DEALLOCATE( tmp_window_v(l)%val )
     5933                IF ( ALLOCATED( tmp_surf_green_v(l)%val ) )   DEALLOCATE( tmp_surf_green_v(l)%val )
     5934                IF ( ALLOCATED( tmp_green_v(l)%val ) )        DEALLOCATE( tmp_green_v(l)%val )
     5935                IF ( ALLOCATED( tmp_surf_waste_v(l)%val ) )   DEALLOCATE( tmp_surf_waste_v(l)%val )
    62615936             ENDDO
    62625937
     
    62665941!--          current processor, as the number of processors between restarts can change.
    62675942             DO  l = 0, 3
    6268                 ALLOCATE( tmp_surf_wall_v(l)%t(1:ns_v_on_file_usm(l)) )
    6269                 ALLOCATE( tmp_wall_v(l)%t(nzb_wall:nzt_wall+1, 1:ns_v_on_file_usm(l) ) )
    6270                 ALLOCATE( tmp_surf_window_v(l)%t(1:ns_v_on_file_usm(l)) )
    6271                 ALLOCATE( tmp_window_v(l)%t(nzb_wall:nzt_wall+1, 1:ns_v_on_file_usm(l) ) )
    6272                 ALLOCATE( tmp_surf_green_v(l)%t(1:ns_v_on_file_usm(l)) )
    6273                 ALLOCATE( tmp_green_v(l)%t(nzb_wall:nzt_wall+1, 1:ns_v_on_file_usm(l) ) )
    6274                 ALLOCATE( tmp_surf_waste_v(l)%t(1:ns_v_on_file_usm(l)) )
     5943                ALLOCATE( tmp_surf_wall_v(l)%val(1:ns_v_on_file_usm(l)) )
     5944                ALLOCATE( tmp_wall_v(l)%val(nzb_wall:nzt_wall+1, 1:ns_v_on_file_usm(l) ) )
     5945                ALLOCATE( tmp_surf_window_v(l)%val(1:ns_v_on_file_usm(l)) )
     5946                ALLOCATE( tmp_window_v(l)%val(nzb_wall:nzt_wall+1, 1:ns_v_on_file_usm(l) ) )
     5947                ALLOCATE( tmp_surf_green_v(l)%val(1:ns_v_on_file_usm(l)) )
     5948                ALLOCATE( tmp_green_v(l)%val(nzb_wall:nzt_wall+1, 1:ns_v_on_file_usm(l) ) )
     5949                ALLOCATE( tmp_surf_waste_v(l)%val(1:ns_v_on_file_usm(l)) )
    62755950             ENDDO
    62765951
     
    62995974          ENDIF
    63005975
    6301        CASE ( 't_surf_wall_h' )
     5976       CASE ( 't_surf_wall_h(0)' )
    63025977          IF ( k == 1 )  THEN
    6303              IF ( .NOT.  ALLOCATED( t_surf_wall_h_1 ) )   ALLOCATE( t_surf_wall_h_1(1:surf_usm_h%ns) )
    6304              READ ( 13 )  tmp_surf_wall_h
    6305           ENDIF
    6306           CALL surface_restore_elements( t_surf_wall_h_1, tmp_surf_wall_h, surf_usm_h%start_index, &
    6307                                          start_index_on_file, end_index_on_file, nxlc, nysc,       &
    6308                                          nxlf, nxrf, nysf, nynf, nys_on_file, nyn_on_file,         &
    6309                                          nxl_on_file, nxr_on_file )
     5978             IF ( .NOT.  ALLOCATED( t_surf_wall_h_1(0)%val ) )                                       &
     5979                ALLOCATE( t_surf_wall_h_1(0)%val(1:surf_usm_h(0)%ns) )
     5980             READ ( 13 )  tmp_surf_wall_h(0)%val
     5981          ENDIF
     5982          CALL surface_restore_elements( t_surf_wall_h_1(0)%val, tmp_surf_wall_h(0)%val,               &
     5983                                         surf_usm_h(0)%start_index, start_index_on_file,           &
     5984                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     5985                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
     5986
     5987       CASE ( 't_surf_wall_h(1)' )
     5988          IF ( k == 1 )  THEN
     5989             IF ( .NOT.  ALLOCATED( t_surf_wall_h_1(1)%val ) )                                       &
     5990                ALLOCATE( t_surf_wall_h_1(1)%val(1:surf_usm_h(1)%ns) )
     5991             READ ( 13 )  tmp_surf_wall_h(1)%val
     5992          ENDIF
     5993          CALL surface_restore_elements( t_surf_wall_h_1(1)%val, tmp_surf_wall_h(1)%val,               &
     5994                                         surf_usm_h(1)%start_index, start_index_on_file,           &
     5995                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     5996                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
    63105997
    63115998       CASE ( 't_surf_wall_v(0)' )
    63125999          IF ( k == 1 )  THEN
    6313              IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(0)%t ) )                                       &
    6314                 ALLOCATE( t_surf_wall_v_1(0)%t(1:surf_usm_v(0)%ns) )
    6315              READ ( 13 )  tmp_surf_wall_v(0)%t
    6316           ENDIF
    6317           CALL surface_restore_elements( t_surf_wall_v_1(0)%t, tmp_surf_wall_v(0)%t,               &
     6000             IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(0)%val ) )                                       &
     6001                ALLOCATE( t_surf_wall_v_1(0)%val(1:surf_usm_v(0)%ns) )
     6002             READ ( 13 )  tmp_surf_wall_v(0)%val
     6003          ENDIF
     6004          CALL surface_restore_elements( t_surf_wall_v_1(0)%val, tmp_surf_wall_v(0)%val,               &
     6005                                         surf_usm_v(0)%start_index, start_index_on_file,           &
     6006                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6007                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
     6008
     6009       CASE ( 't_surf_wall_v(1)' )
     6010          IF ( k == 1 )  THEN
     6011             IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(1)%val ) )                                       &
     6012                ALLOCATE( t_surf_wall_v_1(1)%val(1:surf_usm_v(1)%ns) )
     6013             READ ( 13 )  tmp_surf_wall_v(1)%val
     6014          ENDIF
     6015          CALL surface_restore_elements( t_surf_wall_v_1(1)%val, tmp_surf_wall_v(1)%val,               &
     6016                                         surf_usm_v(1)%start_index, start_index_on_file,           &
     6017                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6018                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
     6019
     6020       CASE ( 't_surf_wall_v(2)' )
     6021          IF ( k == 1 )  THEN
     6022             IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(2)%val ) )                                       &
     6023                ALLOCATE( t_surf_wall_v_1(2)%val(1:surf_usm_v(2)%ns) )
     6024             READ ( 13 )  tmp_surf_wall_v(2)%val
     6025          ENDIF
     6026          CALL surface_restore_elements( t_surf_wall_v_1(2)%val, tmp_surf_wall_v(2)%val,               &
     6027                                         surf_usm_v(2)%start_index, start_index_on_file,           &
     6028                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6029                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
     6030
     6031       CASE ( 't_surf_wall_v(3)' )
     6032          IF ( k == 1 )  THEN
     6033             IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(3)%val ) )                                       &
     6034                ALLOCATE( t_surf_wall_v_1(3)%val(1:surf_usm_v(3)%ns) )
     6035             READ ( 13 )  tmp_surf_wall_v(3)%val
     6036          ENDIF
     6037          CALL surface_restore_elements( t_surf_wall_v_1(3)%val, tmp_surf_wall_v(3)%val,               &
     6038                                         surf_usm_v(3)%start_index, start_index_on_file,           &
     6039                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6040                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
     6041
     6042       CASE ( 't_surf_window_h(0)' )
     6043          IF ( k == 1 )  THEN
     6044             IF ( .NOT.  ALLOCATED( t_surf_window_h_1(0)%val ) )                                     &
     6045                ALLOCATE( t_surf_window_h_1(0)%val(1:surf_usm_h(0)%ns) )
     6046             READ ( 13 )  tmp_surf_window_h(0)%val
     6047          ENDIF
     6048          CALL surface_restore_elements( t_surf_window_h_1(0)%val, tmp_surf_window_h(0)%val,           &
     6049                                         surf_usm_h(0)%start_index, start_index_on_file,           &
     6050                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6051                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
     6052
     6053       CASE ( 't_surf_window_h(1)' )
     6054          IF ( k == 1 )  THEN
     6055             IF ( .NOT.  ALLOCATED( t_surf_window_h_1(1)%val ) )                                     &
     6056                ALLOCATE( t_surf_window_h_1(1)%val(1:surf_usm_h(1)%ns) )
     6057             READ ( 13 )  tmp_surf_window_h(1)%val
     6058          ENDIF
     6059          CALL surface_restore_elements( t_surf_window_h_1(1)%val, tmp_surf_window_h(1)%val,           &
     6060                                         surf_usm_h(1)%start_index, start_index_on_file,           &
     6061                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6062                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
     6063
     6064       CASE ( 't_surf_window_v(0)' )
     6065          IF ( k == 1 )  THEN
     6066             IF ( .NOT.  ALLOCATED( t_surf_window_v_1(0)%val ) )                                     &
     6067                ALLOCATE( t_surf_window_v_1(0)%val(1:surf_usm_v(0)%ns) )
     6068             READ ( 13 )  tmp_surf_window_v(0)%val
     6069          ENDIF
     6070          CALL surface_restore_elements( t_surf_window_v_1(0)%val, tmp_surf_window_v(0)%val,           &
    63186071                                         surf_usm_v(0)%start_index, start_index_on_file,           &
    63196072                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    63206073                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    63216074
    6322        CASE ( 't_surf_wall_v(1)' )
     6075       CASE ( 't_surf_window_v(1)' )
    63236076          IF ( k == 1 )  THEN
    6324              IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(1)%t ) )                                       &
    6325                 ALLOCATE( t_surf_wall_v_1(1)%t(1:surf_usm_v(1)%ns) )
    6326              READ ( 13 )  tmp_surf_wall_v(1)%t
    6327           ENDIF
    6328           CALL surface_restore_elements( t_surf_wall_v_1(1)%t, tmp_surf_wall_v(1)%t,               &
     6077             IF ( .NOT.  ALLOCATED( t_surf_window_v_1(1)%val ) )                                   &
     6078                ALLOCATE( t_surf_window_v_1(1)%val(1:surf_usm_v(1)%ns) )
     6079             READ ( 13 )  tmp_surf_window_v(1)%val
     6080          ENDIF
     6081          CALL surface_restore_elements( t_surf_window_v_1(1)%val, tmp_surf_window_v(1)%val,       &
    63296082                                         surf_usm_v(1)%start_index, start_index_on_file,           &
    63306083                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    63316084                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    63326085
    6333        CASE ( 't_surf_wall_v(2)' )
     6086       CASE ( 't_surf_window_v(2)' )
    63346087          IF ( k == 1 )  THEN
    6335              IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(2)%t ) )                                       &
    6336                 ALLOCATE( t_surf_wall_v_1(2)%t(1:surf_usm_v(2)%ns) )
    6337              READ ( 13 )  tmp_surf_wall_v(2)%t
    6338           ENDIF
    6339           CALL surface_restore_elements( t_surf_wall_v_1(2)%t, tmp_surf_wall_v(2)%t,               &
     6088             IF ( .NOT.  ALLOCATED( t_surf_window_v_1(2)%val ) )                                   &
     6089                ALLOCATE( t_surf_window_v_1(2)%val(1:surf_usm_v(2)%ns) )
     6090             READ ( 13 )  tmp_surf_window_v(2)%val
     6091          ENDIF
     6092          CALL surface_restore_elements( t_surf_window_v_1(2)%val, tmp_surf_window_v(2)%val,       &
    63406093                                         surf_usm_v(2)%start_index, start_index_on_file,           &
    63416094                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    63426095                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    63436096
    6344        CASE ( 't_surf_wall_v(3)' )
     6097       CASE ( 't_surf_window_v(3)' )
    63456098          IF ( k == 1 )  THEN
    6346              IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(3)%t ) )                                       &
    6347                 ALLOCATE( t_surf_wall_v_1(3)%t(1:surf_usm_v(3)%ns) )
    6348              READ ( 13 )  tmp_surf_wall_v(3)%t
    6349           ENDIF
    6350           CALL surface_restore_elements( t_surf_wall_v_1(3)%t, tmp_surf_wall_v(3)%t,               &
     6099             IF ( .NOT.  ALLOCATED( t_surf_window_v_1(3)%val ) )                                   &
     6100                ALLOCATE( t_surf_window_v_1(3)%val(1:surf_usm_v(3)%ns) )
     6101             READ ( 13 )  tmp_surf_window_v(3)%val
     6102          ENDIF
     6103          CALL surface_restore_elements( t_surf_window_v_1(3)%val, tmp_surf_window_v(3)%val,       &
    63516104                                         surf_usm_v(3)%start_index, start_index_on_file,           &
    63526105                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    63536106                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    63546107
    6355        CASE ( 't_surf_green_h' )
     6108       CASE ( 't_surf_green_h(0)' )
    63566109          IF ( k == 1 )  THEN
    6357              IF ( .NOT.  ALLOCATED( t_surf_green_h_1 ) )                                           &
    6358                 ALLOCATE( t_surf_green_h_1(1:surf_usm_h%ns) )
    6359              READ ( 13 )  tmp_surf_green_h
    6360           ENDIF
    6361           CALL surface_restore_elements( t_surf_green_h_1, tmp_surf_green_h,                       &
    6362                                          surf_usm_h%start_index, start_index_on_file,              &
     6110             IF ( .NOT.  ALLOCATED( t_surf_green_h_1(0)%val ) )                                      &
     6111                ALLOCATE( t_surf_green_h_1(0)%val(1:surf_usm_h(0)%ns) )
     6112             READ ( 13 )  tmp_surf_green_h(0)%val
     6113          ENDIF
     6114          CALL surface_restore_elements( t_surf_green_h_1(0)%val, tmp_surf_green_h(0)%val,             &
     6115                                         surf_usm_h(0)%start_index, start_index_on_file,         &
    63636116                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    6364                                          nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
     6117                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
     6118
     6119       CASE ( 't_surf_green_h(1)' )
     6120          IF ( k == 1 )  THEN
     6121             IF ( .NOT.  ALLOCATED( t_surf_green_h_1(1)%val ) )                                      &
     6122                ALLOCATE( t_surf_green_h_1(1)%val(1:surf_usm_h(1)%ns) )
     6123             READ ( 13 )  tmp_surf_green_h(1)%val
     6124          ENDIF
     6125          CALL surface_restore_elements( t_surf_green_h_1(1)%val, tmp_surf_green_h(1)%val,             &
     6126                                         surf_usm_h(1)%start_index, start_index_on_file,         &
     6127                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6128                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
    63656129
    63666130       CASE ( 't_surf_green_v(0)' )
    63676131          IF ( k == 1 )  THEN
    6368              IF ( .NOT.  ALLOCATED( t_surf_green_v_1(0)%t ) )                                      &
    6369                 ALLOCATE( t_surf_green_v_1(0)%t(1:surf_usm_v(0)%ns) )
    6370              READ ( 13 )  tmp_surf_green_v(0)%t
    6371           ENDIF
    6372           CALL surface_restore_elements( t_surf_green_v_1(0)%t, tmp_surf_green_v(0)%t,             &
     6132             IF ( .NOT.  ALLOCATED( t_surf_green_v_1(0)%val ) )                                      &
     6133                ALLOCATE( t_surf_green_v_1(0)%val(1:surf_usm_v(0)%ns) )
     6134             READ ( 13 )  tmp_surf_green_v(0)%val
     6135          ENDIF
     6136          CALL surface_restore_elements( t_surf_green_v_1(0)%val, tmp_surf_green_v(0)%val,             &
    63736137                                         surf_usm_v(0)%start_index, start_index_on_file,           &
    63746138                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    6375                                          nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
     6139                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
    63766140
    63776141       CASE ( 't_surf_green_v(1)' )
    63786142          IF ( k == 1 )  THEN
    6379              IF ( .NOT.  ALLOCATED( t_surf_green_v_1(1)%t ) )                                      &
    6380                 ALLOCATE( t_surf_green_v_1(1)%t(1:surf_usm_v(1)%ns) )
    6381              READ ( 13 )  tmp_surf_green_v(1)%t
    6382           ENDIF
    6383           CALL surface_restore_elements( t_surf_green_v_1(1)%t, tmp_surf_green_v(1)%t,             &
     6143             IF ( .NOT.  ALLOCATED( t_surf_green_v_1(1)%val ) )                                      &
     6144                ALLOCATE( t_surf_green_v_1(1)%val(1:surf_usm_v(1)%ns) )
     6145             READ ( 13 )  tmp_surf_green_v(1)%val
     6146          ENDIF
     6147          CALL surface_restore_elements( t_surf_green_v_1(1)%val, tmp_surf_green_v(1)%val,             &
    63846148                                         surf_usm_v(1)%start_index, start_index_on_file,           &
    63856149                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     
    63886152       CASE ( 't_surf_green_v(2)' )
    63896153          IF ( k == 1 )  THEN
    6390              IF ( .NOT.  ALLOCATED( t_surf_green_v_1(2)%t ) )                                      &
    6391                 ALLOCATE( t_surf_green_v_1(2)%t(1:surf_usm_v(2)%ns) )
    6392              READ ( 13 )  tmp_surf_green_v(2)%t
    6393           ENDIF
    6394           CALL surface_restore_elements( t_surf_green_v_1(2)%t, tmp_surf_green_v(2)%t,             &
     6154             IF ( .NOT.  ALLOCATED( t_surf_green_v_1(2)%val ) )                                      &
     6155                ALLOCATE( t_surf_green_v_1(2)%val(1:surf_usm_v(2)%ns) )
     6156             READ ( 13 )  tmp_surf_green_v(2)%val
     6157          ENDIF
     6158          CALL surface_restore_elements( t_surf_green_v_1(2)%val, tmp_surf_green_v(2)%val,             &
    63956159                                         surf_usm_v(2)%start_index, start_index_on_file,           &
    63966160                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     
    63996163       CASE ( 't_surf_green_v(3)' )
    64006164          IF ( k == 1 )  THEN
    6401              IF ( .NOT.  ALLOCATED( t_surf_green_v_1(3)%t ) )                                      &
    6402                 ALLOCATE( t_surf_green_v_1(3)%t(1:surf_usm_v(3)%ns) )
    6403              READ ( 13 )  tmp_surf_green_v(3)%t
    6404           ENDIF
    6405           CALL surface_restore_elements( t_surf_green_v_1(3)%t, tmp_surf_green_v(3)%t,             &
     6165             IF ( .NOT.  ALLOCATED( t_surf_green_v_1(3)%val ) )                                      &
     6166                ALLOCATE( t_surf_green_v_1(3)%val(1:surf_usm_v(3)%ns) )
     6167             READ ( 13 )  tmp_surf_green_v(3)%val
     6168          ENDIF
     6169          CALL surface_restore_elements( t_surf_green_v_1(3)%val, tmp_surf_green_v(3)%val,             &
    64066170                                         surf_usm_v(3)%start_index, start_index_on_file,           &
    64076171                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    64086172                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    64096173
    6410        CASE ( 't_surf_window_h' )
     6174       CASE ( 'm_liq_usm_h(0)' )
    64116175          IF ( k == 1 )  THEN
    6412              IF ( .NOT.  ALLOCATED( t_surf_window_h_1 ) )                                          &
    6413                 ALLOCATE( t_surf_window_h_1(1:surf_usm_h%ns) )
    6414              READ ( 13 )  tmp_surf_window_h
    6415           ENDIF
    6416           CALL surface_restore_elements( t_surf_window_h_1, tmp_surf_window_h,                     &
    6417                                          surf_usm_h%start_index, start_index_on_file,              &
     6176             IF ( .NOT.  ALLOCATED( m_liq_usm_h(0)%val ) )                                         &
     6177                ALLOCATE( m_liq_usm_h(0)%val(1:surf_usm_h(0)%ns) )
     6178             READ ( 13 )  tmp_surf_mliq_h(0)%val
     6179          ENDIF
     6180          CALL surface_restore_elements( m_liq_usm_h(0)%val, tmp_surf_mliq_h(0)%val,               &
     6181                                         surf_usm_h(0)%start_index, start_index_on_file,           &
    64186182                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    64196183                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    64206184
    6421        CASE ( 't_surf_window_v(0)' )
     6185       CASE ( 'm_liq_usm_h(1)' )
    64226186          IF ( k == 1 )  THEN
    6423              IF ( .NOT.  ALLOCATED( t_surf_window_v_1(0)%t ) )                                     &
    6424                 ALLOCATE( t_surf_window_v_1(0)%t(1:surf_usm_v(0)%ns) )
    6425              READ ( 13 )  tmp_surf_window_v(0)%t
    6426           ENDIF
    6427           CALL surface_restore_elements( t_surf_window_v_1(0)%t, tmp_surf_window_v(0)%t,           &
    6428                                          surf_usm_v(0)%start_index, start_index_on_file,           &
     6187             IF ( .NOT.  ALLOCATED( m_liq_usm_h(1)%val ) )                                         &
     6188                ALLOCATE( m_liq_usm_h(1)%val(1:surf_usm_h(1)%ns) )
     6189             READ ( 13 )  tmp_surf_mliq_h(1)%val
     6190          ENDIF
     6191          CALL surface_restore_elements( m_liq_usm_h(1)%val, tmp_surf_mliq_h(1)%val,               &
     6192                                         surf_usm_h(1)%start_index, start_index_on_file,           &
    64296193                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    64306194                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    64316195
    6432        CASE ( 't_surf_window_v(1)' )
     6196       CASE ( 'waste_heat_h(0)' )
    64336197          IF ( k == 1 )  THEN
    6434              IF ( .NOT.  ALLOCATED( t_surf_window_v_1(1)%t ) )                                     &
    6435                 ALLOCATE( t_surf_window_v_1(1)%t(1:surf_usm_v(1)%ns) )
    6436              READ ( 13 )  tmp_surf_window_v(1)%t
    6437           ENDIF
    6438           CALL surface_restore_elements( t_surf_window_v_1(1)%t, tmp_surf_window_v(1)%t,           &
    6439                                          surf_usm_v(1)%start_index, start_index_on_file,           &
     6198             IF ( .NOT.  ALLOCATED( surf_usm_h(0)%waste_heat ) )                                   &
     6199                ALLOCATE( surf_usm_h(0)%waste_heat(1:surf_usm_h(0)%ns) )
     6200             READ ( 13 )  tmp_surf_waste_h(0)%val
     6201          ENDIF
     6202          CALL surface_restore_elements( surf_usm_h(0)%waste_heat, tmp_surf_waste_h(0)%val,          &
     6203                                         surf_usm_h(0)%start_index, start_index_on_file,           &
    64406204                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    64416205                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    64426206
    6443        CASE ( 't_surf_window_v(2)' )
     6207       CASE ( 'waste_heat_h(1)' )
    64446208          IF ( k == 1 )  THEN
    6445              IF ( .NOT.  ALLOCATED( t_surf_window_v_1(2)%t ) )                                     &
    6446                 ALLOCATE( t_surf_window_v_1(2)%t(1:surf_usm_v(2)%ns) )
    6447              READ ( 13 )  tmp_surf_window_v(2)%t
    6448           ENDIF
    6449           CALL surface_restore_elements( t_surf_window_v_1(2)%t, tmp_surf_window_v(2)%t,           &
    6450                                          surf_usm_v(2)%start_index, start_index_on_file,           &
     6209             IF ( .NOT.  ALLOCATED( surf_usm_h(1)%waste_heat ) )                                   &
     6210                ALLOCATE( surf_usm_h(1)%waste_heat(1:surf_usm_h(1)%ns) )
     6211             READ ( 13 )  tmp_surf_waste_h(1)%val
     6212          ENDIF
     6213          CALL surface_restore_elements( surf_usm_h(1)%waste_heat, tmp_surf_waste_h(1)%val,          &
     6214                                         surf_usm_h(1)%start_index, start_index_on_file,           &
    64516215                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    64526216                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    64536217
    6454        CASE ( 't_surf_window_v(3)' )
    6455           IF ( k == 1 )  THEN
    6456              IF ( .NOT.  ALLOCATED( t_surf_window_v_1(3)%t ) )                                     &
    6457                 ALLOCATE( t_surf_window_v_1(3)%t(1:surf_usm_v(3)%ns) )
    6458              READ ( 13 )  tmp_surf_window_v(3)%t
    6459           ENDIF
    6460           CALL surface_restore_elements( t_surf_window_v_1(3)%t, tmp_surf_window_v(3)%t,           &
    6461                                          surf_usm_v(3)%start_index, start_index_on_file,           &
    6462                                          end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    6463                                          nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    6464 
    6465        CASE ( 'm_liq_usm_h' )
    6466           IF ( k == 1 )  THEN
    6467              IF ( .NOT.  ALLOCATED( m_liq_usm_h%var_usm_1d ) )                                     &
    6468                 ALLOCATE( m_liq_usm_h%var_usm_1d(1:surf_usm_h%ns) )
    6469              READ ( 13 )  tmp_surf_mliq_h
    6470           ENDIF
    6471           CALL surface_restore_elements( m_liq_usm_h%var_usm_1d, tmp_surf_mliq_h,                  &
    6472                                          surf_usm_h%start_index, start_index_on_file,              &
    6473                                          end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    6474                                          nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    6475 
    6476        CASE ( 'waste_heat_h' )
    6477           IF ( k == 1 )  THEN
    6478              IF ( .NOT.  ALLOCATED( surf_usm_h%waste_heat ) )                                      &
    6479                 ALLOCATE( surf_usm_h%waste_heat(1:surf_usm_h%ns) )
    6480              READ ( 13 )  tmp_surf_waste_h
    6481           ENDIF
    6482           CALL surface_restore_elements( surf_usm_h%waste_heat, tmp_surf_waste_h,                  &
    6483                                          surf_usm_h%start_index, start_index_on_file,              &
    6484                                          end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    6485                                          nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    64866218
    64876219       CASE ( 'waste_heat_v(0)' )
     
    64896221             IF ( .NOT.  ALLOCATED( surf_usm_v(0)%waste_heat ) )                                   &
    64906222                ALLOCATE( surf_usm_v(0)%waste_heat(1:surf_usm_v(0)%ns) )
    6491              READ ( 13 )  tmp_surf_waste_v(0)%t
    6492           ENDIF
    6493           CALL surface_restore_elements( surf_usm_v(0)%waste_heat, tmp_surf_waste_v(0)%t,          &
     6223             READ ( 13 )  tmp_surf_waste_v(0)%val
     6224          ENDIF
     6225          CALL surface_restore_elements( surf_usm_v(0)%waste_heat, tmp_surf_waste_v(0)%val,          &
    64946226                                         surf_usm_v(0)%start_index, start_index_on_file,           &
    64956227                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     
    65006232             IF ( .NOT.  ALLOCATED( surf_usm_v(1)%waste_heat ) )                                   &
    65016233                ALLOCATE( surf_usm_v(1)%waste_heat(1:surf_usm_v(1)%ns) )
    6502              READ ( 13 )  tmp_surf_waste_v(1)%t
    6503           ENDIF
    6504           CALL surface_restore_elements( surf_usm_v(1)%waste_heat, tmp_surf_waste_v(1)%t,          &
     6234             READ ( 13 )  tmp_surf_waste_v(1)%val
     6235          ENDIF
     6236          CALL surface_restore_elements( surf_usm_v(1)%waste_heat, tmp_surf_waste_v(1)%val,          &
    65056237                                         surf_usm_v(1)%start_index, start_index_on_file,           &
    65066238                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     
    65116243             IF ( .NOT.  ALLOCATED( surf_usm_v(2)%waste_heat ) )                                   &
    65126244                ALLOCATE( surf_usm_v(2)%waste_heat(1:surf_usm_v(2)%ns) )
    6513              READ ( 13 )  tmp_surf_waste_v(2)%t
    6514           ENDIF
    6515           CALL surface_restore_elements( surf_usm_v(2)%waste_heat, tmp_surf_waste_v(2)%t,          &
     6245             READ ( 13 )  tmp_surf_waste_v(2)%val
     6246          ENDIF
     6247          CALL surface_restore_elements( surf_usm_v(2)%waste_heat, tmp_surf_waste_v(2)%val,          &
    65166248                                         surf_usm_v(2)%start_index, start_index_on_file,           &
    65176249                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     
    65226254             IF ( .NOT.  ALLOCATED( surf_usm_v(3)%waste_heat ) )                                   &
    65236255                ALLOCATE( surf_usm_v(3)%waste_heat(1:surf_usm_v(3)%ns) )
    6524              READ ( 13 )  tmp_surf_waste_v(3)%t
    6525           ENDIF
    6526           CALL surface_restore_elements( surf_usm_v(3)%waste_heat, tmp_surf_waste_v(3)%t,          &
     6256             READ ( 13 )  tmp_surf_waste_v(3)%val
     6257          ENDIF
     6258          CALL surface_restore_elements( surf_usm_v(3)%waste_heat, tmp_surf_waste_v(3)%val,          &
    65276259                                         surf_usm_v(3)%start_index, start_index_on_file,           &
    65286260                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    65296261                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    65306262
    6531        CASE ( 't_wall_h' )
     6263       CASE ( 't_wall_h(0)' )
    65326264          IF ( k == 1 )  THEN
    6533              IF ( .NOT.  ALLOCATED( t_wall_h_1 ) )                                                 &
    6534                 ALLOCATE( t_wall_h_1(nzb_wall:nzt_wall+1, 1:surf_usm_h%ns) )
    6535              READ ( 13 )  tmp_wall_h
    6536           ENDIF
    6537           CALL surface_restore_elements( t_wall_h_1, tmp_wall_h, surf_usm_h%start_index,           &
    6538                                          start_index_on_file, end_index_on_file,                   &
    6539                                          nxlc, nysc, nxlf, nxrf, nysf, nynf,                       &
     6265             IF ( .NOT.  ALLOCATED( t_wall_h_1(0)%val ) )                                            &
     6266                ALLOCATE( t_wall_h_1(0)%val(nzb_wall:nzt_wall+1, 1:surf_usm_h(0)%ns) )
     6267             READ ( 13 )  tmp_wall_h(0)%val
     6268          ENDIF
     6269          CALL surface_restore_elements( t_wall_h_1(0)%val, tmp_wall_h(0)%val,                         &
     6270                                         surf_usm_h(0)%start_index, start_index_on_file,           &
     6271                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    65406272                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    65416273
    6542 
    6543 
     6274       CASE ( 't_wall_h(1)' )
     6275          IF ( k == 1 )  THEN
     6276             IF ( .NOT.  ALLOCATED( t_wall_h_1(1)%val ) )                                            &
     6277                ALLOCATE( t_wall_h_1(1)%val(nzb_wall:nzt_wall+1, 1:surf_usm_h(1)%ns) )
     6278             READ ( 13 )  tmp_wall_h(1)%val
     6279          ENDIF
     6280          CALL surface_restore_elements( t_wall_h_1(1)%val, tmp_wall_h(1)%val,                         &
     6281                                         surf_usm_h(1)%start_index, start_index_on_file,           &
     6282                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6283                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    65446284
    65456285       CASE ( 't_wall_v(0)' )
    65466286          IF ( k == 1 )  THEN
    6547              IF ( .NOT.  ALLOCATED( t_wall_v_1(0)%t ) )                                            &
    6548                 ALLOCATE( t_wall_v_1(0)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(0)%ns) )
    6549              READ ( 13 )  tmp_wall_v(0)%t
    6550           ENDIF
    6551           CALL surface_restore_elements( t_wall_v_1(0)%t, tmp_wall_v(0)%t,                         &
     6287             IF ( .NOT.  ALLOCATED( t_wall_v_1(0)%val ) )                                            &
     6288                ALLOCATE( t_wall_v_1(0)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(0)%ns) )
     6289             READ ( 13 )  tmp_wall_v(0)%val
     6290          ENDIF
     6291          CALL surface_restore_elements( t_wall_v_1(0)%val, tmp_wall_v(0)%val,                         &
    65526292                                         surf_usm_v(0)%start_index, start_index_on_file,           &
    65536293                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     
    65566296       CASE ( 't_wall_v(1)' )
    65576297          IF ( k == 1 )  THEN
    6558              IF ( .NOT.  ALLOCATED( t_wall_v_1(1)%t ) )                                            &
    6559                 ALLOCATE( t_wall_v_1(1)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(1)%ns) )
    6560              READ ( 13 )  tmp_wall_v(1)%t
    6561           ENDIF
    6562           CALL surface_restore_elements( t_wall_v_1(1)%t, tmp_wall_v(1)%t,                         &
     6298             IF ( .NOT.  ALLOCATED( t_wall_v_1(1)%val ) )                                            &
     6299                ALLOCATE( t_wall_v_1(1)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(1)%ns) )
     6300             READ ( 13 )  tmp_wall_v(1)%val
     6301          ENDIF
     6302          CALL surface_restore_elements( t_wall_v_1(1)%val, tmp_wall_v(1)%val,                         &
    65636303                                         surf_usm_v(1)%start_index, start_index_on_file,           &
    65646304                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     
    65676307       CASE ( 't_wall_v(2)' )
    65686308          IF ( k == 1 )  THEN
    6569              IF ( .NOT.  ALLOCATED( t_wall_v_1(2)%t ) )                                            &
    6570                 ALLOCATE( t_wall_v_1(2)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(2)%ns) )
    6571              READ ( 13 )  tmp_wall_v(2)%t
    6572           ENDIF
    6573           CALL surface_restore_elements( t_wall_v_1(2)%t, tmp_wall_v(2)%t,                         &
     6309             IF ( .NOT.  ALLOCATED( t_wall_v_1(2)%val ) )                                            &
     6310                ALLOCATE( t_wall_v_1(2)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(2)%ns) )
     6311             READ ( 13 )  tmp_wall_v(2)%val
     6312          ENDIF
     6313          CALL surface_restore_elements( t_wall_v_1(2)%val, tmp_wall_v(2)%val,                         &
    65746314                                         surf_usm_v(2)%start_index, start_index_on_file,           &
    65756315                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     
    65786318       CASE ( 't_wall_v(3)' )
    65796319          IF ( k == 1 )  THEN
    6580              IF ( .NOT.  ALLOCATED( t_wall_v_1(3)%t ) )                                            &
    6581                 ALLOCATE( t_wall_v_1(3)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(3)%ns) )
    6582              READ ( 13 )  tmp_wall_v(3)%t
    6583           ENDIF
    6584           CALL surface_restore_elements( t_wall_v_1(3)%t, tmp_wall_v(3)%t,                         &
     6320             IF ( .NOT.  ALLOCATED( t_wall_v_1(3)%val ) )                                            &
     6321                ALLOCATE( t_wall_v_1(3)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(3)%ns) )
     6322             READ ( 13 )  tmp_wall_v(3)%val
     6323          ENDIF
     6324          CALL surface_restore_elements( t_wall_v_1(3)%val, tmp_wall_v(3)%val,                         &
    65856325                                         surf_usm_v(3)%start_index, start_index_on_file,           &
    65866326                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    65876327                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    65886328
    6589        CASE ( 't_green_h' )
     6329       CASE ( 't_window_h(0)' )
    65906330          IF ( k == 1 )  THEN
    6591              IF ( .NOT.  ALLOCATED( t_green_h_1 ) )                                                &
    6592                 ALLOCATE( t_green_h_1(nzb_wall:nzt_wall+1, 1:surf_usm_h%ns) )
    6593              READ ( 13 )  tmp_green_h
    6594           ENDIF
    6595           CALL surface_restore_elements( t_green_h_1, tmp_green_h, surf_usm_h%start_index,         &
    6596                                          start_index_on_file, end_index_on_file, nxlc, nysc,       &
    6597                                          nxlf, nxrf, nysf, nynf, nys_on_file, nyn_on_file,         &
    6598                                          nxl_on_file,nxr_on_file )
    6599 
    6600        CASE ( 't_green_v(0)' )
     6331             IF ( .NOT.  ALLOCATED( t_window_h_1(0)%val ) )                                               &
     6332                ALLOCATE( t_window_h_1(0)%val(nzb_wall:nzt_wall+1, 1:surf_usm_h(0)%ns) )
     6333             READ ( 13 )  tmp_window_h(0)%val
     6334          ENDIF
     6335          CALL surface_restore_elements( t_window_h_1(0)%val, tmp_window_h(0)%val,                     &
     6336                                         surf_usm_h(0)%start_index, start_index_on_file,           &
     6337                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6338                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
     6339
     6340       CASE ( 't_window_h(1)' )
    66016341          IF ( k == 1 )  THEN
    6602              IF ( .NOT.  ALLOCATED( t_green_v_1(0)%t ) )                                           &
    6603                 ALLOCATE( t_green_v_1(0)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(0)%ns) )
    6604              READ ( 13 )  tmp_green_v(0)%t
    6605           ENDIF
    6606           CALL surface_restore_elements( t_green_v_1(0)%t, tmp_green_v(0)%t,                       &
     6342             IF ( .NOT.  ALLOCATED( t_window_h_1(1)%val ) )                                               &
     6343                ALLOCATE( t_window_h_1(1)%val(nzb_wall:nzt_wall+1, 1:surf_usm_h(1)%ns) )
     6344             READ ( 13 )  tmp_window_h(1)%val
     6345          ENDIF
     6346          CALL surface_restore_elements( t_window_h_1(1)%val, tmp_window_h(1)%val,                     &
     6347                                         surf_usm_h(1)%start_index, start_index_on_file,           &
     6348                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6349                                         nys_on_file, nyn_on_file, nxl_on_file, nxr_on_file )
     6350
     6351       CASE ( 't_window_v(0)' )
     6352          IF ( k == 1 )  THEN
     6353             IF ( .NOT.  ALLOCATED( t_window_v_1(0)%val ) )                                          &
     6354                ALLOCATE( t_window_v_1(0)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(0)%ns) )
     6355             READ ( 13 )  tmp_window_v(0)%val
     6356          ENDIF
     6357          CALL surface_restore_elements( t_window_v_1(0)%val, tmp_window_v(0)%val,                     &
    66076358                                         surf_usm_v(0)%start_index, start_index_on_file,           &
    66086359                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    66096360                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    66106361
    6611        CASE ( 't_green_v(1)' )
     6362       CASE ( 't_window_v(1)' )
    66126363          IF ( k == 1 )  THEN
    6613              IF ( .NOT.  ALLOCATED( t_green_v_1(1)%t ) )                                           &
    6614                 ALLOCATE( t_green_v_1(1)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(1)%ns) )
    6615              READ ( 13 )  tmp_green_v(1)%t
    6616           ENDIF
    6617           CALL surface_restore_elements( t_green_v_1(1)%t, tmp_green_v(1)%t,                       &
     6364             IF ( .NOT.  ALLOCATED( t_window_v_1(1)%val ) )                                          &
     6365                ALLOCATE( t_window_v_1(1)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(1)%ns) )
     6366             READ ( 13 )  tmp_window_v(1)%val
     6367          ENDIF
     6368          CALL surface_restore_elements( t_window_v_1(1)%val, tmp_window_v(1)%val,                     &
    66186369                                         surf_usm_v(1)%start_index, start_index_on_file,           &
    66196370                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    66206371                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    66216372
    6622        CASE ( 't_green_v(2)' )
     6373       CASE ( 't_window_v(2)' )
    66236374          IF ( k == 1 )  THEN
    6624              IF ( .NOT.  ALLOCATED( t_green_v_1(2)%t ) )                                           &
    6625                 ALLOCATE( t_green_v_1(2)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(2)%ns) )
    6626              READ ( 13 )  tmp_green_v(2)%t
    6627           ENDIF
    6628           CALL surface_restore_elements( t_green_v_1(2)%t, tmp_green_v(2)%t,                       &
     6375             IF ( .NOT.  ALLOCATED( t_window_v_1(2)%val ) )                                          &
     6376                ALLOCATE( t_window_v_1(2)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(2)%ns) )
     6377             READ ( 13 )  tmp_window_v(2)%val
     6378          ENDIF
     6379          CALL surface_restore_elements( t_window_v_1(2)%val, tmp_window_v(2)%val,                     &
    66296380                                         surf_usm_v(2)%start_index, start_index_on_file,           &
    66306381                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    66316382                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    66326383
    6633        CASE ( 't_green_v(3)' )
     6384       CASE ( 't_window_v(3)' )
    66346385          IF ( k == 1 )  THEN
    6635              IF ( .NOT.  ALLOCATED( t_green_v_1(3)%t ) )                                           &
    6636                 ALLOCATE( t_green_v_1(3)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(3)%ns) )
    6637              READ ( 13 )  tmp_green_v(3)%t
    6638           ENDIF
    6639           CALL surface_restore_elements( t_green_v_1(3)%t, tmp_green_v(3)%t,                       &
     6386             IF ( .NOT.  ALLOCATED( t_window_v_1(3)%val ) )                                          &
     6387                ALLOCATE( t_window_v_1(3)%val(nzb_wall:nzt_wall+1,1:surf_usm_v(3)%ns) )
     6388             READ ( 13 )  tmp_window_v(3)%val
     6389          ENDIF
     6390          CALL surface_restore_elements( t_window_v_1(3)%val, tmp_window_v(3)%val,                     &
    66406391                                         surf_usm_v(3)%start_index, start_index_on_file,           &
    66416392                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    66426393                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    66436394
    6644        CASE ( 't_window_h' )
     6395       CASE ( 't_green_h(0)' )
    66456396          IF ( k == 1 )  THEN
    6646              IF ( .NOT.  ALLOCATED( t_window_h_1 ) )                                               &
    6647                 ALLOCATE( t_window_h_1(nzb_wall:nzt_wall+1, 1:surf_usm_h%ns) )
    6648              READ ( 13 )  tmp_window_h
    6649           ENDIF
    6650           CALL surface_restore_elements( t_window_h_1, tmp_window_h, surf_usm_h%start_index,       &
    6651                                          start_index_on_file, end_index_on_file, nxlc, nysc,       &
    6652                                          nxlf, nxrf, nysf, nynf, nys_on_file, nyn_on_file,         &
    6653                                          nxl_on_file, nxr_on_file )
    6654 
    6655        CASE ( 't_window_v(0)' )
     6397             IF ( .NOT.  ALLOCATED( t_green_h_1(0)%val ) )                                           &
     6398                ALLOCATE( t_green_h_1(0)%val(nzb_wall:nzt_wall+1, 1:surf_usm_h(0)%ns) )
     6399             READ ( 13 )  tmp_green_h(0)%val
     6400          ENDIF
     6401          CALL surface_restore_elements( t_green_h_1(0)%val, tmp_green_h(0)%val,                       &
     6402                                         surf_usm_h(0)%start_index, start_index_on_file,              &
     6403                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6404                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
     6405
     6406       CASE ( 't_green_h(1)' )
    66566407          IF ( k == 1 )  THEN
    6657              IF ( .NOT.  ALLOCATED( t_window_v_1(0)%t ) )                                          &
    6658                 ALLOCATE( t_window_v_1(0)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(0)%ns) )
    6659              READ ( 13 )  tmp_window_v(0)%t
    6660           ENDIF
    6661           CALL surface_restore_elements( t_window_v_1(0)%t, tmp_window_v(0)%t,                     &
     6408             IF ( .NOT.  ALLOCATED( t_green_h_1(1)%val ) )                                           &
     6409                ALLOCATE( t_green_h_1(1)%val(nzb_wall:nzt_wall+1, 1:surf_usm_h(1)%ns) )
     6410             READ ( 13 )  tmp_green_h(1)%val
     6411          ENDIF
     6412          CALL surface_restore_elements( t_green_h_1(1)%val, tmp_green_h(1)%val,                       &
     6413                                         surf_usm_h(1)%start_index, start_index_on_file,              &
     6414                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     6415                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
     6416
     6417       CASE ( 't_green_v(0)' )
     6418          IF ( k == 1 )  THEN
     6419             IF ( .NOT.  ALLOCATED( t_green_v_1(0)%val ) )                                           &
     6420                ALLOCATE( t_green_v_1(0)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(0)%ns) )
     6421             READ ( 13 )  tmp_green_v(0)%val
     6422          ENDIF
     6423          CALL surface_restore_elements( t_green_v_1(0)%val, tmp_green_v(0)%val,                       &
    66626424                                         surf_usm_v(0)%start_index, start_index_on_file,           &
    66636425                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    66646426                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    66656427
    6666        CASE ( 't_window_v(1)' )
     6428       CASE ( 't_green_v(1)' )
    66676429          IF ( k == 1 )  THEN
    6668              IF ( .NOT.  ALLOCATED( t_window_v_1(1)%t ) )                                          &
    6669                 ALLOCATE( t_window_v_1(1)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(1)%ns) )
    6670              READ ( 13 )  tmp_window_v(1)%t
    6671           ENDIF
    6672           CALL surface_restore_elements( t_window_v_1(1)%t, tmp_window_v(1)%t,                     &
     6430             IF ( .NOT.  ALLOCATED( t_green_v_1(1)%val ) )                                           &
     6431                ALLOCATE( t_green_v_1(1)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(1)%ns) )
     6432             READ ( 13 )  tmp_green_v(1)%val
     6433          ENDIF
     6434          CALL surface_restore_elements( t_green_v_1(1)%val, tmp_green_v(1)%val,                       &
    66736435                                         surf_usm_v(1)%start_index, start_index_on_file,           &
    66746436                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    66756437                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    66766438
    6677        CASE ( 't_window_v(2)' )
     6439       CASE ( 't_green_v(2)' )
    66786440          IF ( k == 1 )  THEN
    6679              IF ( .NOT.  ALLOCATED( t_window_v_1(2)%t ) )                                          &
    6680                 ALLOCATE( t_window_v_1(2)%t(nzb_wall:nzt_wall+1, 1:surf_usm_v(2)%ns) )
    6681              READ ( 13 )  tmp_window_v(2)%t
    6682           ENDIF
    6683           CALL surface_restore_elements( t_window_v_1(2)%t, tmp_window_v(2)%t,                     &
     6441             IF ( .NOT.  ALLOCATED( t_green_v_1(2)%val ) )                                           &
     6442                ALLOCATE( t_green_v_1(2)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(2)%ns) )
     6443             READ ( 13 )  tmp_green_v(2)%val
     6444          ENDIF
     6445          CALL surface_restore_elements( t_green_v_1(2)%val, tmp_green_v(2)%val,                       &
    66846446                                         surf_usm_v(2)%start_index, start_index_on_file,           &
    66856447                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
    66866448                                         nys_on_file, nyn_on_file, nxl_on_file,nxr_on_file )
    66876449
    6688        CASE ( 't_window_v(3)' )
     6450       CASE ( 't_green_v(3)' )
    66896451          IF ( k == 1 )  THEN
    6690              IF ( .NOT.  ALLOCATED( t_window_v_1(3)%t ) )                                          &
    6691                 ALLOCATE( t_window_v_1(3)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(3)%ns) )
    6692              READ ( 13 )  tmp_window_v(3)%t
    6693           ENDIF
    6694           CALL surface_restore_elements( t_window_v_1(3)%t, tmp_window_v(3)%t,                     &
     6452             IF ( .NOT.  ALLOCATED( t_green_v_1(3)%val ) )                                           &
     6453                ALLOCATE( t_green_v_1(3)%val(nzb_wall:nzt_wall+1, 1:surf_usm_v(3)%ns) )
     6454             READ ( 13 )  tmp_green_v(3)%val
     6455          ENDIF
     6456          CALL surface_restore_elements( t_green_v_1(3)%val, tmp_green_v(3)%val,                       &
    66956457                                         surf_usm_v(3)%start_index, start_index_on_file,           &
    66966458                                         end_index_on_file, nxlc, nysc, nxlf, nxrf, nysf, nynf,    &
     
    67316493    LOGICAL ::  ldum  !< dummy variable
    67326494
    6733 
    6734     CALL rrd_mpi_io( 'usm_start_index_h',  surf_usm_h%start_index )
    6735     CALL rrd_mpi_io( 'usm_end_index_h', surf_usm_h%end_index )
    6736     CALL rrd_mpi_io( 'usm_global_start_h', global_start )
    6737 
    6738     CALL rd_mpi_io_surface_filetypes( surf_usm_h%start_index, surf_usm_h%end_index, ldum,          &
    6739                                       global_start )
    6740 
    6741     IF ( .NOT.  ALLOCATED( t_surf_wall_h_1 ) )  ALLOCATE( t_surf_wall_h_1(1:surf_usm_h%ns) )
    6742     CALL rrd_mpi_io_surface( 't_surf_wall_h', t_surf_wall_h_1 )
    6743 
    6744     IF ( .NOT.  ALLOCATED( t_surf_window_h_1 ) )  ALLOCATE( t_surf_window_h_1(1:surf_usm_h%ns) )
    6745     CALL rrd_mpi_io_surface( 't_surf_window_h', t_surf_window_h_1 )
    6746 
    6747     IF ( .NOT.  ALLOCATED( t_surf_green_h_1 ) )  ALLOCATE( t_surf_green_h_1(1:surf_usm_h%ns) )
    6748     CALL rrd_mpi_io_surface( 't_surf_green_h', t_surf_green_h_1 )
    6749 
     6495    DO  l = 0, 1
     6496
     6497       WRITE( dum, '(I1)' )  l
     6498
     6499       CALL rrd_mpi_io( 'usm_start_index_h_' //dum,  surf_usm_h(l)%start_index )
     6500       CALL rrd_mpi_io( 'usm_end_index_h_' //dum, surf_usm_h(l)%end_index )
     6501       CALL rrd_mpi_io( 'usm_global_start_h_' //dum, global_start )
     6502
     6503       CALL rd_mpi_io_surface_filetypes( surf_usm_h(l)%start_index, surf_usm_h(l)%end_index, ldum, &
     6504                                         global_start )
     6505
     6506       IF ( .NOT.  ALLOCATED( t_surf_wall_h_1(l)%val ) )                                             &
     6507          ALLOCATE( t_surf_wall_h_1(l)%val(1:surf_usm_h(l)%ns) )
     6508       CALL rrd_mpi_io_surface( 't_surf_wall_h(' // dum // ')', t_surf_wall_h_1(l)%val )
     6509
     6510       IF ( .NOT.  ALLOCATED( t_surf_window_h_1(l)%val ) )                                           &
     6511          ALLOCATE( t_surf_window_h_1(l)%val(1:surf_usm_h(l)%ns) )
     6512       CALL rrd_mpi_io_surface( 't_surf_window_h(' // dum // ')', t_surf_window_h_1(l)%val )
     6513
     6514       IF ( .NOT.  ALLOCATED( t_surf_green_h_1(l)%val ) )                                            &
     6515          ALLOCATE( t_surf_green_h_1(l)%val(1:surf_usm_h(l)%ns) )
     6516       CALL rrd_mpi_io_surface( 't_surf_green_h(' // dum // ')', t_surf_green_h_1(l)%val )
     6517
     6518    ENDDO
    67506519    DO  l = 0, 3
    67516520
     
    67596528                                         global_start )
    67606529
    6761        IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(l)%t ) )                                             &
    6762           ALLOCATE( t_surf_wall_v_1(l)%t(1:surf_usm_v(l)%ns) )
    6763        CALL rrd_mpi_io_surface( 't_surf_wall_v(' // dum // ')', t_surf_wall_v_1(l)%t )
    6764 
    6765        IF ( .NOT.  ALLOCATED( t_surf_window_v_1(l)%t ) )                                           &
    6766           ALLOCATE( t_surf_window_v_1(l)%t(1:surf_usm_v(l)%ns) )
    6767        CALL rrd_mpi_io_surface( 't_surf_window_v(' // dum // ')', t_surf_window_v_1(l)%t )
    6768 
    6769        IF ( .NOT.  ALLOCATED( t_surf_green_v_1(l)%t ) )                                            &
    6770           ALLOCATE( t_surf_green_v_1(l)%t(1:surf_usm_v(l)%ns) )
    6771        CALL rrd_mpi_io_surface( 't_surf_green_v(' // dum // ')', t_surf_green_v_1(l)%t)
     6530       IF ( .NOT.  ALLOCATED( t_surf_wall_v_1(l)%val ) )                                             &
     6531          ALLOCATE( t_surf_wall_v_1(l)%val(1:surf_usm_v(l)%ns) )
     6532       CALL rrd_mpi_io_surface( 't_surf_wall_v(' // dum // ')', t_surf_wall_v_1(l)%val )
     6533
     6534       IF ( .NOT.  ALLOCATED( t_surf_window_v_1(l)%val ) )                                           &
     6535          ALLOCATE( t_surf_window_v_1(l)%val(1:surf_usm_v(l)%ns) )
     6536       CALL rrd_mpi_io_surface( 't_surf_window_v(' // dum // ')', t_surf_window_v_1(l)%val )
     6537
     6538       IF ( .NOT.  ALLOCATED( t_surf_green_v_1(l)%val ) )                                            &
     6539          ALLOCATE( t_surf_green_v_1(l)%val(1:surf_usm_v(l)%ns) )
     6540       CALL rrd_mpi_io_surface( 't_surf_green_v(' // dum // ')', t_surf_green_v_1(l)%val)
    67726541
    67736542    ENDDO
    67746543
    6775     CALL rrd_mpi_io( 'usm_start_index_h_2',  surf_usm_h%start_index )
    6776     CALL rrd_mpi_io( 'usm_end_index_h_2', surf_usm_h%end_index )
    6777     CALL rrd_mpi_io( 'usm_global_start_h_2', global_start )
    6778 
    6779     CALL rd_mpi_io_surface_filetypes( surf_usm_h%start_index, surf_usm_h%end_index, ldum,          &
    6780                                       global_start )
    6781 
    6782     IF ( .NOT.  ALLOCATED( t_wall_h_1 ) )                                                          &
    6783        ALLOCATE( t_wall_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    6784     CALL rrd_mpi_io_surface( 't_wall_h', t_wall_h_1 )
    6785 
    6786     IF ( .NOT.  ALLOCATED( t_window_h_1 ) )                                                        &
    6787        ALLOCATE( t_window_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    6788     CALL rrd_mpi_io_surface( 't_window_h', t_window_h_1 )
    6789 
    6790     IF ( .NOT.  ALLOCATED( t_green_h_1 ) )                                                         &
    6791        ALLOCATE( t_green_h_1(nzb_wall:nzt_wall+1,1:surf_usm_h%ns) )
    6792     CALL rrd_mpi_io_surface( 't_green_h', t_green_h_1 )
     6544    DO  l = 0, 1
     6545
     6546       WRITE( dum, '(I1)' )  l
     6547
     6548       CALL rrd_mpi_io( 'usm_start_index_h_2_' //dum,  surf_usm_h(l)%start_index )
     6549       CALL rrd_mpi_io( 'usm_end_index_h_2_' //dum, surf_usm_h(l)%end_index )
     6550       CALL rrd_mpi_io( 'usm_global_start_h_2_' //dum, global_start )
     6551
     6552       CALL rd_mpi_io_surface_filetypes( surf_usm_h(l)%start_index, surf_usm_h(l)%end_index, ldum,          &
     6553                                         global_start )
     6554
     6555       IF ( .NOT.  ALLOCATED( t_wall_h_1(l)%val ) )                                                          &
     6556          ALLOCATE( t_wall_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     6557       CALL rrd_mpi_io_surface( 't_wall_h(' // dum // ')', t_wall_h_1(l)%val )
     6558
     6559       IF ( .NOT.  ALLOCATED( t_window_h_1(l)%val ) )                                                        &
     6560          ALLOCATE( t_window_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     6561       CALL rrd_mpi_io_surface( 't_window_h(' // dum // ')', t_window_h_1(l)%val )
     6562
     6563       IF ( .NOT.  ALLOCATED( t_green_h_1(l)%val ) )                                                         &
     6564          ALLOCATE( t_green_h_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_h(l)%ns) )
     6565       CALL rrd_mpi_io_surface( 't_green_h(' // dum // ')', t_green_h_1(l)%val )
     6566    ENDDO
    67936567
    67946568    DO  l = 0, 3
     
    68036577                                         global_start )
    68046578
    6805        IF ( .NOT. ALLOCATED( t_wall_v_1(l)%t ) )                                                   &
    6806           ALLOCATE ( t_wall_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
    6807        CALL rrd_mpi_io_surface( 't_wall_v(' // dum // ')', t_wall_v_1(l)%t )
    6808 
    6809        IF ( .NOT. ALLOCATED( t_window_v_1(l)%t ) )                                                 &
    6810           ALLOCATE ( t_window_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
    6811        CALL rrd_mpi_io_surface( 't_window_v(' // dum // ')', t_window_v_1(l)%t )
    6812 
    6813        IF ( .NOT. ALLOCATED( t_green_v_1(l)%t ) )                                                  &
    6814           ALLOCATE ( t_green_v_1(l)%t(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
    6815        CALL rrd_mpi_io_surface( 't_green_v(' // dum // ')', t_green_v_1(l)%t )
     6579       IF ( .NOT. ALLOCATED( t_wall_v_1(l)%val ) )                                                   &
     6580          ALLOCATE ( t_wall_v_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
     6581       CALL rrd_mpi_io_surface( 't_wall_v(' // dum // ')', t_wall_v_1(l)%val )
     6582
     6583       IF ( .NOT. ALLOCATED( t_window_v_1(l)%val ) )                                                 &
     6584          ALLOCATE ( t_window_v_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
     6585       CALL rrd_mpi_io_surface( 't_window_v(' // dum // ')', t_window_v_1(l)%val )
     6586
     6587       IF ( .NOT. ALLOCATED( t_green_v_1(l)%val ) )                                                  &
     6588          ALLOCATE ( t_green_v_1(l)%val(nzb_wall:nzt_wall+1,1:surf_usm_v(l)%ns) )
     6589       CALL rrd_mpi_io_surface( 't_green_v(' // dum // ')', t_green_v_1(l)%val )
    68166590
    68176591    ENDDO
    68186592
    68196593 END SUBROUTINE usm_rrd_local_mpi
    6820 
    6821 
    6822 
    6823 !--------------------------------------------------------------------------------------------------!
    6824 ! Description:
    6825 ! ------------
    6826 !
    6827 !> This subroutine reads walls, roofs and land categories and its parameters from input files.
    6828 !--------------------------------------------------------------------------------------------------!
    6829  SUBROUTINE usm_read_urban_surface_types
    6830 
    6831     USE netcdf_data_input_mod,                                                                     &
    6832         ONLY:  building_pars_f,                                                                    &
    6833                building_type_f
    6834 
    6835     IMPLICIT NONE
    6836 
    6837     CHARACTER(12)                                        ::  wtn  !<
    6838 
    6839     INTEGER(iwp)                                         ::  i, j                                  !<
    6840     INTEGER(iwp)                                         ::  ii, ij, ip, it, iw, jw, k, kw, l, m   !<
    6841     INTEGER(iwp)                                         ::  category                              !<
    6842     INTEGER(iwp)                                         ::  dirsn, dirwe, nz, roof                !<
    6843     INTEGER(iwp)                                         ::  weheight1, wecat1, snheight1, sncat1  !<
    6844     INTEGER(iwp)                                         ::  weheight2, wecat2, snheight2, sncat2  !<
    6845     INTEGER(iwp)                                         ::  weheight3, wecat3, snheight3, sncat3  !<
    6846     INTEGER(iwp)                                         ::  wtc                                   !<
    6847 
    6848     INTEGER(iwp), DIMENSION(0:17, nysg:nyng, nxlg:nxrg)  ::  usm_par  !<
    6849 
    6850     LOGICAL                                              ::  ascii_file = .FALSE.  !<
    6851 
    6852     REAL(wp)                                             ::  albedo, height, thick                     !<
    6853     REAL(wp)                                             ::  wealbedo1, wethick1, snalbedo1, snthick1  !<
    6854     REAL(wp)                                             ::  wealbedo2, wethick2, snalbedo2, snthick2  !<
    6855     REAL(wp)                                             ::  wealbedo3, wethick3, snalbedo3, snthick3  !<
    6856 
    6857     REAL(wp), DIMENSION(n_surface_params)                ::  wtp      !<
    6858 
    6859     REAL(wp), DIMENSION(1:14, nysg:nyng, nxlg:nxrg)      ::  usm_val  !<
    6860 
    6861 
    6862     IF ( debug_output )  CALL debug_message( 'usm_read_urban_surface_types', 'start' )
    6863 !
    6864 !-- If building_pars or building_type are already read from static input file, skip reading ASCII
    6865 !-- file.
    6866     IF ( building_type_f%from_file  .OR.  building_pars_f%from_file )  RETURN
    6867 !
    6868 !-- Check if ASCII input file exists. If not, return and initialize USM with default settings.
    6869     INQUIRE( FILE = 'SURFACE_PARAMETERS' // coupling_char, EXIST = ascii_file )
    6870 
    6871     IF ( .NOT. ascii_file )  RETURN
    6872 
    6873 !
    6874 !-- Read categories of walls and their parameters
    6875     DO  ii = 0, io_blocks-1
    6876         IF ( ii == io_group )  THEN
    6877 !
    6878 !--         Open urban surface file
    6879             OPEN( 151, file = 'SURFACE_PARAMETERS' // coupling_char,  action = 'read', &
    6880                        status = 'old', form = 'formatted', err = 15 )
    6881 !
    6882 !--         First test and get n_surface_types
    6883             k = 0
    6884             l = 0
    6885             DO
    6886                l = l+1
    6887                READ( 151, *, err = 11, end = 12 )  wtc, wtp, wtn
    6888                k = k+1
    6889                CYCLE
    6890  11            CONTINUE
    6891             ENDDO
    6892  12         n_surface_types = k
    6893             ALLOCATE( surface_type_names(n_surface_types) )
    6894             ALLOCATE( surface_type_codes(n_surface_types) )
    6895             ALLOCATE( surface_params(n_surface_params, n_surface_types) )
    6896 !
    6897 !--         Real reading
    6898             rewind( 151 )
    6899             k = 0
    6900             DO
    6901                READ( 151, *, err = 13, end = 14 )  wtc, wtp, wtn
    6902                k = k+1
    6903                surface_type_codes(k) = wtc
    6904                surface_params(:,k) = wtp
    6905                surface_type_names(k) = wtn
    6906                CYCLE
    6907 13             WRITE( 6,'(i3,a,2i5)') myid, 'readparams2 error k = ', k
    6908                FLUSH( 6 )
    6909                CONTINUE
    6910             ENDDO
    6911  14         CLOSE(151)
    6912             CYCLE
    6913  15         message_string = 'file SURFACE_PARAMETERS' // TRIM( coupling_char ) // ' does not exist'
    6914             CALL message( 'usm_read_urban_surface_types', 'PA0513', 1, 2, 0, 6, 0 )
    6915         ENDIF
    6916     ENDDO
    6917 
    6918 !
    6919 !-- Read types of surfaces
    6920     usm_par = 0
    6921     DO  ii = 0, io_blocks-1
    6922        IF ( ii == io_group )  THEN
    6923 
    6924 !
    6925 !--         Open csv urban surface file
    6926             OPEN( 151, file = 'URBAN_SURFACE' // TRIM( coupling_char ), action = 'read',           &
    6927                   status = 'old', form = 'formatted', err = 23 )
    6928 
    6929             l = 0
    6930             DO
    6931 
    6932                l = l+1
    6933 !
    6934 !--            i, j, height, nz, roof, dirwe, dirsn, category, soilcat,
    6935 !--            weheight1, wecat1, snheight1, sncat1, weheight2, wecat2, snheight2, sncat2,
    6936 !--            weheight3, wecat3, snheight3, sncat3
    6937                READ( 151, *, err = 21, end = 25 )  i, j, height, nz, roof, dirwe, dirsn,           &
    6938                                        category, albedo, thick,                                    &
    6939                                        weheight1, wecat1, wealbedo1, wethick1,                     &
    6940                                        weheight2, wecat2, wealbedo2, wethick2,                     &
    6941                                        weheight3, wecat3, wealbedo3, wethick3,                     &
    6942                                        snheight1, sncat1, snalbedo1, snthick1,                     &
    6943                                        snheight2, sncat2, snalbedo2, snthick2,                     &
    6944                                        snheight3, sncat3, snalbedo3, snthick3
    6945 
    6946                IF ( i >= nxlg  .AND.  i <= nxrg  .AND.  j >= nysg  .AND.  j <= nyng )  THEN
    6947 !
    6948 !--                Write integer variables into array
    6949                    usm_par(:,j,i) = (/1, nz, roof, dirwe, dirsn, category,                         &
    6950                                      weheight1, wecat1, weheight2, wecat2, weheight3, wecat3,      &
    6951                                      snheight1, sncat1, snheight2, sncat2, snheight3, sncat3 /)
    6952 !
    6953 !--                Write real values into array
    6954                    usm_val(:,j,i) = (/ albedo, thick,                                              &
    6955                                       wealbedo1, wethick1, wealbedo2, wethick2,                    &
    6956                                       wealbedo3, wethick3, snalbedo1, snthick1,                    &
    6957                                       snalbedo2, snthick2, snalbedo3, snthick3 /)
    6958                ENDIF
    6959                CYCLE
    6960  21            WRITE( message_string, '(A,I5)') 'errors in file URBAN_SURFACE ' //                 &
    6961                                                 TRIM( coupling_char ) // ' on line ', l
    6962                CALL message( 'usm_read_urban_surface_types', 'PA0512', 0, 1, 0, 6, 0 )
    6963             ENDDO
    6964 
    6965  23         message_string = 'file URBAN_SURFACE ' // TRIM( coupling_char ) // ' does not exist'
    6966             CALL message( 'usm_read_urban_surface_types', 'PA0514', 1, 2, 0, 6, 0 )
    6967 
    6968  25         CLOSE( 151 )
    6969 
    6970         ENDIF
    6971 #if defined( __parallel )
    6972         CALL MPI_BARRIER( comm2d, ierr )
    6973 #endif
    6974     ENDDO
    6975 
    6976 !
    6977 !-- Check completeness and formal correctness of the data
    6978     DO  i = nxlg, nxrg
    6979         DO  j = nysg, nyng
    6980             IF ( usm_par(0,j,i) /= 0  .AND.  (        &  !< incomplete data,supply default values later
    6981                  usm_par(1,j,i) < nzb  .OR.           &
    6982                  usm_par(1,j,i) > nzt  .OR.           &  !< incorrect height (nz < nzb  .OR.  nz > nzt)
    6983                  usm_par(2,j,i) < 0  .OR.             &
    6984                  usm_par(2,j,i) > 1  .OR.             &  !< incorrect roof sign
    6985                  usm_par(3,j,i) < nzb-nzt  .OR.       &
    6986                  usm_par(3,j,i) > nzt-nzb  .OR.       &  !< incorrect west-east wall direction sign
    6987                  usm_par(4,j,i) < nzb-nzt  .OR.       &
    6988                  usm_par(4,j,i) > nzt-nzb  .OR.       &  !< incorrect south-north wall direction sign
    6989                  usm_par(6,j,i) < nzb  .OR.           &
    6990                  usm_par(6,j,i) > nzt  .OR.           &  !< incorrect pedestrian level height for west-east wall
    6991                  usm_par(8,j,i) > nzt  .OR.           &
    6992                  usm_par(10,j,i) > nzt  .OR.          &  !< incorrect wall or roof level height for west-east wall
    6993                  usm_par(12,j,i) < nzb  .OR.          &
    6994                  usm_par(12,j,i) > nzt  .OR.          &  !< incorrect pedestrian level height for south-north wall
    6995                  usm_par(14,j,i) > nzt  .OR.          &
    6996                  usm_par(16,j,i) > nzt                &  !< incorrect wall or roof level height for south-north wall
    6997                 ) )  THEN
    6998 !
    6999 !--             Incorrect input data
    7000                 WRITE( message_string, '(A,2I5)' )                                                 &
    7001                 'missing or incorrect data in file URBAN_SURFACE' //  TRIM( coupling_char ) //     &
    7002                 ' for i,j=', i, j
    7003                 CALL message( 'usm_read_urban_surface', 'PA0504', 1, 2, 0, 6, 0 )
    7004             ENDIF
    7005 
    7006         ENDDO
    7007     ENDDO
    7008 !
    7009 !-- Assign the surface types to the respective data type. First, for horizontal upward-facing
    7010 !-- surfaces. Further, set flag indicating that albedo is initialized via ASCI format, else it would
    7011 !-- be overwritten in the radiation model.
    7012     surf_usm_h%albedo_from_ascii = .TRUE.
    7013     DO  m = 1, surf_usm_h%ns
    7014        iw = surf_usm_h%i(m)
    7015        jw = surf_usm_h%j(m)
    7016        kw = surf_usm_h%k(m)
    7017 
    7018        IF ( usm_par(5,jw,iw) == 0 )  THEN
    7019 
    7020           IF ( zu(kw) >= roof_height_limit )  THEN
    7021              surf_usm_h%isroof_surf(m)   = .TRUE.
    7022              surf_usm_h%surface_types(m) = roof_category !< Default category for root surface
    7023           ELSE
    7024              surf_usm_h%isroof_surf(m)   = .FALSE.
    7025              surf_usm_h%surface_types(m) = land_category !< Default category for land surface
    7026           ENDIF
    7027 
    7028           surf_usm_h%albedo(m,:)         = -1.0_wp
    7029           surf_usm_h%thickness_wall(m)   = -1.0_wp
    7030           surf_usm_h%thickness_green(m)  = -1.0_wp
    7031           surf_usm_h%thickness_window(m) = -1.0_wp
    7032        ELSE
    7033           IF ( usm_par(2,jw,iw)==0 )  THEN
    7034              surf_usm_h%isroof_surf(m)      = .FALSE.
    7035              surf_usm_h%thickness_wall(m)   = -1.0_wp
    7036              surf_usm_h%thickness_window(m) = -1.0_wp
    7037              surf_usm_h%thickness_green(m)  = -1.0_wp
    7038           ELSE
    7039              surf_usm_h%isroof_surf(m)      = .TRUE.
    7040              surf_usm_h%thickness_wall(m)   = usm_val(2,jw,iw)
    7041              surf_usm_h%thickness_window(m) = usm_val(2,jw,iw)
    7042              surf_usm_h%thickness_green(m)  = usm_val(2,jw,iw)
    7043           ENDIF
    7044           surf_usm_h%surface_types(m)     = usm_par(5,jw,iw)
    7045           surf_usm_h%albedo(m,:)          = usm_val(1,jw,iw)
    7046           surf_usm_h%transmissivity(m)    = 0.0_wp
    7047        ENDIF
    7048 !
    7049 !--    Find the type position
    7050        it = surf_usm_h%surface_types(m)
    7051        ip = -99999
    7052        DO  k = 1, n_surface_types
    7053           IF ( surface_type_codes(k) == it )  THEN
    7054              ip = k
    7055              EXIT
    7056           ENDIF
    7057        ENDDO
    7058        IF ( ip == -99999 )  THEN
    7059 !
    7060 !--       Land/roof category not found
    7061           WRITE(9, '(A, I5, A, 3I5)' ) 'land/roof category ', it, ' not found  for i, j, k = ',    &
    7062                                        iw, jw, kw
    7063           FLUSH( 9 )
    7064           IF ( surf_usm_h%isroof_surf(m) )  THEN
    7065              category = roof_category
    7066           ELSE
    7067              category = land_category
    7068           ENDIF
    7069           DO  k = 1, n_surface_types
    7070              IF ( surface_type_codes(k) == roof_category )  THEN
    7071                 ip = k
    7072                 EXIT
    7073              ENDIF
    7074           ENDDO
    7075           IF ( ip == -99999 )  THEN
    7076 !
    7077 !--          Default land/roof category not found
    7078              WRITE( 9, '(A, I5, A, 3I5)' ) 'Default land/roof category ', category, ' not found!'
    7079              FLUSH( 9 )
    7080              ip = 1
    7081           ENDIF
    7082        ENDIF
    7083 !
    7084 !--    Albedo
    7085        IF ( surf_usm_h%albedo(m,ind_veg_wall) < 0.0_wp )  THEN
    7086           surf_usm_h%albedo(m,:) = surface_params(ialbedo, ip)
    7087        ENDIF
    7088 !
    7089 !--    Albedo type is 0 (custom), others are replaced later
    7090        surf_usm_h%albedo_type(m,:) = 0
    7091 !
    7092 !--    Transmissivity
    7093        IF ( surf_usm_h%transmissivity(m) < 0.0_wp )  THEN
    7094           surf_usm_h%transmissivity(m) = 0.0_wp
    7095        ENDIF
    7096 !
    7097 !--    Emissivity of the wall
    7098        surf_usm_h%emissivity(m,:) = surface_params(iemiss, ip)
    7099 !
    7100 !--    Heat conductivity λS between air and wall ( W m−2 K−1 )
    7101        surf_usm_h%lambda_surf(m)        = surface_params(ilambdas,ip)
    7102        surf_usm_h%lambda_surf_window(m) = surface_params(ilambdas,ip)
    7103        surf_usm_h%lambda_surf_green(m)  = surface_params(ilambdas,ip)
    7104 !
    7105 !--    Roughness length for momentum, heat and humidity
    7106        surf_usm_h%z0(m)  = surface_params(irough,ip)
    7107        surf_usm_h%z0h(m) = surface_params(iroughh,ip)
    7108        surf_usm_h%z0q(m) = surface_params(iroughh,ip)
    7109 !
    7110 !--    Surface skin layer heat capacity (J m−2 K−1 )
    7111        surf_usm_h%c_surface(m)        = surface_params(icsurf,ip)
    7112        surf_usm_h%c_surface_window(m) = surface_params(icsurf,ip)
    7113        surf_usm_h%c_surface_green(m)  = surface_params(icsurf,ip)
    7114 !
    7115 !--    Wall material parameters:
    7116 !--    Thickness of the wall (m) missing values are replaced by default value for category
    7117        IF ( surf_usm_h%thickness_wall(m) <= 0.001_wp )  THEN
    7118             surf_usm_h%thickness_wall(m) = surface_params(ithick,ip)
    7119        ENDIF
    7120        IF ( surf_usm_h%thickness_window(m) <= 0.001_wp )  THEN
    7121             surf_usm_h%thickness_window(m) = surface_params(ithick,ip)
    7122        ENDIF
    7123        IF ( surf_usm_h%thickness_green(m) <= 0.001_wp )  THEN
    7124             surf_usm_h%thickness_green(m) = surface_params(ithick,ip)
    7125        ENDIF
    7126 !
    7127 !--    Volumetric heat capacity rho*C of the wall ( J m−3 K−1 )
    7128        surf_usm_h%rho_c_wall(:,m)   = surface_params(irhoC,ip)
    7129        surf_usm_h%rho_c_window(:,m) = surface_params(irhoC,ip)
    7130        surf_usm_h%rho_c_green(:,m)  = surface_params(irhoC,ip)
    7131 !
    7132 !--    Thermal conductivity λH of the wall (W m−1 K−1 )
    7133        surf_usm_h%lambda_h(:,m)        = surface_params(ilambdah,ip)
    7134        surf_usm_h%lambda_h_window(:,m) = surface_params(ilambdah,ip)
    7135        surf_usm_h%lambda_h_green(:,m)  = surface_params(ilambdah,ip)
    7136 
    7137     ENDDO
    7138 !
    7139 !-- For vertical surface elements ( 0 -- northward-facing, 1 -- southward-facing,
    7140 !--  2 -- eastward-facing, 3 -- westward-facing )
    7141     DO  l = 0, 3
    7142 !
    7143 !--    Set flag indicating that albedo is initialized via ASCII format.
    7144 !--    Else it would be overwritten in the radiation model.
    7145        surf_usm_v(l)%albedo_from_ascii = .TRUE.
    7146        DO  m = 1, surf_usm_v(l)%ns
    7147           i  = surf_usm_v(l)%i(m)
    7148           j  = surf_usm_v(l)%j(m)
    7149           kw = surf_usm_v(l)%k(m)
    7150 
    7151           IF ( l == 3 )  THEN ! Westward facing
    7152              iw = i
    7153              jw = j
    7154              ii = 6
    7155              ij = 3
    7156           ELSEIF ( l == 2 )  THEN
    7157              iw = i-1
    7158              jw = j
    7159              ii = 6
    7160              ij = 3
    7161           ELSEIF ( l == 1 )  THEN
    7162              iw = i
    7163              jw = j
    7164              ii = 12
    7165              ij = 9
    7166           ELSEIF ( l == 0 )  THEN
    7167              iw = i
    7168              jw = j-1
    7169              ii = 12
    7170              ij = 9
    7171           ENDIF
    7172 
    7173           IF ( iw < 0 .OR. jw < 0 ) THEN
    7174 !
    7175 !--          Wall on west or south border of the domain - assign default category
    7176              IF ( kw <= roof_height_limit ) THEN
    7177                  surf_usm_v(l)%surface_types(m) = wall_category   !< Default category for wall surface in wall zone
    7178              ELSE
    7179                  surf_usm_v(l)%surface_types(m) = roof_category   !< Default category for wall surface in roof zone
    7180              ENDIF
    7181              surf_usm_v(l)%albedo(m,:)         = -1.0_wp
    7182              surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
    7183              surf_usm_v(l)%thickness_window(m) = -1.0_wp
    7184              surf_usm_v(l)%thickness_green(m)  = -1.0_wp
    7185              surf_usm_v(l)%transmissivity(m)   = -1.0_wp
    7186           ELSE IF ( kw <= usm_par(ii,jw,iw) )  THEN
    7187 !
    7188 !--             Pedestrian zone
    7189              IF ( usm_par(ii+1,jw,iw) == 0 )  THEN
    7190                  surf_usm_v(l)%surface_types(m)  = pedestrian_category   !< Default category for wall surface in
    7191                                                                          !< Pedestrian zone
    7192                  surf_usm_v(l)%albedo(m,:)         = -1.0_wp
    7193                  surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
    7194                  surf_usm_v(l)%thickness_window(m) = -1.0_wp
    7195                  surf_usm_v(l)%thickness_green(m)  = -1.0_wp
    7196                  surf_usm_v(l)%transmissivity(m)   = -1.0_wp
    7197              ELSE
    7198                  surf_usm_v(l)%surface_types(m)    = usm_par(ii+1,jw,iw)
    7199                  surf_usm_v(l)%albedo(m,:)         = usm_val(ij,jw,iw)
    7200                  surf_usm_v(l)%thickness_wall(m)   = usm_val(ij+1,jw,iw)
    7201                  surf_usm_v(l)%thickness_window(m) = usm_val(ij+1,jw,iw)
    7202                  surf_usm_v(l)%thickness_green(m)  = usm_val(ij+1,jw,iw)
    7203                  surf_usm_v(l)%transmissivity(m)   = 0.0_wp
    7204              ENDIF
    7205           ELSE IF ( kw <= usm_par(ii+2,jw,iw) )  THEN
    7206 !
    7207 !--          Wall zone
    7208              IF ( usm_par(ii+3,jw,iw) == 0 )  THEN
    7209                  surf_usm_v(l)%surface_types(m)    = wall_category  !< default category for wall surface
    7210                  surf_usm_v(l)%albedo(m,:)         = -1.0_wp
    7211                  surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
    7212                  surf_usm_v(l)%thickness_window(m) = -1.0_wp
    7213                  surf_usm_v(l)%thickness_green(m)  = -1.0_wp
    7214                  surf_usm_v(l)%transmissivity(m)   = -1.0_wp
    7215              ELSE
    7216                  surf_usm_v(l)%surface_types(m)    = usm_par(ii+3,jw,iw)
    7217                  surf_usm_v(l)%albedo(m,:)         = usm_val(ij+2,jw,iw)
    7218                  surf_usm_v(l)%thickness_wall(m)   = usm_val(ij+3,jw,iw)
    7219                  surf_usm_v(l)%thickness_window(m) = usm_val(ij+3,jw,iw)
    7220                  surf_usm_v(l)%thickness_green(m)  = usm_val(ij+3,jw,iw)
    7221                  surf_usm_v(l)%transmissivity(m)   = 0.0_wp
    7222              ENDIF
    7223           ELSE IF ( kw <= usm_par(ii+4,jw,iw) )  THEN
    7224 !
    7225 !--          Roof zone
    7226              IF ( usm_par(ii+5,jw,iw) == 0 )  THEN
    7227                  surf_usm_v(l)%surface_types(m)    = roof_category  !< Default category for roof surface
    7228                  surf_usm_v(l)%albedo(m,:)         = -1.0_wp
    7229                  surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
    7230                  surf_usm_v(l)%thickness_window(m) = -1.0_wp
    7231                  surf_usm_v(l)%thickness_green(m)  = -1.0_wp
    7232                  surf_usm_v(l)%transmissivity(m)   = -1.0_wp
    7233              ELSE
    7234                  surf_usm_v(l)%surface_types(m)    = usm_par(ii+5,jw,iw)
    7235                  surf_usm_v(l)%albedo(m,:)         = usm_val(ij+4,jw,iw)
    7236                  surf_usm_v(l)%thickness_wall(m)   = usm_val(ij+5,jw,iw)
    7237                  surf_usm_v(l)%thickness_window(m) = usm_val(ij+5,jw,iw)
    7238                  surf_usm_v(l)%thickness_green(m)  = usm_val(ij+5,jw,iw)
    7239                  surf_usm_v(l)%transmissivity(m)   = 0.0_wp
    7240              ENDIF
    7241           ELSE
    7242              WRITE( 9, *) 'Problem reading USM data:'
    7243              WRITE( 9, *) l,i,j,kw,topo_top_ind(j,i,0)
    7244              WRITE( 9, *) ii,iw,jw,kw,topo_top_ind(jw,iw,0)
    7245              WRITE( 9, *) usm_par(ii,jw,iw),usm_par(ii+1,jw,iw)
    7246              WRITE( 9, *) usm_par(ii+2,jw,iw),usm_par(ii+3,jw,iw)
    7247              WRITE( 9, *) usm_par(ii+4,jw,iw),usm_par(ii+5,jw,iw)
    7248              WRITE( 9, *) kw,roof_height_limit,wall_category,roof_category
    7249              FLUSH( 9 )
    7250 !
    7251 !--          Supply the default category
    7252              IF ( kw <= roof_height_limit )  THEN
    7253                  surf_usm_v(l)%surface_types(m) = wall_category  !< Default category for wall surface in wall zone
    7254              ELSE
    7255                  surf_usm_v(l)%surface_types(m) = roof_category  !< Default category for wall surface in roof zone
    7256              ENDIF
    7257              surf_usm_v(l)%albedo(m,:)         = -1.0_wp
    7258              surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
    7259              surf_usm_v(l)%thickness_window(m) = -1.0_wp
    7260              surf_usm_v(l)%thickness_green(m)  = -1.0_wp
    7261              surf_usm_v(l)%transmissivity(m)   = -1.0_wp
    7262           ENDIF
    7263 !
    7264 !--       Find the type position
    7265           it = surf_usm_v(l)%surface_types(m)
    7266           ip = -99999
    7267           DO  k = 1, n_surface_types
    7268              IF ( surface_type_codes(k) == it )  THEN
    7269                 ip = k
    7270                 EXIT
    7271              ENDIF
    7272           ENDDO
    7273           IF ( ip == -99999 )  THEN
    7274 !
    7275 !--          Wall category not found
    7276              WRITE( 9, '(A,I7,A,3I5)' ) 'wall category ', it, ' not found  for i,j,k = ', iw, jw, kw
    7277              FLUSH(9)
    7278              category = wall_category
    7279              DO  k = 1, n_surface_types
    7280                 IF ( surface_type_codes(k) == category )  THEN
    7281                    ip = k
    7282                    EXIT
    7283                 ENDIF
    7284              ENDDO
    7285              IF ( ip == -99999 )  THEN
    7286 !
    7287 !--             Default wall category not found
    7288                 WRITE ( 9, '(A,I5,A,3I5)' ) 'Default wall category', category, ' not found!'
    7289                 FLUSH( 9 )
    7290                 ip = 1
    7291              ENDIF
    7292           ENDIF
    7293 
    7294 !
    7295 !--       Albedo
    7296           IF ( surf_usm_v(l)%albedo(m,ind_veg_wall) < 0.0_wp )  THEN
    7297              surf_usm_v(l)%albedo(m,:) = surface_params(ialbedo,ip)
    7298           ENDIF
    7299 !--       Albedo type is 0 (custom), others are replaced later
    7300           surf_usm_v(l)%albedo_type(m,:) = 0
    7301 !--       Transmissivity of the windows
    7302           IF ( surf_usm_v(l)%transmissivity(m) < 0.0_wp )  THEN
    7303              surf_usm_v(l)%transmissivity(m) = 0.0_wp
    7304           ENDIF
    7305 !
    7306 !--       Emissivity of the wall
    7307           surf_usm_v(l)%emissivity(:,m) = surface_params(iemiss,ip)
    7308 !
    7309 !--       Heat conductivity lambda S between air and wall ( W m-2 K-1 )
    7310           surf_usm_v(l)%lambda_surf(m)        = surface_params(ilambdas,ip)
    7311           surf_usm_v(l)%lambda_surf_window(m) = surface_params(ilambdas,ip)
    7312           surf_usm_v(l)%lambda_surf_green(m)  = surface_params(ilambdas,ip)
    7313 !
    7314 !--       Roughness length
    7315           surf_usm_v(l)%z0(m)  = surface_params(irough,ip)
    7316           surf_usm_v(l)%z0h(m) = surface_params(iroughh,ip)
    7317           surf_usm_v(l)%z0q(m) = surface_params(iroughh,ip)
    7318 !
    7319 !--       Surface skin layer heat capacity (J m-2 K-1 )
    7320           surf_usm_v(l)%c_surface(m)        = surface_params(icsurf,ip)
    7321           surf_usm_v(l)%c_surface_window(m) = surface_params(icsurf,ip)
    7322           surf_usm_v(l)%c_surface_green(m)  = surface_params(icsurf,ip)
    7323 !
    7324 !--       Wall material parameters:
    7325 !--       Thickness of the wall (m)
    7326 !--       Missing values are replaced by default value for category
    7327           IF ( surf_usm_v(l)%thickness_wall(m) <= 0.001_wp )  THEN
    7328                surf_usm_v(l)%thickness_wall(m) = surface_params(ithick,ip)
    7329           ENDIF
    7330           IF ( surf_usm_v(l)%thickness_window(m) <= 0.001_wp )  THEN
    7331                surf_usm_v(l)%thickness_window(m) = surface_params(ithick,ip)
    7332           ENDIF
    7333           IF ( surf_usm_v(l)%thickness_green(m) <= 0.001_wp )  THEN
    7334                surf_usm_v(l)%thickness_green(m) = surface_params(ithick,ip)
    7335           ENDIF
    7336 !
    7337 !--       Volumetric heat capacity rho*C of the wall ( J m-3 K-1 )
    7338           surf_usm_v(l)%rho_c_wall(:,m)   = surface_params(irhoC,ip)
    7339           surf_usm_v(l)%rho_c_window(:,m) = surface_params(irhoC,ip)
    7340           surf_usm_v(l)%rho_c_green(:,m)  = surface_params(irhoC,ip)
    7341 !
    7342 !--       Thermal conductivity lambda H of the wall (W m-1 K-1 )
    7343           surf_usm_v(l)%lambda_h(:,m)        = surface_params(ilambdah,ip)
    7344           surf_usm_v(l)%lambda_h_window(:,m) = surface_params(ilambdah,ip)
    7345           surf_usm_v(l)%lambda_h_green(:,m)  = surface_params(ilambdah,ip)
    7346 
    7347        ENDDO
    7348     ENDDO
    7349 
    7350 !
    7351 !-- Initialize wall layer thicknesses. Please note, this will be removed after migration to Palm
    7352 !-- input data standard.
    7353     DO  k = nzb_wall, nzt_wall
    7354        zwn(k)        = zwn_default(k)
    7355        zwn_green(k)  = zwn_default_green(k)
    7356        zwn_window(k) = zwn_default_window(k)
    7357     ENDDO
    7358 !
    7359 !-- Apply for all particular surface grids. First for horizontal surfaces
    7360     DO  m = 1, surf_usm_h%ns
    7361        surf_usm_h%zw(:,m)        = zwn(:) * surf_usm_h%thickness_wall(m)
    7362        surf_usm_h%zw_green(:,m)  = zwn_green(:) * surf_usm_h%thickness_green(m)
    7363        surf_usm_h%zw_window(:,m) = zwn_window(:) * surf_usm_h%thickness_window(m)
    7364     ENDDO
    7365     DO  l = 0, 3
    7366        DO  m = 1, surf_usm_v(l)%ns
    7367           surf_usm_v(l)%zw(:,m)        = zwn(:) * surf_usm_v(l)%thickness_wall(m)
    7368           surf_usm_v(l)%zw_green(:,m)  = zwn_green(:) * surf_usm_v(l)%thickness_green(m)
    7369           surf_usm_v(l)%zw_window(:,m) = zwn_window(:) * surf_usm_v(l)%thickness_window(m)
    7370        ENDDO
    7371     ENDDO
    7372 
    7373     IF ( debug_output )  CALL debug_message( 'usm_read_urban_surface_types', 'end' )
    7374 
    7375  END SUBROUTINE usm_read_urban_surface_types
    7376 
    7377 
    7378 !--------------------------------------------------------------------------------------------------!
    7379 ! Description:
    7380 ! ------------
    7381 !
    7382 !> This function advances through the list of local surfaces to find given x, y, d, z coordinates
    7383 !--------------------------------------------------------------------------------------------------!
    7384     PURE FUNCTION find_surface( x, y, z, d ) result(isurfl)
    7385 
    7386         INTEGER(iwp)              ::  isurfl         !<
    7387         INTEGER(iwp)              ::  isx, isy, isz  !<
    7388         INTEGER(iwp), INTENT(in)  ::  d, x, y, z     !<
    7389 
    7390         IF ( d == 0 )  THEN
    7391            DO  isurfl = 1, surf_usm_h%ns
    7392               isx = surf_usm_h%i(isurfl)
    7393               isy = surf_usm_h%j(isurfl)
    7394               isz = surf_usm_h%k(isurfl)
    7395               IF ( isx==x .AND. isy==y .AND. isz==z )  RETURN
    7396            ENDDO
    7397         ELSE
    7398            DO  isurfl = 1, surf_usm_v(d-1)%ns
    7399               isx = surf_usm_v(d-1)%i(isurfl)
    7400               isy = surf_usm_v(d-1)%j(isurfl)
    7401               isz = surf_usm_v(d-1)%k(isurfl)
    7402               IF ( isx==x .AND. isy==y .AND. isz==z )  RETURN
    7403            ENDDO
    7404         ENDIF
    7405 !
    7406 !--     coordinate not found
    7407         isurfl = -1
    7408 
    7409     END FUNCTION
    7410 
    7411 
    7412 !--------------------------------------------------------------------------------------------------!
    7413 ! Description:
    7414 ! ------------
    7415 !
    7416 !> This subroutine reads temperatures of respective material layers in walls, roofs and ground from
    7417 !> input files. Data in the input file must be in standard order, i.e. horizontal surfaces first
    7418 !> ordered by x, y and then vertical surfaces ordered by x, y, direction, z
    7419 !--------------------------------------------------------------------------------------------------!
    7420  SUBROUTINE usm_read_wall_temperature
    7421 
    7422     INTEGER(iwp)                              ::  d, i, ii, iline, j, k  !< running indices
    7423     INTEGER(iwp)                              ::  isurfl                 !<
    7424 
    7425     REAL(wp)                                  ::  rtsurf  !<
    7426     REAL(wp), DIMENSION(nzb_wall:nzt_wall+1)  ::  rtwall  !<
    7427 
    7428 
    7429     IF ( debug_output )  CALL debug_message( 'usm_read_wall_temperature', 'start' )
    7430 
    7431     DO  ii = 0, io_blocks-1
    7432         IF ( ii == io_group )  THEN
    7433 !
    7434 !--         Open wall temperature file
    7435             OPEN( 152, file = 'WALL_TEMPERATURE' // coupling_char, action = 'read', &
    7436                        status = 'old', form = 'formatted', err = 15 )
    7437 
    7438             isurfl = 0
    7439             iline = 1
    7440             DO
    7441                 rtwall = -9999.0_wp  !< For incomplete lines
    7442                 READ( 152, *, err = 13, end = 14 )  i, j, k, d, rtsurf, rtwall
    7443 
    7444                 IF ( nxl <= i .AND. i <= nxr .AND. nys <= j .AND. j <= nyn)  THEN  !< Local processor
    7445 !--                 identify surface id
    7446                     isurfl = find_surface( i, j, k, d )
    7447                     IF ( isurfl == -1 )  THEN
    7448                         WRITE( message_string, '(a,4i5,a,i5,a)' ) 'Coordinates (xyzd) ', i, j, k,  &
    7449                         d, ' on line ', iline, ' in file WALL_TEMPERATURE are either not ' //      &
    7450                         'present or out of standard order of surfaces.'
    7451                         CALL message( 'usm_read_wall_temperature', 'PA0521', 1, 2, 0, 6, 0 )
    7452                     ENDIF
    7453 !
    7454 !--                 Assign temperatures
    7455                     IF ( d == 0 )  THEN
    7456                        t_surf_wall_h(isurfl) = rtsurf
    7457                        t_wall_h(:,isurfl)    = rtwall(:)
    7458                        t_window_h(:,isurfl)  = rtwall(:)
    7459                        t_green_h(:,isurfl)   = rtwall(:)
    7460                     ELSE
    7461                        t_surf_wall_v(d-1)%t(isurfl) = rtsurf
    7462                        t_wall_v(d-1)%t(:,isurfl)    = rtwall(:)
    7463                        t_window_v(d-1)%t(:,isurfl)  = rtwall(:)
    7464                        t_green_v(d-1)%t(:,isurfl)   = rtwall(:)
    7465                     ENDIF
    7466                 ENDIF
    7467 
    7468                 iline = iline + 1
    7469                 CYCLE
    7470  13             WRITE( message_string, '(a,i5,a)' ) 'Error reading line ', iline,                  &
    7471                                                     ' in file WALL_TEMPERATURE.'
    7472                 CALL message( 'usm_read_wall_temperature', 'PA0522', 1, 2, 0, 6, 0 )
    7473             ENDDO
    7474  14         CLOSE( 152 )
    7475             CYCLE
    7476  15         message_string = 'file WALL_TEMPERATURE' // TRIM( coupling_char ) // ' does not exist'
    7477             CALL message( 'usm_read_wall_temperature', 'PA0523', 1, 2, 0, 6, 0 )
    7478         ENDIF
    7479 #if defined( __parallel )
    7480         CALL MPI_BARRIER( comm2d, ierr )
    7481 #endif
    7482     ENDDO
    7483 
    7484     IF ( debug_output )  CALL debug_message( 'usm_read_wall_temperature', 'end' )
    7485 
    7486  END SUBROUTINE usm_read_wall_temperature
    7487 
    7488 
    74896594
    74906595!--------------------------------------------------------------------------------------------------!
     
    74966601!> No calculation of window surface temperatures during spinup to increase maximum possible timstep
    74976602!--------------------------------------------------------------------------------------------------!
    7498  SUBROUTINE usm_surface_energy_balance( during_spinup )
     6603 SUBROUTINE usm_energy_balance( during_spinup )
     6604
     6605    LOGICAL       ::  during_spinup  !< flag indicating soil/wall spinup phase
     6606    INTEGER(iwp)  ::  l              !< loop index for surface types
     6607!
     6608!-- Call for horizontal surfaces
     6609    DO l = 0, 1
     6610       CALL usm_surface_energy_balance( .TRUE., l, during_spinup )
     6611       CALL usm_green_heat_model( .TRUE., l )
     6612       CALL usm_wall_heat_model( .TRUE., l, during_spinup )
     6613    ENDDO
     6614!
     6615!--   Call for vertical surfaces
     6616    DO l = 0, 3
     6617       CALL usm_surface_energy_balance( .FALSE., l, during_spinup )
     6618       CALL usm_green_heat_model( .FALSE., l )
     6619       CALL usm_wall_heat_model( .FALSE., l, during_spinup )
     6620    ENDDO
     6621
     6622 END SUBROUTINE usm_energy_balance
     6623
     6624!--------------------------------------------------------------------------------------------------!
     6625! Description:
     6626! ------------
     6627!> Solver for the energy balance at the ground/roof/wall surface. It follows the basic ideas and
     6628!> structure of lsm_energy_balance with many simplifications and adjustments.
     6629!> TODO better description
     6630!> No calculation of window surface temperatures during spinup to increase maximum possible timstep
     6631!--------------------------------------------------------------------------------------------------!
     6632 SUBROUTINE usm_surface_energy_balance( horizontal, l, during_spinup )
    74996633
    75006634    USE exchange_horiz_mod,                                                                        &
     
    75046638    IMPLICIT NONE
    75056639
    7506     INTEGER(iwp)  ::  dhour          !< simulated hour of day (in UTC)
    7507     INTEGER(iwp)  ::  i, j, k, l, m  !< running indices
    7508     INTEGER(iwp)  ::  i_off  !< offset to determine index of surface element, seen from atmospheric grid point, for x
    7509     INTEGER(iwp)  ::  j_off  !< offset to determine index of surface element, seen from atmospheric grid point, for y
    7510     INTEGER(iwp)  ::  k_off  !< offset to determine index of surface element, seen from atmospheric grid point, for z
    7511 
    7512     LOGICAL  ::  during_spinup      !< flag indicating soil/wall spinup phase
    7513 
    7514     REAL(wp)  ::  acoef              !< actual coefficient of diurnal profile of anthropogenic heat
     6640    LOGICAL       ::  horizontal     !< Flag indicating horizontal or vertical surfaces
     6641    INTEGER(iwp)  ::  l              !< direction index
     6642    LOGICAL       ::  during_spinup  !< flag indicating soil/wall spinup phase
     6643
     6644    INTEGER(iwp)  ::  i, j, k, m     !< running indices
     6645    INTEGER(iwp)  ::  i_off          !< offset to determine index of surface element, seen from atmospheric grid point, for x
     6646    INTEGER(iwp)  ::  j_off          !< offset to determine index of surface element, seen from atmospheric grid point, for y
     6647    INTEGER(iwp)  ::  k_off          !< offset to determine index of surface element, seen from atmospheric grid point, for z
     6648
     6649
    75156650    REAL(wp)  ::  coef_1             !< first coeficient for prognostic equation
    75166651    REAL(wp)  ::  coef_window_1      !< first coeficient for prognostic window equation
     
    75196654    REAL(wp)  ::  coef_window_2      !< second  coeficient for prognostic window equation
    75206655    REAL(wp)  ::  coef_green_2       !< second  coeficient for prognostic green wall equation
    7521     REAL(wp)  ::  dtime              !< simulated time of day (in UTC)
    75226656    REAL(wp)  ::  frac_win           !< window fraction, used to restore original values during spinup
    75236657    REAL(wp)  ::  frac_green         !< green fraction, used to restore original values during spinup
     
    75576691                  ueff                        !< limited near-surface wind speed - used for calculation of resistance
    75586692
     6693    TYPE(surf_type),        POINTER ::  surf              !< surface-date type variable
     6694    TYPE(surf_type_1d_usm), POINTER ::  t_surf_green      !<
     6695    TYPE(surf_type_1d_usm), POINTER ::  t_surf_green_p    !<
     6696    TYPE(surf_type_1d_usm), POINTER ::  t_surf_wall       !<
     6697    TYPE(surf_type_1d_usm), POINTER ::  t_surf_wall_p     !<
     6698    TYPE(surf_type_1d_usm), POINTER ::  t_surf_window     !<
     6699    TYPE(surf_type_1d_usm), POINTER ::  t_surf_window_p   !<
     6700    TYPE(surf_type_2d_usm), POINTER ::  t_green           !<
     6701    TYPE(surf_type_2d_usm), POINTER ::  t_wall            !<
     6702    TYPE(surf_type_2d_usm), POINTER ::  t_window          !<
     6703
     6704    LOGICAL   ::  upward                      !< Flag indicating upward horizontal surfaces
    75596705
    75606706    IF ( debug_output_timestep )  THEN
    7561        WRITE( debug_string, * ) 'usm_surface_energy_balance | during_spinup: ', during_spinup
     6707       WRITE( debug_string, * ) 'usm_surface_energy_balance:', horizontal, l, during_spinup
    75626708       CALL debug_message( debug_string, 'start' )
    75636709    ENDIF
     6710
     6711    upward = .FALSE.
     6712    IF ( horizontal )  THEN
     6713       surf              => surf_usm_h(l)
     6714       t_surf_wall       => t_surf_wall_h(l)
     6715       t_surf_wall_p     => t_surf_wall_h_p(l)
     6716       t_surf_window     => t_surf_window_h(l)
     6717       t_surf_window_p   => t_surf_window_h_p(l)
     6718       t_surf_green      => t_surf_green_h(l)
     6719       t_surf_green_p    => t_surf_green_h_p(l)
     6720       t_wall            => t_wall_h(l)
     6721       t_window          => t_window_h(l)
     6722       t_green           => t_green_h(l)
     6723       IF ( l == 0 ) upward = .TRUE.
     6724    ELSE
     6725       surf              => surf_usm_v(l)
     6726       t_surf_wall       => t_surf_wall_v(l)
     6727       t_surf_wall_p     => t_surf_wall_v_p(l)
     6728       t_surf_window     => t_surf_window_v(l)
     6729       t_surf_window_p   => t_surf_window_v_p(l)
     6730       t_surf_green      => t_surf_green_v(l)
     6731       t_surf_green_p    => t_surf_green_v_p(l)
     6732       t_wall            => t_wall_v(l)
     6733       t_window          => t_window_v(l)
     6734       t_green           => t_green_v(l)
     6735    ENDIF
    75646736!
    75656737!-- Index offset of surface element point with respect to adjoining atmospheric grid point
    7566     k_off = surf_usm_h%koff
    7567     j_off = surf_usm_h%joff
    7568     i_off = surf_usm_h%ioff
     6738    k_off = surf%koff
     6739    j_off = surf%joff
     6740    i_off = surf%ioff
    75696741
    75706742!
     
    75776749    !$OMP&                  stend_window, stend_green, tend, m_liq_max)
    75786750    !$OMP DO SCHEDULE (STATIC)
    7579     DO  m = 1, surf_usm_h%ns
     6751    DO  m = 1, surf%ns
    75806752!
    75816753!--    During spinup set green and window fraction to zero and restore at the end of the loop.
    75826754!--    Note, this is a temporary fix and needs to be removed later.
    75836755       IF ( during_spinup )  THEN
    7584           frac_win                         = surf_usm_h%frac(m,ind_wat_win)
    7585           frac_wall                        = surf_usm_h%frac(m,ind_veg_wall)
    7586           frac_green                       = surf_usm_h%frac(m,ind_pav_green)
    7587           surf_usm_h%frac(m,ind_wat_win)   = 0.0_wp
    7588           surf_usm_h%frac(m,ind_veg_wall)  = 1.0_wp
    7589           surf_usm_h%frac(m,ind_pav_green) = 0.0_wp
     6756          frac_win                         = surf%frac(m,ind_wat_win)
     6757          frac_wall                        = surf%frac(m,ind_veg_wall)
     6758          frac_green                       = surf%frac(m,ind_pav_green)
     6759          surf%frac(m,ind_wat_win)   = 0.0_wp
     6760          surf%frac(m,ind_veg_wall)  = 1.0_wp
     6761          surf%frac(m,ind_pav_green) = 0.0_wp
    75906762       ENDIF
    75916763!
    75926764!--    Get indices of respective grid point
    7593        i = surf_usm_h%i(m)
    7594        j = surf_usm_h%j(m)
    7595        k = surf_usm_h%k(m)
     6765       i = surf%i(m)
     6766       j = surf%j(m)
     6767       k = surf%k(m)
    75966768!
    75976769!--    TODO - how to calculate lambda_surface for horizontal surfaces
    7598 !--    (lambda_surface is set according to stratification in land surface model)
    7599 !--    MS: ???
    7600        IF ( surf_usm_h%ol(m) >= 0.0_wp )  THEN
    7601           lambda_surface        = surf_usm_h%lambda_surf(m)
    7602           lambda_surface_window = surf_usm_h%lambda_surf_window(m)
    7603           lambda_surface_green  = surf_usm_h%lambda_surf_green(m)
    7604        ELSE
    7605           lambda_surface        = surf_usm_h%lambda_surf(m)
    7606           lambda_surface_window = surf_usm_h%lambda_surf_window(m)
    7607           lambda_surface_green  = surf_usm_h%lambda_surf_green(m)
    7608        ENDIF
    7609 
    7610 !        pt1  = pt(k,j,i)
     6770!--    (lambda_surface shoud be set according to stratification in land surface model)
     6771       lambda_surface        = surf%lambda_surf(m)
     6772       lambda_surface_window = surf%lambda_surf_window(m)
     6773       lambda_surface_green  = surf%lambda_surf_green(m)
     6774
    76116775       IF ( humidity )  THEN
    76126776          qv1 = q(k,j,i)
     
    76166780!
    76176781!--    Calculate rho * c_p coefficient at surface layer
    7618        rho_cp  = c_p * hyp(k) / ( r_d * surf_usm_h%pt1(m) * exner(k) )
    7619 
    7620        IF ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp )  THEN
     6782       rho_cp  = c_p * hyp(k) / ( r_d * surf%pt1(m) * exner(k) )
     6783
     6784       IF ( surf%frac(m,ind_pav_green) > 0.0_wp )  THEN
    76216785!
    76226786!--       Calculate frequently used parameters
     
    76276791!
    76286792!--    Calculate aerodyamic resistance.
    7629 !--    Calculation for horizontal surfaces follows LSM formulation pt, us, ts are not available for
    7630 !--    the prognostic time step, data from the last time step is used here.
    7631 !
    7632 !--    Workaround: use single r_a as stability is only treated for the average temperature
    7633        surf_usm_h%r_a(m)        = ( surf_usm_h%pt1(m) - surf_usm_h%pt_surface(m) ) /               &
    7634                                   ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )
    7635        surf_usm_h%r_a_window(m) = surf_usm_h%r_a(m)
    7636        surf_usm_h%r_a_green(m)  = surf_usm_h%r_a(m)
    7637 
    7638 !        r_a        = ( surf_usm_h%pt1(m) - t_surf_h(m) / exner(k) ) /                              &
    7639 !                     ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )
    7640 !        r_a_window = ( surf_usm_h%pt1(m) - t_surf_window_h(m) / exner(k) ) /                       &
    7641 !                     ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )
    7642 !        r_a_green  = ( surf_usm_h%pt1(m) - t_surf_green_h(m) / exner(k) ) /                        &
    7643 !                     ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )
     6793       IF ( upward ) THEN
     6794!--       Calculation for horizontal upward facing surfaces follows LSM formulation
     6795!--       pt, us, ts are not available for the prognostic time step, data from the
     6796!--       last time step is used here.
     6797!--       Workaround: use single r_a as stability is only treated for the average temperature
     6798          surf%r_a(m)        = ( surf%pt1(m) - surf%pt_surface(m) ) /               &
     6799                                     ( surf%ts(m) * surf%us(m) + 1.0E-20_wp )
     6800       ELSE
     6801!--           Calculation of r_a for vertical and downward facing horizontal surfaces
     6802!--
     6803!--           Heat transfer coefficient for forced convection along vertical walls follows formulation
     6804!--           in TUF3d model (Krayenhoff & Voogt, 2006)
     6805!--
     6806!--           H = httc (Tsfc - Tair)
     6807!--           httc = rw * (11.8 + 4.2 * Ueff) - 4.0
     6808!--
     6809!--                rw: Wall patch roughness relative to 1.0 for concrete
     6810!--                Ueff: Effective wind speed
     6811!--                - 4.0 is a reduction of Rowley et al (1930) formulation based on
     6812!--                Cole and Sturrock (1977)
     6813!--
     6814!--                Ucan: Canyon wind speed
     6815!--                wstar: Convective velocity
     6816!--                Qs: Surface heat flux
     6817!--                zH: Height of the convective layer
     6818!--                wstar = (g/Tcan*Qs*zH)**(1./3.)
     6819!--           Effective velocity components must always be defined at scalar grid point. The wall
     6820!--           normal component is obtained by simple linear interpolation. (An alternative would be an
     6821!--           logarithmic interpolation.) Parameter roughness_concrete (default value = 0.001) is used
     6822!--           to calculation of roughness relative to concrete. Note, wind velocity is limited
     6823!--           to avoid division by zero. The nominator can become <= 0.0 for values z0 < 3*10E-4.
     6824              ueff        = MAX ( SQRT( ( ( u(k,j,i) + u(k,j,i+1) ) * 0.5_wp )**2 +                  &
     6825                                        ( ( v(k,j,i) + v(k,j+1,i) ) * 0.5_wp )**2 +                  &
     6826                                        ( ( w(k,j,i) + w(k-1,j,i) ) * 0.5_wp )**2 ),                 &
     6827                                  ( ( 4.0_wp + 0.1_wp )                                              &
     6828                                    / ( surf%z0(m) * d_roughness_concrete )                 &
     6829                                   - 11.8_wp ) / 4.2_wp                                              &
     6830                                 )
     6831
     6832              surf%r_a(m) = rho_cp / ( surf%z0(m) * d_roughness_concrete            &
     6833                                     * ( 11.8_wp + 4.2_wp * ueff )  - 4.0_wp  )
     6834       ENDIF
    76446835
    76456836!--    Make sure that the resistance does not drop to zero
    7646        IF ( surf_usm_h%r_a(m)        < 1.0_wp )  surf_usm_h%r_a(m)        = 1.0_wp
    7647        IF ( surf_usm_h%r_a_green(m)  < 1.0_wp )  surf_usm_h%r_a_green(m)  = 1.0_wp
    7648        IF ( surf_usm_h%r_a_window(m) < 1.0_wp )  surf_usm_h%r_a_window(m) = 1.0_wp
    7649 
    7650 !
    7651 !--    Make sure that the resistacne does not exceed a maxmium value in case of zero velocities
    7652        IF ( surf_usm_h%r_a(m)        > 300.0_wp )  surf_usm_h%r_a(m)        = 300.0_wp
    7653        IF ( surf_usm_h%r_a_green(m)  > 300.0_wp )  surf_usm_h%r_a_green(m)  = 300.0_wp
    7654        IF ( surf_usm_h%r_a_window(m) > 300.0_wp )  surf_usm_h%r_a_window(m) = 300.0_wp
    7655 
     6837!--    end does not exceed a maxmium value in case of zero velocities
     6838       IF ( surf%r_a(m)        < 1.0_wp )  surf%r_a(m)        = 1.0_wp
     6839       IF ( surf%r_a(m)        > 300.0_wp )  surf%r_a(m)        = 300.0_wp
     6840!
     6841!--    Aeorodynamical resistance for the window and green fractions are set to the same value
     6842       surf%r_a_window(m) = surf%r_a(m)
     6843       surf%r_a_green(m)  = surf%r_a(m)
    76566844!
    76576845!--    Factor for shf_eb
    7658        f_shf         = rho_cp / surf_usm_h%r_a(m)
    7659        f_shf_window  = rho_cp / surf_usm_h%r_a_window(m)
    7660        f_shf_green   = rho_cp / surf_usm_h%r_a_green(m)
    7661 
    7662 
    7663        IF ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp )  THEN
     6846       f_shf         = rho_cp / surf%r_a(m)
     6847       f_shf_window  = rho_cp / surf%r_a_window(m)
     6848       f_shf_green   = rho_cp / surf%r_a_green(m)
     6849
     6850       IF ( surf%frac(m,ind_pav_green) > 0.0_wp )  THEN
     6851!
    76646852!--       Adapted from LSM:
    7665 !--       Second step: calculate canopy resistance r_canopy f1-f3 here are defined as 1/f1-f3 as in
    7666 !--       ECMWF documentation
     6853!--       Second step: calculate canopy resistance r_canopy. f1-f3 here are defined as 1/f1-f3
     6854!--       as in ECMWF documentation
    76676855
    76686856!--       f1: Correction for incoming shortwave radiation (stomata close at night)
    7669           f1 = MIN( 1.0_wp, ( 0.004_wp * surf_usm_h%rad_sw_in(m) + 0.05_wp ) /                     &
    7670                     (0.81_wp * ( 0.004_wp * surf_usm_h%rad_sw_in(m) + 1.0_wp ) ) )
     6857          f1 = MIN( 1.0_wp, ( 0.004_wp * surf%rad_sw_in(m) + 0.05_wp ) /                     &
     6858                    (0.81_wp * ( 0.004_wp * surf%rad_sw_in(m) + 1.0_wp ) ) )
    76716859!
    76726860!--       f2: Correction for soil moisture availability to plants (the integrated soil moisture must
    76736861!--       thus be considered here) f2 = 0 for very dry soils
    7674           m_total = 0.0_wp
    7675           DO  k = nzb_wall, nzt_wall+1
    7676               m_total = m_total + rootfr_h(nzb_wall,m) * MAX( swc_h(nzb_wall,m),wilt_h(nzb_wall,m) )
    7677           ENDDO
    7678 
    7679           IF ( m_total > wilt_h(nzb_wall,m)  .AND.  m_total < fc_h(nzb_wall,m) )  THEN
    7680              f2 = ( m_total - wilt_h(nzb_wall,m) ) / (fc_h(nzb_wall,m) - wilt_h(nzb_wall,m) )
    7681           ELSEIF ( m_total >= fc_h(nzb_wall,m) )  THEN
    7682              f2 = 1.0_wp
     6862          IF ( upward ) THEN
     6863             m_total = 0.0_wp
     6864             DO  k = nzb_wall, nzt_wall+1
     6865                 m_total = m_total + rootfr_h(l)%val(nzb_wall,m) &
     6866                                     * MAX( swc_h(l)%val(nzb_wall,m),wilt_h(l)%val(nzb_wall,m) )
     6867             ENDDO
     6868
     6869             IF ( m_total > wilt_h(l)%val(nzb_wall,m)  .AND.  m_total < fc_h(l)%val(nzb_wall,m) )  THEN
     6870                f2 = ( m_total - wilt_h(l)%val(nzb_wall,m) ) / (fc_h(l)%val(nzb_wall,m) - wilt_h(l)%val(nzb_wall,m) )
     6871             ELSEIF ( m_total >= fc_h(l)%val(nzb_wall,m) )  THEN
     6872                f2 = 1.0_wp
     6873             ELSE
     6874                f2 = 1.0E-20_wp
     6875             ENDIF
    76836876          ELSE
    7684              f2 = 1.0E-20_wp
    7685           ENDIF
    7686 
     6877             f2=1.0_wp
     6878          ENDIF
    76876879!
    76886880!--       Calculate water vapour pressure at saturation
    7689           e_s = 0.01_wp * 610.78_wp * EXP( 17.269_wp * ( t_surf_green_h(m) - 273.16_wp )           &
    7690                                            / ( t_surf_green_h(m) - 35.86_wp ) )
     6881          e_s = 0.01_wp * magnus_tl( t_surf_green%val(m) )
    76916882!
    76926883!--       f3: Correction for vapour pressure deficit
    7693           IF ( surf_usm_h%g_d(m) /= 0.0_wp )  THEN
    7694 !
    7695 !--       Calculate vapour pressure
     6884          IF ( surf%g_d(m) /= 0.0_wp )  THEN
     6885!--          Calculate vapour pressure
    76966886             e  = qv1 * surface_pressure / ( qv1 + 0.622_wp )
    7697              f3 = EXP ( - surf_usm_h%g_d(m) * (e_s - e) )
     6887             f3 = EXP ( - surf%g_d(m) * (e_s - e) )
    76986888          ELSE
    76996889             f3 = 1.0_wp
    77006890          ENDIF
    7701 
    77026891!
    77036892!--       Calculate canopy resistance. In case that c_veg is 0 (bare soils), this calculation is
    77046893!--       obsolete, as r_canopy is not used below.
    77056894!--       To do: check for very dry soil -> r_canopy goes to infinity
    7706           surf_usm_h%r_canopy(m) = surf_usm_h%r_canopy_min(m) /                                    &
    7707                                   ( surf_usm_h%lai(m) * f1 * f2 * f3 + 1.0E-20_wp )
    7708 
    7709 !
    7710 !--       Calculate the maximum possible liquid water amount on plants and bare surface. For
    7711 !--       vegetated surfaces, a maximum depth of 0.2 mm is assumed, while paved surfaces might hold
    7712 !--       up 1 mm of water. The liquid water fraction for paved surfaces is calculated after
    7713 !--       Noilhan & Planton (1989), while the ECMWF formulation is used for vegetated surfaces and
    7714 !--       bare soils.
    7715           m_liq_max = m_max_depth * ( surf_usm_h%lai(m) )
    7716 
    7717           surf_usm_h%c_liq(m) = MIN( 1.0_wp, ( m_liq_usm_h%var_usm_1d(m) / m_liq_max )**0.67 )
     6895          surf%r_canopy(m) = surf%r_canopy_min(m) /                                    &
     6896                                  ( surf%lai(m) * f1 * f2 * f3 + 1.0E-20_wp )
    77186897!
    77196898!--       Calculate saturation specific humidity
     
    77236902!--       All super-saturated water is then removed from the air
    77246903          IF ( humidity  .AND.  q_s <= qv1 )  THEN
    7725              surf_usm_h%r_canopy(m) = 0.0_wp
    7726           ENDIF
    7727 
    7728 !
    7729 !--       Calculate coefficients for the total evapotranspiration
    7730 !--       In case of water surface, set vegetation and soil fluxes to zero.
    7731 !--       For pavements, only evaporation of liquid water is possible.
    7732           f_qsws_veg  = rho_lv * ( 1.0_wp - surf_usm_h%c_liq(m) ) /                                &
    7733                         ( surf_usm_h%r_a_green(m) + surf_usm_h%r_canopy(m) )
    7734           f_qsws_liq  = rho_lv * surf_usm_h%c_liq(m) / surf_usm_h%r_a_green(m)
    7735 
    7736           f_qsws = f_qsws_veg + f_qsws_liq
     6904             surf%r_canopy(m) = 0.0_wp
     6905          ENDIF
     6906
     6907          IF ( upward ) THEN
     6908!--          Calculate the maximum possible liquid water amount on plants and bare surface. For
     6909!--          vegetated surfaces, a maximum depth of 0.2 mm is assumed, while paved surfaces might hold
     6910!--          up 1 mm of water. The liquid water fraction for paved surfaces is calculated after
     6911!--          Noilhan & Planton (1989), while the ECMWF formulation is used for vegetated surfaces and
     6912!--          bare soils.
     6913             m_liq_max = m_max_depth * ( surf%lai(m) )
     6914             surf%c_liq(m) = MIN( 1.0_wp, ( m_liq_usm_h(l)%val(m) / m_liq_max )**0.67 )
     6915
     6916!
     6917!--          Calculate coefficients for the total evapotranspiration
     6918!--          In case of water surface, set vegetation and soil fluxes to zero.
     6919!--          For pavements, only evaporation of liquid water is possible.
     6920             f_qsws_veg  = rho_lv * ( 1.0_wp - surf%c_liq(m) ) /                                  &
     6921                           ( surf%r_a_green(m) + surf%r_canopy(m) )
     6922             f_qsws_liq  = rho_lv * surf%c_liq(m) / surf%r_a_green(m)
     6923             f_qsws = f_qsws_veg + f_qsws_liq
     6924          ELSE
     6925             f_qsws_veg  = rho_lv * ( 1.0_wp - 0.0_wp ) / & !surf%c_liq(m) ) /                    &
     6926                                ( surf%r_a_green(m) + surf%r_canopy(m) )
     6927             f_qsws_liq  = 0._wp ! rho_lv * surf%c_liq(m) / surf%r_a_green(m)
     6928             f_qsws = f_qsws_veg + f_qsws_liq
     6929          ENDIF
    77376930!
    77386931!--       Calculate derivative of q_s for Taylor series expansion
    7739           e_s_dt = e_s * ( 17.269_wp / ( t_surf_green_h(m) - 35.86_wp ) - 17.269_wp                &
    7740                    * ( t_surf_green_h(m) - 273.16_wp ) / ( t_surf_green_h(m) - 35.86_wp )**2 )
    7741 
     6932          e_s_dt = e_s * ( 17.269_wp / ( t_surf_green%val(m) - 35.86_wp ) - 17.269_wp             &
     6933                   * ( t_surf_green%val(m) - degc_to_k )                                          &
     6934                   / ( t_surf_green%val(m) - 35.86_wp )**2 )
    77426935          dq_s_dt = 0.622_wp * e_s_dt / ( surface_pressure - e_s_dt )
    77436936       ENDIF
    77446937!
    77456938!--    Add LW up so that it can be removed in prognostic equation
    7746        surf_usm_h%rad_net_l(m) = surf_usm_h%rad_sw_in(m)  - surf_usm_h%rad_sw_out(m) +             &
    7747                                  surf_usm_h%rad_lw_in(m)  - surf_usm_h%rad_lw_out(m)
     6939       surf%rad_net_l(m) = surf%rad_sw_in(m)  - surf%rad_sw_out(m) +                              &
     6940                           surf%rad_lw_in(m)  - surf%rad_lw_out(m)
    77486941!
    77496942!--    Numerator of the prognostic equation
    77506943!--    Todo: Adjust to tile approach. So far, emissivity for wall (element 0) is used
    7751        coef_1 = surf_usm_h%rad_net_l(m) + ( 3.0_wp + 1.0_wp )                                      &
    7752                * surf_usm_h%emissivity(m,ind_veg_wall) * sigma_sb * t_surf_wall_h(m)**4            &
    7753                + f_shf * surf_usm_h%pt1(m) + lambda_surface * t_wall_h(nzb_wall,m)
    7754 
    7755        IF ( ( .NOT. during_spinup ) .AND. (surf_usm_h%frac(m,ind_wat_win) > 0.0_wp ) )  THEN
    7756           coef_window_1 = surf_usm_h%rad_net_l(m) +  ( 3.0_wp + 1.0_wp )                           &
    7757                           * surf_usm_h%emissivity(m,ind_wat_win) * sigma_sb                        &
    7758                           * t_surf_window_h(m)**4 + f_shf_window * surf_usm_h%pt1(m)               &
    7759                           + lambda_surface_window * t_window_h(nzb_wall,m)
     6944!--    Rem: Coef +1 corresponds to -lwout included in calculation of radnet_l
     6945       coef_1 = surf%rad_net_l(m) + ( 3.0_wp + 1.0_wp )                                           &
     6946               * surf%emissivity(m,ind_veg_wall) * sigma_sb * t_surf_wall%val(m)**4               &
     6947               + f_shf * surf%pt1(m) + lambda_surface * t_wall%val(nzb_wall,m)
     6948
     6949       IF ( ( .NOT. during_spinup ) .AND. (surf%frac(m,ind_wat_win) > 0.0_wp ) )  THEN
     6950          coef_window_1 = surf%rad_net_l(m) +  ( 3.0_wp + 1.0_wp )                                &
     6951                          * surf%emissivity(m,ind_wat_win) * sigma_sb                             &
     6952                          * t_surf_window%val(m)**4 + f_shf_window * surf%pt1(m)                  &
     6953                          + lambda_surface_window * t_window%val(nzb_wall,m)
    77606954       ENDIF
    7761        IF ( ( humidity ) .AND. ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp ) )  THEN
    7762                 coef_green_1 = surf_usm_h%rad_net_l(m) + ( 3.0_wp + 1.0_wp )                       &
    7763                                * surf_usm_h%emissivity(m,ind_pav_green) * sigma_sb                 &
    7764                                * t_surf_green_h(m)**4 + f_shf_green * surf_usm_h%pt1(m)            &
    7765                                + f_qsws * ( qv1 - q_s + dq_s_dt * t_surf_green_h(m) )              &
    7766                                + lambda_surface_green * t_green_h(nzb_wall,m)
     6955       IF ( ( humidity ) .AND. ( surf%frac(m,ind_pav_green) > 0.0_wp ) )  THEN
     6956          coef_green_1 = surf%rad_net_l(m) + ( 3.0_wp + 1.0_wp )                                  &
     6957                         * surf%emissivity(m,ind_pav_green) * sigma_sb                            &
     6958                         * t_surf_green%val(m)**4 + f_shf_green * surf%pt1(m)                     &
     6959                         + f_qsws * ( qv1 - q_s + dq_s_dt * t_surf_green%val(m) )                 &
     6960                         + lambda_surface_green * t_green%val(nzb_wall,m)
    77676961       ELSE
    7768        coef_green_1 = surf_usm_h%rad_net_l(m) + ( 3.0_wp + 1.0_wp )                                &
    7769                       * surf_usm_h%emissivity(m,ind_pav_green) * sigma_sb * t_surf_green_h(m)**4   &
    7770                       + f_shf_green * surf_usm_h%pt1(m) + lambda_surface_green                     &
    7771                       * t_green_h(nzb_wall,m)
     6962          coef_green_1 = surf%rad_net_l(m) + ( 3.0_wp + 1.0_wp )                                  &
     6963                         * surf%emissivity(m,ind_pav_green) * sigma_sb * t_surf_green%val(m)**4   &
     6964                         + f_shf_green * surf%pt1(m) + lambda_surface_green                       &
     6965                         * t_green%val(nzb_wall,m)
    77726966       ENDIF
    77736967!
    77746968!--    Denominator of the prognostic equation
    7775        coef_2 = 4.0_wp * surf_usm_h%emissivity(m,ind_veg_wall) * sigma_sb * t_surf_wall_h(m)**3    &
     6969       coef_2 = 4.0_wp * surf%emissivity(m,ind_veg_wall) * sigma_sb * t_surf_wall%val(m)**3       &
    77766970                + lambda_surface + f_shf / exner(k)
    7777        IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_h%frac(m,ind_wat_win) > 0.0_wp ) )  THEN
    7778           coef_window_2 = 4.0_wp * surf_usm_h%emissivity(m,ind_wat_win) * sigma_sb *               &
    7779                           t_surf_window_h(m)**3 + lambda_surface_window + f_shf_window / exner(k)
     6971       IF ( ( .NOT. during_spinup ) .AND. ( surf%frac(m,ind_wat_win) > 0.0_wp ) )  THEN
     6972          coef_window_2 = 4.0_wp * surf%emissivity(m,ind_wat_win) * sigma_sb *                    &
     6973                          t_surf_window%val(m)**3 + lambda_surface_window + f_shf_window / exner(k)
    77806974       ENDIF
    7781        IF ( ( humidity ) .AND. ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp ) )  THEN
    7782           coef_green_2 = 4.0_wp * surf_usm_h%emissivity(m,ind_pav_green) * sigma_sb *              &
    7783                          t_surf_green_h(m)**3 + f_qsws * dq_s_dt + lambda_surface_green            &
     6975       IF ( ( humidity ) .AND. ( surf%frac(m,ind_pav_green) > 0.0_wp ) )  THEN
     6976          coef_green_2 = 4.0_wp * surf%emissivity(m,ind_pav_green) * sigma_sb *                   &
     6977                         t_surf_green%val(m)**3 + f_qsws * dq_s_dt + lambda_surface_green         &
    77846978                         + f_shf_green / exner(k)
    77856979       ELSE
    7786        coef_green_2 = 4.0_wp * surf_usm_h%emissivity(m,ind_pav_green) * sigma_sb                   &
    7787                       * t_surf_green_h(m)**3 + lambda_surface_green + f_shf_green / exner(k)
     6980          coef_green_2 = 4.0_wp * surf%emissivity(m,ind_pav_green) * sigma_sb                     &
     6981                         * t_surf_green%val(m)**3 + lambda_surface_green + f_shf_green / exner(k)
    77886982       ENDIF
    77896983!
    77906984!--    Implicit solution when the surface layer has no heat capacity, otherwise use RK3 scheme.
    7791        t_surf_wall_h_p(m) = ( coef_1 * dt_3d * tsc(2) + surf_usm_h%c_surface(m)                    &
    7792                               * t_surf_wall_h(m) )                                                 &
    7793                             / ( surf_usm_h%c_surface(m) + coef_2 * dt_3d * tsc(2) )
    7794        IF ( ( .NOT. during_spinup ) .AND. (surf_usm_h%frac(m,ind_wat_win) > 0.0_wp) )  THEN
    7795           t_surf_window_h_p(m) = ( coef_window_1 * dt_3d * tsc(2) + surf_usm_h%c_surface_window(m) &
    7796                                    * t_surf_window_h(m) ) /                                        &
    7797                                  ( surf_usm_h%c_surface_window(m) + coef_window_2 * dt_3d * tsc(2) )
     6985       t_surf_wall_p%val(m) = ( coef_1 * dt_3d * tsc(2) + surf%c_surface(m)                       &
     6986                            * t_surf_wall%val(m) )                                                &
     6987                            / ( surf%c_surface(m) + coef_2 * dt_3d * tsc(2) )
     6988       IF ( ( .NOT. during_spinup ) .AND. (surf%frac(m,ind_wat_win) > 0.0_wp) )  THEN
     6989          t_surf_window_p%val(m) = ( coef_window_1 * dt_3d * tsc(2) +                            &
     6990                                   surf%c_surface_window(m) * t_surf_window%val(m) ) /            &
     6991                                ( surf%c_surface_window(m) + coef_window_2 * dt_3d * tsc(2) )
    77986992       ENDIF
    7799        t_surf_green_h_p(m) = ( coef_green_1 * dt_3d * tsc(2) + surf_usm_h%c_surface_green(m)       &
    7800                                * t_surf_green_h(m) )                                               &
    7801                              /  ( surf_usm_h%c_surface_green(m) + coef_green_2 * dt_3d * tsc(2) )
     6993       t_surf_green_p%val(m) = ( coef_green_1 * dt_3d * tsc(2) +                                  &
     6994                               surf%c_surface_green(m) * t_surf_green%val(m) )                    &
     6995                             / ( surf%c_surface_green(m) + coef_green_2 * dt_3d * tsc(2) )
    78026996!
    78036997!--    Add RK3 term
    7804        t_surf_wall_h_p(m) = t_surf_wall_h_p(m) + dt_3d * tsc(3) *  surf_usm_h%tt_surface_wall_m(m)
    7805 
    7806        t_surf_window_h_p(m) = t_surf_window_h_p(m) + dt_3d * tsc(3) *                              &
    7807                               surf_usm_h%tt_surface_window_m(m)
    7808 
    7809        t_surf_green_h_p(m) = t_surf_green_h_p(m) + dt_3d * tsc(3) * surf_usm_h%tt_surface_green_m(m)
     6998       t_surf_wall_p%val(m) = t_surf_wall_p%val(m) + dt_3d * tsc(3) *                             &
     6999                            surf%tt_surface_wall_m(m)
     7000       t_surf_window_p%val(m) = t_surf_window_p%val(m) + dt_3d * tsc(3) *                         &
     7001                              surf%tt_surface_window_m(m)
     7002       t_surf_green_p%val(m) = t_surf_green_p%val(m) + dt_3d * tsc(3) *                           &
     7003                             surf%tt_surface_green_m(m)
    78107004!
    78117005!--    Store surface temperature on pt_surface. Further, in case humidity is used, store also
    78127006!--    vpt_surface, which is, due to the lack of moisture on roofs, simply assumed to be the surface
    78137007!--    temperature.
    7814        surf_usm_h%pt_surface(m) = ( surf_usm_h%frac(m,ind_veg_wall) * t_surf_wall_h_p(m)           &
    7815                                     + surf_usm_h%frac(m,ind_wat_win) * t_surf_window_h_p(m)        &
    7816                                     + surf_usm_h%frac(m,ind_pav_green) * t_surf_green_h_p(m)       &
    7817                                   ) / exner(k)
    7818 
    7819        IF ( humidity )  surf_usm_h%vpt_surface(m) = surf_usm_h%pt_surface(m)
     7008       surf%pt_surface(m) = ( surf%frac(m,ind_veg_wall) * t_surf_wall_p%val(m)                    &
     7009                                 + surf%frac(m,ind_wat_win) * t_surf_window_p%val(m)              &
     7010                                 + surf%frac(m,ind_pav_green) * t_surf_green_p%val(m)             &
     7011                             ) / exner(k)
     7012
     7013       IF ( humidity )  surf%vpt_surface(m) = surf%pt_surface(m)
    78207014!
    78217015!--    Calculate true tendency
    7822        stend_wall = ( t_surf_wall_h_p(m) - t_surf_wall_h(m) - dt_3d * tsc(3) *                     &
    7823                       surf_usm_h%tt_surface_wall_m(m) ) / ( dt_3d  * tsc(2) )
    7824        stend_window = ( t_surf_window_h_p(m) - t_surf_window_h(m) - dt_3d * tsc(3) *               &
    7825                         surf_usm_h%tt_surface_window_m(m) ) / ( dt_3d  * tsc(2) )
    7826        stend_green = ( t_surf_green_h_p(m) - t_surf_green_h(m) - dt_3d * tsc(3) *                  &
    7827                        surf_usm_h%tt_surface_green_m(m) ) / ( dt_3d  * tsc(2) )
     7016       stend_wall = ( t_surf_wall_p%val(m) - t_surf_wall%val(m) - dt_3d * tsc(3) *                &
     7017                      surf%tt_surface_wall_m(m) ) / ( dt_3d  * tsc(2) )
     7018       stend_window = ( t_surf_window_p%val(m) - t_surf_window%val(m) - dt_3d * tsc(3) *          &
     7019                        surf%tt_surface_window_m(m) ) / ( dt_3d  * tsc(2) )
     7020       stend_green = ( t_surf_green_p%val(m) - t_surf_green%val(m) - dt_3d * tsc(3) *             &
     7021                       surf%tt_surface_green_m(m) ) / ( dt_3d  * tsc(2) )
    78287022!
    78297023!--    Calculate t_surf tendencies for the next Runge-Kutta step
    78307024       IF ( timestep_scheme(1:5) == 'runge' )  THEN
    78317025          IF ( intermediate_timestep_count == 1 )  THEN
    7832              surf_usm_h%tt_surface_wall_m(m)   = stend_wall
    7833              surf_usm_h%tt_surface_window_m(m) = stend_window
    7834              surf_usm_h%tt_surface_green_m(m)  = stend_green
     7026             surf%tt_surface_wall_m(m)   = stend_wall
     7027             surf%tt_surface_window_m(m) = stend_window
     7028             surf%tt_surface_green_m(m)  = stend_green
    78357029          ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
    7836              surf_usm_h%tt_surface_wall_m(m) = -9.5625_wp * stend_wall +                           &
    7837                                                5.3125_wp * surf_usm_h%tt_surface_wall_m(m)
    7838              surf_usm_h%tt_surface_window_m(m) = -9.5625_wp * stend_window +                       &
    7839                                                  5.3125_wp * surf_usm_h%tt_surface_window_m(m)
    7840              surf_usm_h%tt_surface_green_m(m) = -9.5625_wp * stend_green +                         &
    7841                                                 5.3125_wp * surf_usm_h%tt_surface_green_m(m)
     7030             surf%tt_surface_wall_m(m) = -9.5625_wp * stend_wall +                                &
     7031                                               5.3125_wp * surf%tt_surface_wall_m(m)
     7032             surf%tt_surface_window_m(m) = -9.5625_wp * stend_window +                            &
     7033                                                 5.3125_wp * surf%tt_surface_window_m(m)
     7034             surf%tt_surface_green_m(m) = -9.5625_wp * stend_green +                              &
     7035                                                5.3125_wp * surf%tt_surface_green_m(m)
    78427036          ENDIF
    78437037       ENDIF
     
    78457039!--    In case of fast changes in the skin temperature, it is required to update the radiative
    78467040!--    fluxes in order to keep the solution stable
    7847        IF ( ( ( ABS( t_surf_wall_h_p(m)   - t_surf_wall_h(m) )   > 1.0_wp )   .OR.                 &
    7848             (   ABS( t_surf_green_h_p(m)  - t_surf_green_h(m) )  > 1.0_wp )   .OR.                 &
    7849             (   ABS( t_surf_window_h_p(m) - t_surf_window_h(m) ) > 1.0_wp ) )                      &
     7041       IF ( ( ( ABS( t_surf_wall_p%val(m)   - t_surf_wall%val(m) )   > 1.0_wp )   .OR.            &
     7042            (   ABS( t_surf_green_p%val(m)  - t_surf_green%val(m) )  > 1.0_wp )   .OR.            &
     7043            (   ABS( t_surf_window_p%val(m) - t_surf_window%val(m) ) > 1.0_wp ) )                 &
    78507044               .AND.  unscheduled_radiation_calls  )  THEN
    78517045          force_radiation_call_l = .TRUE.
    78527046       ENDIF
    78537047!
    7854 !--    Calculate fluxes
     7048!--    Calculate new fluxes
    78557049!--    Rad_net_l is never used!
    7856        surf_usm_h%rad_net_l(m) = surf_usm_h%rad_net_l(m) + surf_usm_h%frac(m,ind_veg_wall)         &
    7857                                  * sigma_sb * surf_usm_h%emissivity(m,ind_veg_wall)                &
    7858                                  * ( t_surf_wall_h_p(m)**4 - t_surf_wall_h(m)**4 )                 &
    7859                                  + surf_usm_h%frac(m,ind_wat_win) * sigma_sb                       &
    7860                                  * surf_usm_h%emissivity(m,ind_wat_win)                            &
    7861                                  * ( t_surf_window_h_p(m)**4 - t_surf_window_h(m)**4 )             &
    7862                                  + surf_usm_h%frac(m,ind_pav_green) * sigma_sb                     &
    7863                                  * surf_usm_h%emissivity(m,ind_pav_green)                          &
    7864                                  * ( t_surf_green_h_p(m)**4 - t_surf_green_h(m)**4 )
    7865 
    7866        surf_usm_h%wghf_eb(m)   = lambda_surface * ( t_surf_wall_h_p(m) - t_wall_h(nzb_wall,m) )
    7867        surf_usm_h%wghf_eb_green(m)  = lambda_surface_green                                         &
    7868                                       * ( t_surf_green_h_p(m) - t_green_h(nzb_wall,m) )
    7869        surf_usm_h%wghf_eb_window(m) = lambda_surface_window                                        &
    7870                                       * ( t_surf_window_h_p(m) - t_window_h(nzb_wall,m) )
     7050       surf%rad_net_l(m) = surf%rad_net_l(m) + surf%frac(m,ind_veg_wall)                          &
     7051                                 * sigma_sb * surf%emissivity(m,ind_veg_wall)                     &
     7052                                 * ( t_surf_wall_p%val(m)**4 - t_surf_wall%val(m)**4 )            &
     7053                                 + surf%frac(m,ind_wat_win) * sigma_sb                            &
     7054                                 * surf%emissivity(m,ind_wat_win)                                 &
     7055                                 * ( t_surf_window_p%val(m)**4 - t_surf_window%val(m)**4 )        &
     7056                                 + surf%frac(m,ind_pav_green) * sigma_sb                          &
     7057                                 * surf%emissivity(m,ind_pav_green)                               &
     7058                                 * ( t_surf_green_p%val(m)**4 - t_surf_green%val(m)**4 )
     7059
     7060       surf%wghf_eb(m)   = lambda_surface * ( t_surf_wall_p%val(m) - t_wall%val(nzb_wall,m) )
     7061       surf%wghf_eb_green(m)  = lambda_surface_green                                              &
     7062                                      * ( t_surf_green_p%val(m) - t_green%val(nzb_wall,m) )
     7063       surf%wghf_eb_window(m) = lambda_surface_window                                             &
     7064                                      * ( t_surf_window_p%val(m) - t_window%val(nzb_wall,m) )
    78717065
    78727066!
    78737067!--    Ground/wall/roof surface heat flux
    7874        surf_usm_h%wshf_eb(m)   = - f_shf  * ( surf_usm_h%pt1(m) - t_surf_wall_h_p(m) / exner(k) )  &
    7875                                  * surf_usm_h%frac(m,ind_veg_wall) - f_shf_window                  &
    7876                                  * ( surf_usm_h%pt1(m) - t_surf_window_h_p(m) / exner(k) )         &
    7877                                  * surf_usm_h%frac(m,ind_wat_win) - f_shf_green                    &
    7878                                  * ( surf_usm_h%pt1(m) - t_surf_green_h_p(m) / exner(k) )          &
    7879                                  * surf_usm_h%frac(m,ind_pav_green)
     7068       surf%wshf_eb(m)   = - f_shf  * ( surf%pt1(m) - t_surf_wall_p%val(m) / exner(k) )           &
     7069                                 * surf%frac(m,ind_veg_wall) - f_shf_window                       &
     7070                                 * ( surf%pt1(m) - t_surf_window_p%val(m) / exner(k) )            &
     7071                                 * surf%frac(m,ind_wat_win) - f_shf_green                         &
     7072                                 * ( surf%pt1(m) - t_surf_green_p%val(m) / exner(k) )             &
     7073                                 * surf%frac(m,ind_pav_green)
    78807074!
    78817075!--    Store kinematic surface heat fluxes for utilization in other processes diffusion_s,
    78827076!--    surface_layer_fluxes,...
    7883        surf_usm_h%shf(m) = surf_usm_h%wshf_eb(m) / c_p
     7077       surf%shf(m) = surf%wshf_eb(m) / c_p
    78847078!
    78857079!--    If the indoor model is applied, further add waste heat from buildings to the kinematic flux.
    78867080       IF ( indoor_model )  THEN
    7887           surf_usm_h%shf(m) = surf_usm_h%shf(m) + surf_usm_h%waste_heat(m) / c_p
     7081          surf%shf(m) = surf%shf(m) + surf%waste_heat(m) / c_p
    78887082       ENDIF
    78897083
    7890 
    7891        IF (surf_usm_h%frac(m,ind_pav_green) > 0.0_wp)  THEN
    7892 
    7893 
    7894           IF ( humidity )  THEN
    7895              surf_usm_h%qsws(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt * t_surf_green_h(m) - dq_s_dt  &
    7896                                                 * t_surf_green_h_p(m) )
    7897 
    7898              surf_usm_h%qsws_veg(m)  = - f_qsws_veg  * ( qv1 - q_s + dq_s_dt * t_surf_green_h(m)   &
    7899                                                          - dq_s_dt * t_surf_green_h_p(m) )
    7900 
    7901              surf_usm_h%qsws_liq(m)  = - f_qsws_liq  * ( qv1 - q_s + dq_s_dt * t_surf_green_h(m)   &
    7902                                                          - dq_s_dt * t_surf_green_h_p(m) )
    7903 
    7904           ENDIF
    7905 
    7906 !
    7907 !--       Calculate the true surface resistance
    7908           IF ( .NOT.  humidity )  THEN
    7909              surf_usm_h%r_s(m) = 1.0E10_wp
    7910           ELSE
    7911              surf_usm_h%r_s(m) = - rho_lv * ( qv1 - q_s + dq_s_dt * t_surf_green_h(m) - dq_s_dt    &
    7912                                  * t_surf_green_h_p(m) ) / (surf_usm_h%qsws(m) + 1.0E-20)          &
    7913                                  - surf_usm_h%r_a_green(m)
    7914           ENDIF
    7915 
    7916 !
    7917 !--       Calculate change in liquid water reservoir due to dew fall or evaporation of liquid water
    7918           IF ( humidity )  THEN
    7919 !
    7920 !--          If precipitation is activated, add rain water to qsws_liq and qsws_soil according the
    7921 !--          the vegetation coverage.
    7922 !--          precipitation_rate is given in mm.
     7084       IF ( humidity .AND.  surf%frac(m,ind_pav_green) > 0.0_wp )  THEN!
     7085!--       Calculate true surface resistance
     7086          IF ( upward ) THEN
     7087             surf%qsws(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt * t_surf_green%val(m)               &
     7088                                                - dq_s_dt * t_surf_green_p%val(m) )
     7089             surf%qsws(m) = surf%qsws(m) / l_v
     7090             surf%qsws_veg(m)  = - f_qsws_veg  * ( qv1 - q_s + dq_s_dt * t_surf_green%val(m)      &
     7091                                                         - dq_s_dt * t_surf_green_p%val(m) )
     7092             surf%qsws_liq(m)  = - f_qsws_liq  * ( qv1 - q_s + dq_s_dt * t_surf_green%val(m)      &
     7093                                                         - dq_s_dt * t_surf_green_p%val(m) )
     7094             surf%r_s(m) = - rho_lv * ( qv1 - q_s + dq_s_dt * t_surf_green%val(m)                 &
     7095                                 - dq_s_dt * t_surf_green_p%val(m) ) /                            &
     7096                                 (surf%qsws(m) + 1.0E-20) - surf%r_a_green(m)
    79237097             IF ( precipitation )  THEN
    7924 
    7925 !
     7098!--             Calculate change in liquid water reservoir due to dew fall or evaporation of liquid water
     7099!--             If precipitation is activated, add rain water to qsws_liq and qsws_soil according the
     7100!--             the vegetation coverage. Precipitation_rate is given in mm.
    79267101!--             Add precipitation to liquid water reservoir, if possible. Otherwise, add the water
    79277102!--             to soil. In case of pavements, the exceeding water amount is implicitely removed as
    79287103!--             runoff as qsws_soil is then not used in the soil model
    7929                 IF ( m_liq_usm_h%var_usm_1d(m) /= m_liq_max )  THEN
    7930                    surf_usm_h%qsws_liq(m) = surf_usm_h%qsws_liq(m)                                 &
    7931                                             + surf_usm_h%frac(m,ind_pav_green)                     &
    7932                                             * prr(k+k_off,j+j_off,i+i_off) * hyrho(k+k_off)        &
     7104                IF ( m_liq_usm_h(l)%val(m) /= m_liq_max )  THEN
     7105                   surf%qsws_liq(m) = surf%qsws_liq(m)                                            &
     7106                                            + surf%frac(m,ind_pav_green)                          &
     7107                                            * prr(k+k_off,j+j_off,i+i_off) * hyrho(k+k_off)       &
    79337108                                            * 0.001_wp * rho_l * l_v
    7934                ENDIF
    7935 
     7109                ENDIF
    79367110             ENDIF
    7937 
    79387111!
    79397112!--          If the air is saturated, check the reservoir water level
    7940              IF ( surf_usm_h%qsws(m) < 0.0_wp )  THEN
    7941 !
    7942 !--             Check if reservoir is full (avoid values > m_liq_max) In that case, qsws_liq goes to
    7943 !--             qsws_soil. In this case qsws_veg is zero anyway (because c_liq = 1), so that tend is
    7944 !--             zero and no further check is needed
    7945                 IF ( m_liq_usm_h%var_usm_1d(m) == m_liq_max )  THEN
    7946 !                  surf_usm_h%qsws_soil(m) = surf_usm_h%qsws_soil(m) + surf_usm_h%qsws_liq(m)
    7947                    surf_usm_h%qsws_liq(m)  = 0.0_wp
     7113             IF ( surf%qsws(m) < 0.0_wp )  THEN
     7114!
     7115!--                Check if reservoir is full (avoid values > m_liq_max) In that case, qsws_liq goes to
     7116!--                qsws_soil. In this case qsws_veg is zero anyway (because c_liq = 1), so that tend is
     7117!--                zero and no further check is needed
     7118                IF ( m_liq_usm_h(l)%val(m) == m_liq_max )  THEN
     7119                   surf%qsws_liq(m)  = 0.0_wp
    79487120                ENDIF
    7949 
    7950 !
     7121!--                In case qsws_veg becomes negative (unphysical behavior), let the water enter the
     7122!--                liquid water reservoir as dew on the plant
     7123                IF ( surf%qsws_veg(m) < 0.0_wp )  THEN
     7124                   surf%qsws_liq(m) = surf%qsws_liq(m) + surf%qsws_veg(m)
     7125                   surf%qsws_veg(m) = 0.0_wp
     7126                ENDIF
     7127             ENDIF
     7128
     7129             tend = - surf%qsws_liq(m) * drho_l_lv
     7130             m_liq_usm_h_p(l)%val(m) = m_liq_usm_h(l)%val(m) + dt_3d *                            &
     7131                                       ( tsc(2) * tend + tsc(3) * tm_liq_usm_h_m(l)%val(m) )
     7132!
     7133!--             Check if reservoir is overfull -> reduce to maximum
     7134!--             (conservation of water is violated here)
     7135             m_liq_usm_h_p(l)%val(m) = MIN( m_liq_usm_h_p(l)%val(m), m_liq_max )
     7136!
     7137!--             Check if reservoir is empty (avoid values < 0.0) (conservation of water is violated here)
     7138             m_liq_usm_h_p(l)%val(m) = MAX( m_liq_usm_h_p(l)%val(m), 0.0_wp )
     7139!
     7140!--             Calculate m_liq tendencies for the next Runge-Kutta step
     7141             IF ( timestep_scheme(1:5) == 'runge' )  THEN
     7142                IF ( intermediate_timestep_count == 1 )  THEN
     7143                   tm_liq_usm_h_m(l)%val(m) = tend
     7144                ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
     7145                   tm_liq_usm_h_m(l)%val(m) = -9.5625_wp * tend +                                 &
     7146                                                  5.3125_wp * tm_liq_usm_h_m(l)%val(m)
     7147                ENDIF
     7148             ENDIF
     7149          ELSE
     7150!--          Downward and vertical surfaces
     7151             surf%qsws(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt * t_surf_green%val(m)               &
     7152                                                   - dq_s_dt * t_surf_green_p%val(m) )
     7153             surf%qsws(m) = surf%qsws(m) / l_v
     7154             surf%qsws_veg(m)  = - f_qsws_veg  * ( qv1 - q_s + dq_s_dt * t_surf_green%val(m)      &
     7155                                                   - dq_s_dt * t_surf_green_p%val(m) )
     7156             surf%r_s(m) = - rho_lv * ( qv1 - q_s + dq_s_dt * t_surf_green%val(m)                 &
     7157                                                  - dq_s_dt * t_surf_green_p%val(m) ) /           &
     7158                                                   (surf%qsws(m) + 1.0E-20)  - surf%r_a_green(m)
     7159             surf%qsws_liq(m) = 0._wp  ! - f_qsws_liq  * ( qv1 - q_s + dq_s_dt * t_surf_green_h(m)&
     7160!                                                  - dq_s_dt * t_surf_green_h_p(m) )
     7161!--          If the air is saturated, check the reservoir water level
     7162             IF ( surf%qsws(m) < 0.0_wp )  THEN
    79517163!--             In case qsws_veg becomes negative (unphysical behavior), let the water enter the
    79527164!--             liquid water reservoir as dew on the plant
    7953                 IF ( surf_usm_h%qsws_veg(m) < 0.0_wp )  THEN
    7954                    surf_usm_h%qsws_liq(m) = surf_usm_h%qsws_liq(m) + surf_usm_h%qsws_veg(m)
    7955                    surf_usm_h%qsws_veg(m) = 0.0_wp
     7165                IF ( surf%qsws_veg(m) < 0.0_wp )  THEN
     7166                   surf%qsws_veg(m) = 0.0_wp
    79567167                ENDIF
    79577168             ENDIF
    7958 
    7959              surf_usm_h%qsws(m) = surf_usm_h%qsws(m) / l_v
    7960 
    7961              tend = - surf_usm_h%qsws_liq(m) * drho_l_lv
    7962              m_liq_usm_h_p%var_usm_1d(m) = m_liq_usm_h%var_usm_1d(m) + dt_3d *                     &
    7963                                            ( tsc(2) * tend + tsc(3) * tm_liq_usm_h_m%var_usm_1d(m) )
    7964 !
    7965 !--         Check if reservoir is overfull -> reduce to maximum (conservation of water is violated
    7966 !--         here)
    7967              m_liq_usm_h_p%var_usm_1d(m) = MIN( m_liq_usm_h_p%var_usm_1d(m), m_liq_max )
    7968 
    7969 !
    7970 !--         Check if reservoir is empty (avoid values < 0.0) (conservation of water is violated here)
    7971              m_liq_usm_h_p%var_usm_1d(m) = MAX( m_liq_usm_h_p%var_usm_1d(m), 0.0_wp )
    7972 !
    7973 !--         Calculate m_liq tendencies for the next Runge-Kutta step
    7974              IF ( timestep_scheme(1:5) == 'runge' )  THEN
    7975                 IF ( intermediate_timestep_count == 1 )  THEN
    7976                    tm_liq_usm_h_m%var_usm_1d(m) = tend
    7977                 ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
    7978                    tm_liq_usm_h_m%var_usm_1d(m) = -9.5625_wp * tend +                              &
    7979                                                   5.3125_wp * tm_liq_usm_h_m%var_usm_1d(m)
    7980                 ENDIF
    7981              ENDIF
    7982 
    79837169          ENDIF
    79847170       ELSE
    7985           surf_usm_h%r_s(m) = 1.0E10_wp
     7171          surf%r_s(m) = 1.0E10_wp
    79867172       ENDIF
    79877173!
     
    79897175!--    restored.
    79907176       IF ( during_spinup )  THEN
    7991           surf_usm_h%frac(m,ind_wat_win)   = frac_win
    7992           surf_usm_h%frac(m,ind_veg_wall)  = frac_wall
    7993           surf_usm_h%frac(m,ind_pav_green) = frac_green
     7177          surf%frac(m,ind_wat_win)   = frac_win
     7178          surf%frac(m,ind_veg_wall)  = frac_wall
     7179          surf%frac(m,ind_pav_green) = frac_green
    79947180       ENDIF
    7995 
    7996     ENDDO
    7997 !
    7998 !-- Now, treat vertical surface elements
    7999     !$OMP DO SCHEDULE (STATIC)
    8000     DO  l = 0, 3
    8001         DO  m = 1, surf_usm_v(l)%ns
    8002 !
    8003 !--        During spinup set green and window fraction to zero and restore at the end of the loop.
    8004 !--        Note, this is a temporary fix and needs to be removed later.
    8005            IF ( during_spinup )  THEN
    8006               frac_win   = surf_usm_v(l)%frac(m,ind_wat_win)
    8007               frac_wall  = surf_usm_v(l)%frac(m,ind_veg_wall)
    8008               frac_green = surf_usm_v(l)%frac(m,ind_pav_green)
    8009               surf_usm_v(l)%frac(m,ind_wat_win)   = 0.0_wp
    8010               surf_usm_v(l)%frac(m,ind_veg_wall)  = 1.0_wp
    8011               surf_usm_v(l)%frac(m,ind_pav_green) = 0.0_wp
    8012            ENDIF
    8013 !
    8014 !--        Get indices of respective grid point
    8015            i = surf_usm_v(l)%i(m)
    8016            j = surf_usm_v(l)%j(m)
    8017            k = surf_usm_v(l)%k(m)
    8018 
    8019 !
    8020 !--        Please note, for vertical surfaces no Obukhov length is defined, since stratification
    8021 !--        is not considered in this case.
    8022            lambda_surface        = surf_usm_v(l)%lambda_surf(m)
    8023            lambda_surface_window = surf_usm_v(l)%lambda_surf_window(m)
    8024            lambda_surface_green  = surf_usm_v(l)%lambda_surf_green(m)
    8025 
    8026 !          pt1  = pt(k,j,i)
    8027            IF ( humidity )  THEN
    8028               qv1 = q(k,j,i)
    8029            ELSE
    8030               qv1 = 0.0_wp
    8031            ENDIF
    8032 !
    8033 !--        Calculate rho * c_p coefficient at wall layer
    8034            rho_cp  = c_p * hyp(k) / ( r_d * surf_usm_v(l)%pt1(m) * exner(k) )
    8035 
    8036            IF (surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp )  THEN
    8037 !
    8038 !--           Calculate frequently used parameters
    8039               rho_lv    = rho_cp / c_p * l_v
    8040               drho_l_lv = 1.0_wp / (rho_l * l_v)
    8041            ENDIF
    8042 
    8043 !--        Calculation of r_a for vertical surfaces
    8044 !--
    8045 !--        Heat transfer coefficient for forced convection along vertical walls follows formulation
    8046 !--        in TUF3d model (Krayenhoff & Voogt, 2006)
    8047 !--
    8048 !--        H = httc (Tsfc - Tair)
    8049 !--        httc = rw * (11.8 + 4.2 * Ueff) - 4.0
    8050 !--
    8051 !--             rw: Wall patch roughness relative to 1.0 for concrete
    8052 !--             Ueff: Effective wind speed
    8053 !--             - 4.0 is a reduction of Rowley et al (1930) formulation based on
    8054 !--             Cole and Sturrock (1977)
    8055 !--
    8056 !--             Ucan: Canyon wind speed
    8057 !--             wstar: Convective velocity
    8058 !--             Qs: Surface heat flux
    8059 !--             zH: Height of the convective layer
    8060 !--             wstar = (g/Tcan*Qs*zH)**(1./3.)
    8061 !--        Effective velocity components must always be defined at scalar grid point. The wall
    8062 !--        normal component is obtained by simple linear interpolation. (An alternative would be an
    8063 !--        logarithmic interpolation.) Parameter roughness_concrete (default value = 0.001) is used
    8064 !--        to calculation of roughness relative to concrete. Note, wind velocity is limited
    8065 !--        to avoid division by zero. The nominator can become <= 0.0 for values z0 < 3*10E-4.
    8066            ueff        = MAX ( SQRT( ( ( u(k,j,i) + u(k,j,i+1) ) * 0.5_wp )**2 +                  &
    8067                                      ( ( v(k,j,i) + v(k,j+1,i) ) * 0.5_wp )**2 +                  &
    8068                                      ( ( w(k,j,i) + w(k-1,j,i) ) * 0.5_wp )**2 ),                 &
    8069                                ( ( 4.0_wp + 0.1_wp )                                              &
    8070                                  / ( surf_usm_v(l)%z0(m) * d_roughness_concrete )                 &
    8071                                 - 11.8_wp ) / 4.2_wp                                              &
    8072                               )
    8073            surf_usm_v(l)%r_a(m) = rho_cp / ( surf_usm_v(l)%z0(m) * d_roughness_concrete           &
    8074                                   * ( 11.8_wp + 4.2_wp * ueff )  - 4.0_wp  )
    8075 !
    8076 !--        Limit aerodynamic resistance
    8077            IF ( surf_usm_v(l)%r_a(m) < 1.0_wp )  surf_usm_v(l)%r_a(m) = 1.0_wp
    8078            IF ( surf_usm_v(l)%r_a(m) > 300.0_wp )  surf_usm_v(l)%r_a(m) = 300.0_wp
    8079 
    8080            f_shf         = rho_cp / surf_usm_v(l)%r_a(m)
    8081            f_shf_window  = rho_cp / surf_usm_v(l)%r_a(m)
    8082            f_shf_green   = rho_cp / surf_usm_v(l)%r_a(m)
    8083 
    8084            IF ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) THEN
    8085 !
    8086 !--           Adapted from LSM:
    8087 !--           Second step: calculate canopy resistance r_canopy. f1-f3 here are defined as 1/f1-f3
    8088 !--           as in ECMWF documentation f1: correction for incoming shortwave radiation (stomata
    8089 !--           close at night)
    8090               f1 = MIN( 1.0_wp, ( 0.004_wp * surf_usm_v(l)%rad_sw_in(m) + 0.05_wp )                &
    8091                                 / (0.81_wp * (0.004_wp * surf_usm_v(l)%rad_sw_in(m) + 1.0_wp) ) )
    8092 !
    8093 !--           f2: Correction for soil moisture availability to plants (the integrated soil moisture
    8094 !--           must thus be considered here) f2 = 0 for very dry soils
    8095               f2=1.0_wp
    8096 
    8097 !
    8098 !--           Calculate water vapour pressure at saturation
    8099               e_s = 0.01_wp * 610.78_wp * EXP( 17.269_wp * ( t_surf_green_v_p(l)%t(m) - 273.16_wp ) &
    8100                                                / (  t_surf_green_v_p(l)%t(m) - 35.86_wp ) )
    8101 !
    8102 !--           f3: Correction for vapour pressure deficit
    8103               IF ( surf_usm_v(l)%g_d(m) /= 0.0_wp )  THEN
    8104 !
    8105 !--              Calculate vapour pressure
    8106                  e  = qv1 * surface_pressure / ( qv1 + 0.622_wp )
    8107                  f3 = EXP ( - surf_usm_v(l)%g_d(m) * (e_s - e) )
    8108               ELSE
    8109                  f3 = 1.0_wp
    8110               ENDIF
    8111 !
    8112 !--           Calculate canopy resistance. In case that c_veg is 0 (bare soils), this calculation is
    8113 !--           obsolete, as r_canopy is not used below.
    8114 !--           To do: check for very dry soil -> r_canopy goes to infinity
    8115               surf_usm_v(l)%r_canopy(m) = surf_usm_v(l)%r_canopy_min(m) /                          &
    8116                                           ( surf_usm_v(l)%lai(m) * f1 * f2 * f3 + 1.0E-20_wp )
    8117 
    8118 !
    8119 !--           Calculate saturation specific humidity
    8120               q_s = 0.622_wp * e_s / ( surface_pressure - e_s )
    8121 !
    8122 !--           In case of dewfall, set evapotranspiration to zero. All super-saturated water is then
    8123 !--           removed from the air
    8124               IF ( humidity  .AND.  q_s <= qv1 )  THEN
    8125                  surf_usm_v(l)%r_canopy(m) = 0.0_wp
    8126               ENDIF
    8127 
    8128 !
    8129 !--           Calculate coefficients for the total evapotranspiration
    8130 !--           In case of water surface, set vegetation and soil fluxes to zero.
    8131 !--           For pavements, only evaporation of liquid water is possible.
    8132               f_qsws_veg  = rho_lv *                                                               &
    8133                                 ( 1.0_wp        - 0.0_wp ) / & !surf_usm_h%c_liq(m) ) /              &
    8134                                 ( surf_usm_v(l)%r_a(m) + surf_usm_v(l)%r_canopy(m) )
    8135 !             f_qsws_liq  = rho_lv * surf_usm_h%c_liq(m) / surf_usm_h%r_a_green(m)
    8136 
    8137               f_qsws = f_qsws_veg! + f_qsws_liq
    8138 !
    8139 !--           Calculate derivative of q_s for Taylor series expansion
    8140               e_s_dt = e_s * ( 17.269_wp / ( t_surf_green_v_p(l)%t(m) - 35.86_wp) - 17.269_wp      &
    8141                                * ( t_surf_green_v_p(l)%t(m) - 273.16_wp)                           &
    8142                                / ( t_surf_green_v_p(l)%t(m) - 35.86_wp)**2 )
    8143 
    8144               dq_s_dt = 0.622_wp * e_s_dt / ( surface_pressure - e_s_dt )
    8145            ENDIF
    8146 
    8147 !
    8148 !--        Add LW up so that it can be removed in prognostic equation
    8149            surf_usm_v(l)%rad_net_l(m) = surf_usm_v(l)%rad_sw_in(m) - surf_usm_v(l)%rad_sw_out(m)   &
    8150                                         + surf_usm_v(l)%rad_lw_in(m)  - surf_usm_v(l)%rad_lw_out(m)
    8151 !
    8152 !--        Numerator of the prognostic equation
    8153            coef_1 = surf_usm_v(l)%rad_net_l(m) +                             & ! Coef +1 corresponds to -lwout
    8154                                                                                ! included in calculation of radnet_l
    8155            ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(m,ind_veg_wall) *                        &
    8156                                    sigma_sb *  t_surf_wall_v(l)%t(m) ** 4 +                        &
    8157                                    f_shf * surf_usm_v(l)%pt1(m) +                                  &
    8158                                    lambda_surface * t_wall_v(l)%t(nzb_wall,m)
    8159            IF ( ( .NOT. during_spinup )  .AND.  ( surf_usm_v(l)%frac(m,ind_wat_win) > 0.0_wp ) ) THEN
    8160               coef_window_1 = surf_usm_v(l)%rad_net_l(m) +                   & ! Coef +1 corresponds to -lwout
    8161                                                                                ! included in calculation of radnet_l
    8162              ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(m,ind_wat_win) *                       &
    8163                                    sigma_sb * t_surf_window_v(l)%t(m) ** 4 +                       &
    8164                                    f_shf * surf_usm_v(l)%pt1(m) +                                  &
    8165                                    lambda_surface_window * t_window_v(l)%t(nzb_wall,m)
    8166            ENDIF
    8167            IF ( ( humidity )  .AND.  ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) )  THEN
    8168               coef_green_1 = surf_usm_v(l)%rad_net_l(m) +                      & ! Coef +1 corresponds to -lwout
    8169                                                                                  ! included in calculation of radnet_l
    8170               ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(m,ind_pav_green) * sigma_sb *         &
    8171                                    t_surf_green_v(l)%t(m) ** 4 +                                   &
    8172                                    f_shf * surf_usm_v(l)%pt1(m) + f_qsws * ( qv1 - q_s             &
    8173                                    + dq_s_dt * t_surf_green_v(l)%t(m) ) +                          &
    8174                                    lambda_surface_green * t_wall_v(l)%t(nzb_wall,m)
    8175            ELSE
    8176              coef_green_1 = surf_usm_v(l)%rad_net_l(m) +                       & ! Coef +1 corresponds to -lwout included
    8177                                                                                  ! in calculation of radnet_l
    8178              ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(m,ind_pav_green) * sigma_sb *          &
    8179                                    t_surf_green_v(l)%t(m) ** 4 +                                   &
    8180                                    f_shf * surf_usm_v(l)%pt1(m) +                                  &
    8181                                    lambda_surface_green * t_wall_v(l)%t(nzb_wall,m)
    8182            ENDIF
    8183 
    8184 !
    8185 !--        Denominator of the prognostic equation
    8186            coef_2 = 4.0_wp * surf_usm_v(l)%emissivity(m,ind_veg_wall) * sigma_sb                   &
    8187                     * t_surf_wall_v(l)%t(m)**3 + lambda_surface + f_shf / exner(k)
    8188            IF ( ( .NOT. during_spinup )  .AND.  ( surf_usm_v(l)%frac(m,ind_wat_win) > 0.0_wp ) ) THEN
    8189               coef_window_2 = 4.0_wp * surf_usm_v(l)%emissivity(m,ind_wat_win) * sigma_sb          &
    8190                               * t_surf_window_v(l)%t(m)**3 + lambda_surface_window + f_shf / exner(k)
    8191            ENDIF
    8192            IF ( ( humidity )  .AND.  ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) )  THEN
    8193                coef_green_2 = 4.0_wp * surf_usm_v(l)%emissivity(m,ind_pav_green) * sigma_sb        &
    8194                               * t_surf_green_v(l)%t(m)**3  + f_qsws * dq_s_dt                      &
    8195                               + lambda_surface_green + f_shf / exner(k)
    8196            ELSE
    8197               coef_green_2 = 4.0_wp * surf_usm_v(l)%emissivity(m,ind_pav_green) * sigma_sb         &
    8198                              * t_surf_green_v(l)%t(m)**3 + lambda_surface_green + f_shf / exner(k)
    8199            ENDIF
    8200 !
    8201 !--        Implicit solution when the surface layer has no heat capacity, otherwise use RK3 scheme.
    8202            t_surf_wall_v_p(l)%t(m) = ( coef_1 * dt_3d * tsc(2) + surf_usm_v(l)%c_surface(m)        &
    8203                                        * t_surf_wall_v(l)%t(m) ) / ( surf_usm_v(l)%c_surface(m)    &
    8204                                        + coef_2 * dt_3d * tsc(2) )
    8205            IF ( ( .NOT. during_spinup )  .AND.  ( surf_usm_v(l)%frac(m,ind_wat_win) > 0.0_wp ) ) THEN
    8206               t_surf_window_v_p(l)%t(m) = ( coef_window_1 * dt_3d * tsc(2) +                       &
    8207                                             surf_usm_v(l)%c_surface_window(m)                      &
    8208                                             * t_surf_window_v(l)%t(m) ) /                          &
    8209                                           ( surf_usm_v(l)%c_surface_window(m)                      &
    8210                                             + coef_window_2 * dt_3d * tsc(2) )
    8211            ENDIF
    8212            t_surf_green_v_p(l)%t(m) = ( coef_green_1 * dt_3d * tsc(2) +                            &
    8213                                         surf_usm_v(l)%c_surface_green(m)                           &
    8214                                         * t_surf_green_v(l)%t(m) ) /                               &
    8215                                       ( surf_usm_v(l)%c_surface_green(m)                           &
    8216                                         + coef_green_2 * dt_3d * tsc(2) )
    8217 !
    8218 !--        Add RK3 term
    8219            t_surf_wall_v_p(l)%t(m)   = t_surf_wall_v_p(l)%t(m) + dt_3d * tsc(3) *                  &
    8220                                        surf_usm_v(l)%tt_surface_wall_m(m)
    8221            t_surf_window_v_p(l)%t(m) = t_surf_window_v_p(l)%t(m) + dt_3d * tsc(3) *                &
    8222                                        surf_usm_v(l)%tt_surface_window_m(m)
    8223            t_surf_green_v_p(l)%t(m)  = t_surf_green_v_p(l)%t(m) + dt_3d * tsc(3) *                 &
    8224                                        surf_usm_v(l)%tt_surface_green_m(m)
    8225 
    8226 !
    8227 !--        Store surface temperature. Further, in case humidity is used, store also vpt_surface,
    8228 !--        which is, due to the lack of moisture on roofs, simply assumed to be the surface temperature.
    8229            surf_usm_v(l)%pt_surface(m) = ( surf_usm_v(l)%frac(m,ind_veg_wall)                      &
    8230                                          * t_surf_wall_v_p(l)%t(m)                                 &
    8231                                          + surf_usm_v(l)%frac(m,ind_wat_win)                       &
    8232                                          * t_surf_window_v_p(l)%t(m)                               &
    8233                                          + surf_usm_v(l)%frac(m,ind_pav_green)                     &
    8234                                          * t_surf_green_v_p(l)%t(m) ) / exner(k)
    8235 
    8236            IF ( humidity )  surf_usm_v(l)%vpt_surface(m) = surf_usm_v(l)%pt_surface(m)
    8237 !
    8238 !--        Calculate true tendency
    8239            stend_wall = ( t_surf_wall_v_p(l)%t(m) - t_surf_wall_v(l)%t(m) - dt_3d * tsc(3) *       &
    8240                           surf_usm_v(l)%tt_surface_wall_m(m) ) / ( dt_3d  * tsc(2) )
    8241            stend_window = ( t_surf_window_v_p(l)%t(m) - t_surf_window_v(l)%t(m) - dt_3d * tsc(3) * &
    8242                             surf_usm_v(l)%tt_surface_window_m(m) ) / ( dt_3d  * tsc(2) )
    8243            stend_green = ( t_surf_green_v_p(l)%t(m) - t_surf_green_v(l)%t(m) - dt_3d * tsc(3) *    &
    8244                            surf_usm_v(l)%tt_surface_green_m(m) ) / ( dt_3d  * tsc(2) )
    8245 
    8246 !
    8247 !--        Calculate t_surf_* tendencies for the next Runge-Kutta step
    8248            IF ( timestep_scheme(1:5) == 'runge' )  THEN
    8249               IF ( intermediate_timestep_count == 1 )  THEN
    8250                  surf_usm_v(l)%tt_surface_wall_m(m)   = stend_wall
    8251                  surf_usm_v(l)%tt_surface_window_m(m) = stend_window
    8252                  surf_usm_v(l)%tt_surface_green_m(m)  = stend_green
    8253               ELSEIF ( intermediate_timestep_count < intermediate_timestep_count_max )  THEN
    8254                  surf_usm_v(l)%tt_surface_wall_m(m)   = -9.5625_wp * stend_wall + 5.3125_wp        &
    8255                                                          * surf_usm_v(l)%tt_surface_wall_m(m)
    8256                  surf_usm_v(l)%tt_surface_green_m(m)  = -9.5625_wp * stend_green + 5.3125_wp       &
    8257                                                         * surf_usm_v(l)%tt_surface_green_m(m)
    8258                  surf_usm_v(l)%tt_surface_window_m(m) = -9.5625_wp * stend_window + 5.3125_wp      &
    8259                                                         * surf_usm_v(l)%tt_surface_window_m(m)
    8260               ENDIF
    8261            ENDIF
    8262 
    8263 !
    8264 !--        In case of fast changes in the skin temperature, it is required to update the radiative
    8265 !--        fluxes in order to keep the solution stable
    8266 
    8267            IF ( ( ( ABS( t_surf_wall_v_p(l)%t(m)   - t_surf_wall_v(l)%t(m) )   > 1.0_wp ) .OR.     &
    8268                 (   ABS( t_surf_green_v_p(l)%t(m)  - t_surf_green_v(l)%t(m) )  > 1.0_wp ) .OR.     &
    8269                 (   ABS( t_surf_window_v_p(l)%t(m) - t_surf_window_v(l)%t(m) ) > 1.0_wp ) )        &
    8270                    .AND.  unscheduled_radiation_calls )  THEN
    8271               force_radiation_call_l = .TRUE.
    8272            ENDIF
    8273 
    8274 !
    8275 !--        Calculate fluxes
    8276 !--        Prognostic rad_net_l is used just for output!
    8277            surf_usm_v(l)%rad_net_l(m) = surf_usm_v(l)%frac(m,ind_veg_wall) *                       &
    8278                                         ( surf_usm_v(l)%rad_net_l(m) + 3.0_wp * sigma_sb *         &
    8279                                         t_surf_wall_v(l)%t(m)**4 - 4.0_wp * sigma_sb *             &
    8280                                         t_surf_wall_v(l)%t(m)**3 * t_surf_wall_v_p(l)%t(m) )       &
    8281                                       + surf_usm_v(l)%frac(m,ind_wat_win) *                        &
    8282                                         ( surf_usm_v(l)%rad_net_l(m) + 3.0_wp * sigma_sb *         &
    8283                                         t_surf_window_v(l)%t(m)**4 - 4.0_wp * sigma_sb *           &
    8284                                         t_surf_window_v(l)%t(m)**3 * t_surf_window_v_p(l)%t(m) )   &
    8285                                       + surf_usm_v(l)%frac(m,ind_pav_green) *                      &
    8286                                         ( surf_usm_v(l)%rad_net_l(m) + 3.0_wp * sigma_sb *         &
    8287                                         t_surf_green_v(l)%t(m)**4 - 4.0_wp * sigma_sb *            &
    8288                                         t_surf_green_v(l)%t(m)**3 * t_surf_green_v_p(l)%t(m) )
    8289 
    8290            surf_usm_v(l)%wghf_eb_window(m) = lambda_surface_window *                               &
    8291                                              ( t_surf_window_v_p(l)%t(m)                           &
    8292                                                - t_window_v(l)%t(nzb_wall,m) )
    8293            surf_usm_v(l)%wghf_eb(m) = lambda_surface * ( t_surf_wall_v_p(l)%t(m)                   &
    8294                                                          - t_wall_v(l)%t(nzb_wall,m) )
    8295            surf_usm_v(l)%wghf_eb_green(m) = lambda_surface_green *                                 &
    8296                                             ( t_surf_green_v_p(l)%t(m)                             &
    8297                                               - t_green_v(l)%t(nzb_wall,m) )
    8298 
    8299 !
    8300 !--        Ground/wall/roof surface heat flux
    8301            surf_usm_v(l)%wshf_eb(m) = - f_shf  * ( surf_usm_v(l)%pt1(m) - t_surf_wall_v_p(l)%t(m)  &
    8302                                       / exner(k) ) * surf_usm_v(l)%frac(m,ind_veg_wall)            &
    8303                                      - f_shf_window  * ( surf_usm_v(l)%pt1(m)                      &
    8304                                      - t_surf_window_v_p(l)%t(m) / exner(k) )                      &
    8305                                      * surf_usm_v(l)%frac(m,ind_wat_win) - f_shf_green             &
    8306                                      * ( surf_usm_v(l)%pt1(m) - t_surf_green_v_p(l)%t(m)           &
    8307                                      / exner(k) ) * surf_usm_v(l)%frac(m,ind_pav_green)
    8308 
    8309 !
    8310 !--        Store kinematic surface heat fluxes for utilization in other processes diffusion_s,
    8311 !--        surface_layer_fluxes,...
    8312            surf_usm_v(l)%shf(m) = surf_usm_v(l)%wshf_eb(m) / c_p
    8313 !
    8314 !--        If the indoor model is applied, further add waste heat from buildings to the kinematic
    8315 !--        flux.
    8316            IF ( indoor_model )  THEN
    8317               surf_usm_v(l)%shf(m) = surf_usm_v(l)%shf(m) + surf_usm_v(l)%waste_heat(m) / c_p
    8318            ENDIF
    8319 
    8320            IF ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp )  THEN
    8321 
    8322 
    8323               IF ( humidity )  THEN
    8324                  surf_usm_v(l)%qsws(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt                         &
    8325                                           * t_surf_green_v(l)%t(m) - dq_s_dt                       &
    8326                                           * t_surf_green_v_p(l)%t(m) )
    8327 
    8328                  surf_usm_v(l)%qsws(m) = surf_usm_v(l)%qsws(m) / l_v
    8329 
    8330                  surf_usm_v(l)%qsws_veg(m)  = - f_qsws_veg  * ( qv1 - q_s + dq_s_dt                &
    8331                                               * t_surf_green_v(l)%t(m) - dq_s_dt                   &
    8332                                               * t_surf_green_v_p(l)%t(m) )
    8333 
    8334 !                 surf_usm_h%qsws_liq(m)  = - f_qsws_liq  * ( qv1 - q_s + dq_s_dt                   &
    8335 !                                           * t_surf_green_h(m) - dq_s_dt                           &
    8336 !                                           * t_surf_green_h_p(m) )
    8337               ENDIF
    8338 
    8339 !
    8340 !--           Calculate the true surface resistance
    8341               IF ( .NOT.  humidity )  THEN
    8342                  surf_usm_v(l)%r_s(m) = 1.0E10_wp
    8343               ELSE
    8344                  surf_usm_v(l)%r_s(m) = - rho_lv * ( qv1 - q_s + dq_s_dt * t_surf_green_v(l)%t(m)  &
    8345                                         - dq_s_dt * t_surf_green_v_p(l)%t(m) ) /                   &
    8346                                         (surf_usm_v(l)%qsws(m) + 1.0E-20)  - surf_usm_v(l)%r_a(m)
    8347               ENDIF
    8348 
    8349 !
    8350 !--           Calculate change in liquid water reservoir due to dew fall or evaporation of liquid
    8351 !--           water
    8352               IF ( humidity )  THEN
    8353 !
    8354 !--              If the air is saturated, check the reservoir water level
    8355                  IF ( surf_usm_v(l)%qsws(m) < 0.0_wp )  THEN
    8356 
    8357 !
    8358 !--                 In case qsws_veg becomes negative (unphysical behavior), let the water enter the
    8359 !--                 liquid water reservoir as dew on the plant
    8360                     IF ( surf_usm_v(l)%qsws_veg(m) < 0.0_wp )  THEN
    8361        !                 surf_usm_h%qsws_liq(m) = surf_usm_h%qsws_liq(m) + surf_usm_h%qsws_veg(m)
    8362                        surf_usm_v(l)%qsws_veg(m) = 0.0_wp
    8363                     ENDIF
    8364                  ENDIF
    8365 
    8366               ENDIF
    8367            ELSE
    8368               surf_usm_v(l)%r_s(m) = 1.0E10_wp
    8369            ENDIF
    8370 !
    8371 !--        During spinup green and window fraction are set to zero. Here, the original values are
    8372 !--        restored.
    8373            IF ( during_spinup )  THEN
    8374               surf_usm_v(l)%frac(m,ind_wat_win)   = frac_win
    8375               surf_usm_v(l)%frac(m,ind_veg_wall)  = frac_wall
    8376               surf_usm_v(l)%frac(m,ind_pav_green) = frac_green
    8377            ENDIF
    8378 
    8379         ENDDO
    83807181
    83817182    ENDDO
     
    83837184
    83847185!
    8385 !--  Add-up anthropogenic heat, for now only at upward-facing surfaces
    8386       IF ( usm_anthropogenic_heat  .AND.    .NOT.  during_spinup   .AND.                           &
    8387            intermediate_timestep_count == intermediate_timestep_count_max )  THEN
    8388 !
    8389 !--     Application of the additional anthropogenic heat sources. We considere the traffic for now,
    8390 !--     so all heat is absorbed to the first layer, generalization would be worth.
    8391 !--     Calculation of actual profile coefficient
    8392 !--     ??? check time_since_reference_point ???
    8393          CALL get_date_time( time_since_reference_point, hour = dhour, second_of_day = dtime )
    8394 
    8395 !--      TO_DO: activate, if testcase is available
    8396 !--      !$OMP PARALLEL DO PRIVATE (i, j, k, acoef, rho_cp)
    8397 !--      It may also improve performance to move topo_top_ind before the k-loop
    8398          DO i = nxl, nxr
    8399             DO j = nys, nyn
    8400                DO k = nz_urban_b, min(nz_urban_t,naheatlayers)
    8401                   IF ( k > topo_top_ind(j,i,0) )  THEN
    8402 !
    8403 !--                 Increase of pt in box i,j,k in time dt_3d given to anthropogenic heat
    8404 !--                 aheat*acoef (W*m-2)
    8405 !--                 linear interpolation of coeficient
    8406                      acoef = ( REAL( dhour+1,wp ) - dtime / seconds_per_hour )                     &
    8407                              * aheatprof(k, dhour) +                                               &
    8408                              ( dtime / seconds_per_hour - REAL( dhour, wp ) )                      &
    8409                              * aheatprof(k,dhour+1)
    8410                      IF ( aheat(k,j,i) > 0.0_wp )  THEN
    8411 !
    8412 !--                    Calculate rho * c_p coefficient at layer k
    8413                         rho_cp  = c_p * hyp(k) / ( r_d * pt(k+1,j,i) * exner(k) )
    8414                         pt(k,j,i) = pt(k,j,i) + aheat(k,j,i) * acoef * dt_3d / (exner(k) * rho_cp  &
    8415                         * dz(1) )
    8416                      ENDIF
    8417                   ENDIF
    8418                ENDDO
    8419             ENDDO
    8420          ENDDO
    8421 
    8422       ENDIF
    8423 !
    8424 !--  pt and shf are defined on nxlg:nxrg,nysg:nyng .Get the borders from neighbours.
    8425       CALL exchange_horiz( pt, nbgp )
    8426 !
    8427 !--  Calculation of force_radiation_call:
    8428 !--  Make logical OR for all processes.
    8429 !--  Force radiation call if at least one processor forces it.
    8430       IF ( intermediate_timestep_count == intermediate_timestep_count_max-1 )  THEN
     7186!-- pt and shf are defined on nxlg:nxrg,nysg:nyng .Get the borders from neighbours.
     7187    CALL exchange_horiz( pt, nbgp )
     7188!
     7189!-- Calculation of force_radiation_call:
     7190!-- Make logical OR for all processes.
     7191!-- Force radiation call if at least one processor forces it.
     7192    IF ( intermediate_timestep_count == intermediate_timestep_count_max-1 )  THEN
    84317193#if defined( __parallel )
    8432         IF ( .NOT. force_radiation_call ) THEN
    8433            IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
    8434            CALL MPI_ALLREDUCE( force_radiation_call_l, force_radiation_call,                      &
    8435                                1, MPI_LOGICAL, MPI_LOR, comm2d, ierr )
    8436         ENDIF
     7194       IF ( .NOT. force_radiation_call ) THEN
     7195          IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
     7196          CALL MPI_ALLREDUCE( force_radiation_call_l, force_radiation_call,                       &
     7197                              1, MPI_LOGICAL, MPI_LOR, comm2d, ierr )
     7198       ENDIF
    84377199#else
    8438         force_radiation_call = force_radiation_call .OR. force_radiation_call_l
     7200       force_radiation_call = force_radiation_call .OR. force_radiation_call_l
    84397201#endif
    8440         force_radiation_call_l = .FALSE.
    8441       ENDIF
    8442 
    8443 ! !
    8444 ! !-- Calculate surface specific humidity
    8445 !  IF ( humidity )  THEN
    8446 !     CALL calc_q_surface_usm
    8447 !  ENDIF
    8448 
    8449 
    8450 ! CONTAINS
    8451 ! !------------------------------------------------------------------------------------------------!
    8452 ! ! Description:
    8453 ! ! ------------
    8454 ! !> Calculation of specific humidity of the skin layer (surface). It is assumend that the skin is
    8455 ! !> always saturated.
    8456 ! !------------------------------------------------------------------------------------------------!
    8457 ! SUBROUTINE calc_q_surface_usm
    8458 !
    8459 !    IMPLICIT NONE
    8460 !
    8461 !    REAL(wp)  ::  resistance  !< aerodynamic and soil resistance term
    8462 !
    8463 !    DO  m = 1, surf_usm_h%ns
    8464 !
    8465 !       i   = surf_usm_h%i(m)
    8466 !       j   = surf_usm_h%j(m)
    8467 !       k   = surf_usm_h%k(m)
    8468 !
    8469 !!
    8470 !!--   Calculate water vapour pressure at saturation
    8471 !       e_s = 0.01_wp * 610.78_wp * EXP( 17.269_wp * ( t_surf_green_h_p(m) - 273.16_wp ) /          &
    8472 !             ( t_surf_green_h_p(m) - 35.86_wp  ) )
    8473 !
    8474 !!
    8475 !!--   Calculate specific humidity at saturation
    8476 !       q_s = 0.622_wp * e_s / ( surface_pressure - e_s )
    8477 !
    8478 !!       surf_usm_h%r_a_green(m) = ( surf_usm_h%pt1(m) - t_surf_green_h(m) / exner(k) ) /           &
    8479 !!                                 ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-10_wp )
    8480 !!
    8481 !! !-    Make sure that the resistance does not drop to zero
    8482 !!       IF ( ABS(surf_usm_h%r_a_green(m)) < 1.0E-10_wp )  surf_usm_h%r_a_green(m) = 1.0E-10_wp
    8483 !
    8484 !       resistance = surf_usm_h%r_a_green(m) / ( surf_usm_h%r_a_green(m) + surf_usm_h%r_s(m)        &
    8485 !                    + 1E-5_wp )
    8486 !
    8487 !!
    8488 !!--   Calculate specific humidity at surface
    8489 !       IF ( bulk_cloud_model )  THEN
    8490 !          q(k,j,i) = resistance * q_s + ( 1.0_wp - resistance ) * ( q(k,j,i) - ql(k,j,i) )
    8491 !       ELSE
    8492 !          q(k,j,i) = resistance * q_s + ( 1.0_wp - resistance ) * q(k,j,i)
    8493 !       ENDIF
    8494 !
    8495 !!
    8496 !!--   Update virtual potential temperature
    8497 !       vpt(k,j,i) = pt(k,j,i) * ( 1.0_wp + 0.61_wp * q(k,j,i) )
    8498 !
    8499 !   ENDDO
    8500 !
    8501 !!
    8502 !!--Now, treat vertical surface elements
    8503 !    DO  l = 0, 3
    8504 !       DO  m = 1, surf_usm_v(l)%ns
    8505 !!
    8506 !!--      Get indices of respective grid point
    8507 !          i = surf_usm_v(l)%i(m)
    8508 !          j = surf_usm_v(l)%j(m)
    8509 !          k = surf_usm_v(l)%k(m)
    8510 !
    8511 !!
    8512 !!--      Calculate water vapour pressure at saturation
    8513 !          e_s = 0.01_wp * 610.78_wp * EXP( 17.269_wp * ( t_surf_green_v_p(l)%t(m) - 273.16_wp ) /  &
    8514 !                ( t_surf_green_v_p(l)%t(m) - 35.86_wp ) )
    8515 !
    8516 !!
    8517 !!--      Calculate specific humidity at saturation
    8518 !          q_s = 0.622_wp * e_s / ( surface_pressure -e_s )
    8519 !
    8520 !!
    8521 !!--      Calculate specific humidity at surface
    8522 !          IF ( bulk_cloud_model )  THEN
    8523 !             q(k,j,i) = ( q(k,j,i) - ql(k,j,i) )
    8524 !          ELSE
    8525 !             q(k,j,i) = q(k,j,i)
    8526 !          ENDIF
    8527 !!
    8528 !!--      Update virtual potential temperature
    8529 !          vpt(k,j,i) = pt(k,j,i) * ( 1.0_wp + 0.61_wp * q(k,j,i) )
    8530 !
    8531 !       ENDDO
    8532 !
    8533 !    ENDDO
    8534 !
    8535 ! END SUBROUTINE calc_q_surface_usm
     7202       force_radiation_call_l = .FALSE.
     7203    ENDIF
    85367204
    85377205    IF ( debug_output_timestep )  THEN
    8538        WRITE( debug_string, * ) 'usm_surface_energy_balance | during_spinup: ', during_spinup
     7206       WRITE( debug_string, * ) 'usm_surface_energy_balance: ', horizontal, l, during_spinup
    85397207       CALL debug_message( debug_string, 'end' )
    85407208    ENDIF
    85417209
    85427210 END SUBROUTINE usm_surface_energy_balance
    8543 
    85447211
    85457212!--------------------------------------------------------------------------------------------------!
     
    86177284
    86187285       CALL wrd_write_string( 'ns_h_on_file_usm' )
    8619        WRITE ( 14 )  surf_usm_h%ns
     7286       WRITE ( 14 )  surf_usm_h(0:1)%ns
    86207287
    86217288       CALL wrd_write_string( 'ns_v_on_file_usm' )
    86227289       WRITE ( 14 )  surf_usm_v(0:3)%ns
    86237290
    8624        CALL wrd_write_string( 'usm_start_index_h' )
    8625        WRITE ( 14 )  surf_usm_h%start_index
    8626 
    8627        CALL wrd_write_string( 'usm_end_index_h' )
    8628        WRITE ( 14 )  surf_usm_h%end_index
    8629 
    8630        CALL wrd_write_string( 't_surf_wall_h' )
    8631        WRITE ( 14 )  t_surf_wall_h
    8632 
    8633        CALL wrd_write_string( 't_surf_window_h' )
    8634        WRITE ( 14 )  t_surf_window_h
    8635 
    8636        CALL wrd_write_string( 't_surf_green_h' )
    8637        WRITE ( 14 )  t_surf_green_h
    8638 
    8639        CALL wrd_write_string( 'm_liq_usm_h' )
    8640        WRITE ( 14 )  m_liq_usm_h%var_usm_1d
    8641 !
    8642 !--    Write restart data which is especially needed for the urban-surface model. In order to do not
    8643 !--    fill up the restart routines in surface_mod. Output of waste heat from indoor model. Restart
    8644 !--    data is required in this special case, because the indoor model, where waste heat is
    8645 !--    computed, is called each hour (current default), so that waste heat would have zero value
    8646 !--    until next call of indoor model.
    8647        IF ( indoor_model )  THEN
    8648           CALL wrd_write_string( 'waste_heat_h' )
    8649           WRITE ( 14 )  surf_usm_h%waste_heat
    8650        ENDIF
     7291       DO  l = 0, 1
     7292
     7293          CALL wrd_write_string( 'usm_start_index_h' )
     7294          WRITE ( 14 )  surf_usm_h(l)%start_index
     7295
     7296          CALL wrd_write_string( 'usm_end_index_h' )
     7297          WRITE ( 14 )  surf_usm_h(l)%end_index
     7298
     7299          WRITE( dum, '(I1)')  l
     7300
     7301          CALL wrd_write_string( 't_surf_wall_h(' // dum // ')' )
     7302          WRITE ( 14 )  t_surf_wall_h(l)%val
     7303
     7304          CALL wrd_write_string( 't_surf_window_h(' // dum // ')' )
     7305          WRITE ( 14 )  t_surf_window_h(l)%val
     7306
     7307          CALL wrd_write_string( 't_surf_green_h(' // dum // ')' )
     7308          WRITE ( 14 )  t_surf_green_h(l)%val
     7309
     7310          CALL wrd_write_string( 'm_liq_usm_h(' // dum // ')' )
     7311          WRITE ( 14 )  m_liq_usm_h(l)%val
     7312!
     7313!--       Write restart data which is especially needed for the urban-surface model. In order to do not
     7314!--       fill up the restart routines in surface_mod. Output of waste heat from indoor model. Restart
     7315!--       data is required in this special case, because the indoor model, where waste heat is
     7316!--       computed, is called each hour (current default), so that waste heat would have zero value
     7317!--       until next call of indoor model.
     7318          IF ( indoor_model )  THEN
     7319             CALL wrd_write_string( 'waste_heat_h(' // dum // ')' )
     7320             WRITE ( 14 )  surf_usm_h(l)%waste_heat
     7321          ENDIF
     7322       ENDDO
    86517323
    86527324       DO  l = 0, 3
     
    86617333
    86627334          CALL wrd_write_string( 't_surf_wall_v(' // dum // ')' )
    8663           WRITE ( 14 )  t_surf_wall_v(l)%t
     7335          WRITE ( 14 )  t_surf_wall_v(l)%val
    86647336
    86657337          CALL wrd_write_string( 't_surf_window_v(' // dum // ')' )
    8666           WRITE ( 14 ) t_surf_window_v(l)%t
     7338          WRITE ( 14 ) t_surf_window_v(l)%val
    86677339
    86687340          CALL wrd_write_string( 't_surf_green_v(' // dum // ')' )
    8669           WRITE ( 14 ) t_surf_green_v(l)%t
     7341          WRITE ( 14 ) t_surf_green_v(l)%val
    86707342
    86717343          IF ( indoor_model )  THEN
     
    86767348       ENDDO
    86777349
    8678        CALL wrd_write_string( 'usm_start_index_h' )
    8679        WRITE ( 14 )  surf_usm_h%start_index
    8680 
    8681        CALL wrd_write_string( 'usm_end_index_h' )
    8682        WRITE ( 14 )  surf_usm_h%end_index
    8683 
    8684        CALL wrd_write_string( 't_wall_h' )
    8685        WRITE ( 14 )  t_wall_h
    8686 
    8687        CALL wrd_write_string( 't_window_h' )
    8688        WRITE ( 14 )  t_window_h
    8689 
    8690        CALL wrd_write_string( 't_green_h' )
    8691        WRITE ( 14 )  t_green_h
     7350       DO  l = 0, 1
     7351
     7352          CALL wrd_write_string( 'usm_start_index_h' )
     7353          WRITE ( 14 )  surf_usm_h(l)%start_index
     7354
     7355          CALL wrd_write_string( 'usm_end_index_h' )
     7356          WRITE ( 14 )  surf_usm_h(l)%end_index
     7357
     7358          WRITE( dum, '(I1)')  l
     7359
     7360          CALL wrd_write_string( 't_wall_h(' // dum // ')' )
     7361          WRITE ( 14 )  t_wall_h(l)%val
     7362
     7363          CALL wrd_write_string( 't_window_h(' // dum // ')' )
     7364          WRITE ( 14 )  t_window_h(l)%val
     7365
     7366          CALL wrd_write_string( 't_green_h(' // dum // ')' )
     7367          WRITE ( 14 )  t_green_h(l)%val
     7368
     7369       ENDDO
    86927370
    86937371       DO  l = 0, 3
     
    87027380
    87037381          CALL wrd_write_string( 't_wall_v(' // dum // ')' )
    8704           WRITE ( 14 )  t_wall_v(l)%t
     7382          WRITE ( 14 )  t_wall_v(l)%val
    87057383
    87067384          CALL wrd_write_string( 't_window_v(' // dum // ')' )
    8707           WRITE ( 14 )  t_window_v(l)%t
     7385          WRITE ( 14 )  t_window_v(l)%val
    87087386
    87097387          CALL wrd_write_string( 't_green_v(' // dum // ')' )
    8710           WRITE ( 14 )  t_green_v(l)%t
     7388          WRITE ( 14 )  t_green_v(l)%val
    87117389
    87127390       ENDDO
     
    87167394!--    There is no information about the PE-grid necessary because the restart files consists of the
    87177395!--    whole domain. Therefore, ns_h_on_file_usm and ns_v_on_file_usm are not used with MPI-IO.
    8718        CALL rd_mpi_io_surface_filetypes( surf_usm_h%start_index, surf_usm_h%end_index,             &
    8719                                          surface_data_to_write, global_start_index )
    8720 
    8721        CALL wrd_mpi_io( 'usm_start_index_h',  surf_usm_h%start_index )
    8722        CALL wrd_mpi_io( 'usm_end_index_h', surf_usm_h%end_index )
    8723        CALL wrd_mpi_io( 'usm_global_start_h', global_start_index )
    8724 
    8725        CALL wrd_mpi_io_surface( 't_surf_wall_h',  t_surf_wall_h )
    8726        CALL wrd_mpi_io_surface( 't_surf_window_h', t_surf_window_h )
    8727        CALL wrd_mpi_io_surface( 't_surf_green_h', t_surf_green_h )
    8728 
    8729        CALL wrd_mpi_io_surface( 'm_liq_usm_h', m_liq_usm_h%var_usm_1d )
    8730        IF ( indoor_model )  THEN
    8731           CALL wrd_mpi_io_surface( 'waste_heat_h', surf_usm_h%waste_heat ) ! NEED TO BE CHECKED!!!!!
    8732        ENDIF
     7396       DO  l = 0, 1
     7397
     7398          WRITE( dum, '(I1)')  l
     7399
     7400          END DO
     7401          CALL rd_mpi_io_surface_filetypes( surf_usm_h(l)%start_index, surf_usm_h(l)%end_index,             &
     7402                                            surface_data_to_write, global_start_index )
     7403
     7404          CALL wrd_mpi_io( 'usm_start_index_h_' // dum,  surf_usm_h(l)%start_index )
     7405          CALL wrd_mpi_io( 'usm_end_index_h_' // dum, surf_usm_h(l)%end_index )
     7406          CALL wrd_mpi_io( 'usm_global_start_h_' // dum, global_start_index )
     7407
     7408          CALL wrd_mpi_io_surface( 't_surf_wall_h_' // dum,  t_surf_wall_h(l)%val )
     7409          CALL wrd_mpi_io_surface( 't_surf_window_h_' // dum, t_surf_window_h(l)%val )
     7410          CALL wrd_mpi_io_surface( 't_surf_green_h_' // dum, t_surf_green_h(l)%val )
     7411
     7412          CALL wrd_mpi_io_surface( 'm_liq_usm_h_' // dum, m_liq_usm_h(l)%val )
     7413          IF ( indoor_model )  THEN
     7414             CALL wrd_mpi_io_surface( 'waste_heat_h_' // dum, surf_usm_h(l)%waste_heat ) ! NEED TO BE CHECKED!!!!!
     7415          ENDIF
    87337416
    87347417       DO  l = 0, 3
     
    87457428          IF ( .NOT. surface_data_to_write )  CYCLE
    87467429
    8747           CALL wrd_mpi_io_surface( 't_surf_wall_v(' // dum // ')', t_surf_wall_v(l)%t )
    8748           CALL wrd_mpi_io_surface( 't_surf_window_v(' // dum // ')', t_surf_window_v(l)%t )
    8749           CALL wrd_mpi_io_surface( 't_surf_green_v(' // dum // ')', t_surf_green_v(l)%t )
     7430          CALL wrd_mpi_io_surface( 't_surf_wall_v(' // dum // ')', t_surf_wall_v(l)%val )
     7431          CALL wrd_mpi_io_surface( 't_surf_window_v(' // dum // ')', t_surf_window_v(l)%val )
     7432          CALL wrd_mpi_io_surface( 't_surf_green_v(' // dum // ')', t_surf_green_v(l)%val )
    87507433
    87517434       ENDDO
    87527435
    8753        CALL rd_mpi_io_surface_filetypes( surf_usm_h%start_index, surf_usm_h%end_index,             &
    8754                                          surface_data_to_write, global_start_index )
    8755 
    8756        CALL wrd_mpi_io( 'usm_start_index_h_2',  surf_usm_h%start_index )
    8757        CALL wrd_mpi_io( 'usm_end_index_h_2', surf_usm_h%end_index )
    8758        CALL wrd_mpi_io( 'usm_global_start_h_2', global_start_index )
    8759 
    8760        CALL wrd_mpi_io_surface( 't_wall_h', t_wall_h )
    8761        CALL wrd_mpi_io_surface( 't_window_h', t_window_h )
    8762        CALL wrd_mpi_io_surface( 't_green_h', t_green_h )
     7436       DO  l = 0, 1
     7437
     7438          WRITE( dum, '(I1)')  l
     7439
     7440          CALL rd_mpi_io_surface_filetypes( surf_usm_h(l)%start_index, surf_usm_h(l)%end_index,             &
     7441                                            surface_data_to_write, global_start_index )
     7442
     7443          CALL wrd_mpi_io( 'usm_start_index_h_2_' // dum,  surf_usm_h(l)%start_index )
     7444          CALL wrd_mpi_io( 'usm_end_index_h_2_' // dum, surf_usm_h(l)%end_index )
     7445          CALL wrd_mpi_io( 'usm_global_start_h_2_' // dum, global_start_index )
     7446
     7447          CALL wrd_mpi_io_surface( 't_wall_h_' // dum, t_wall_h(l)%val )
     7448          CALL wrd_mpi_io_surface( 't_window_h_' // dum, t_window_h(l)%val )
     7449          CALL wrd_mpi_io_surface( 't_green_h_' // dum, t_green_h(l)%val )
     7450
     7451       ENDDO
    87637452
    87647453       DO  l = 0, 3
     
    87757464          IF ( .NOT. surface_data_to_write )  CYCLE
    87767465
    8777           CALL wrd_mpi_io_surface( 't_wall_v(' // dum // ')', t_wall_v(l)%t )
    8778           CALL wrd_mpi_io_surface( 't_window_v(' // dum // ')', t_window_v(l)%t )
    8779           CALL wrd_mpi_io_surface( 't_green_v(' // dum // ')', t_green_v(l)%t )
     7466          CALL wrd_mpi_io_surface( 't_wall_v(' // dum // ')', t_wall_v(l)%val )
     7467          CALL wrd_mpi_io_surface( 't_window_v(' // dum // ')', t_window_v(l)%val )
     7468          CALL wrd_mpi_io_surface( 't_green_v(' // dum // ')', t_green_v(l)%val )
    87807469
    87817470       ENDDO
Note: See TracChangeset for help on using the changeset viewer.