driver.F90 Source File


Contents

Source Code


Source Code

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Copyright 1998-2013 Meteo-France
! This is part of the TEB software governed by the CeCILL licence version 2.1.
! See the following links for details:
! https://cecill.info/licences/Licence_CeCILL_V2.1-en.txt
! https://cecill.info/licences/Licence_CeCILL_V2.1-fr.txt
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! ======================================================================
PROGRAM DRIVER
! ======================================================================
!
! ......................................................................
!  METHOD
! ......................................................................
!
! Program designed to create, modify, and test TEB routines before being
! actually implemented into another driver or model (e.g. SURFEX or in an
! atmospheric model)
!
! Using just TEB physical routines, new arguments can be created or
! eliminated as local variables in Driver.
!
!
! Notes:
! The current version of Driver does not include the option TEB_CANOPY.
! Outputs have to be declared in Driver.
!
!    AUTHOR
!
!	B. Bueno, Meteo-France
!
!    MODIFICATIONS
!
!      Original    08/12/10
!      Modification   04/13 (V. Masson) adds garden     (with a proxi SVAT)
!                                            greenroofs (with a proxi SVAT)
!                                            road orientation option
!                                            separated walls option
!      Modification   10/13 (V. Masson) adds irrigation and solar panels
! ---------------------------------------------------------------
! Modules
! ---------------------------------------------------------------
!
USE MODD_CSTS,     ONLY : XCPD, XSTEFAN, XPI, XDAY, XKARMAN,   &
                          XLVTT, XLSTT, XLMTT, XRV, XRD, XG, XP00
USE MODD_SURF_ATM, ONLY: XCISMIN, XVMODMIN, LALDTHRES, XRIMAX
USE MODD_SURF_PAR, ONLY: XUNDEF
USE MODD_TYPE_DATE_SURF
USE MODE_THERMOS
USE MODD_REPROD_OPER, ONLY : CQSAT
!
!USE MODI_INIT_SURFCONSPHY
USE MODI_INI_CSTS
USE MODI_ADD_FORECAST_TO_DATE_SURF
USE MODI_SUNPOS
USE MODI_OL_READ_ATM
USE MODI_OL_ALLOC_ATM
USE MODI_OL_TIME_INTERP_ATM
USE MODI_TEB_GARDEN_STRUCT
USE MODI_WINDOW_DATA_STRUCT
USE MODI_BEM_MORPHO_STRUCT
USE MODI_CIRCUMSOLAR_RAD
USE MODI_OPEN_CLOSE_BIN_ASC_FORC
!
USE MODD_FORC_ATM, ONLY: CSV         ,&! name of all scalar variables
                         XDIR_ALB    ,&! direct albedo for each band
                         XSCA_ALB    ,&! diffuse albedo for each band
                         XEMIS       ,&! emissivity
                         XTSRAD      ,&! radiative temperature
                         XTSUN       ,&! solar time (s from midnight)
                         XZS         ,&! orography               (m)
                         XZREF       ,&! height of T,q forcing   (m)
                         XUREF       ,&! height of wind forcing  (m)
                         XTA         ,&! air temperature forcing (K)
                         XQA         ,&! air humidity forcing    (kg/m3)
                         XSV         ,&! scalar variables
                         XU          ,&! zonal wind              (m/s)
                         XV          ,&! meridian wind           (m/s)
                         XDIR_SW     ,&! direct  solar radiation (on horizontal surf.)
                         XSCA_SW     ,&! diffuse solar radiation (on horizontal surf.)
                         XSW_BANDS   ,&! mean wavelength of each shortwave band (m)
                         XZENITH     ,&! zenithal angle  (radian from the vertical)
                         XZENITH2    ,&! zenithal angle  (radian from the vertical)
                         XAZIM       ,&! azimuthal angle (radian from North, clockwise)
                         XLW         ,&! longwave radiation (on horizontal surf.)
                         XPS         ,&! pressure at atmospheric model surface (Pa)
                         XPA         ,&! pressure at forcing level      (Pa)
                         XRHOA       ,&! density at forcing level       (kg/m3)
                         XCO2        ,&! CO2 concentration in the air   (kg/m3)
                         XSNOW       ,&! snow precipitation             (kg/m2/s)
                         XRAIN       ,&! liquid precipitation           (kg/m2/s)
                         XSFTH       ,&! flux of heat                   (W/m2)
                         XSFTQ       ,&! flux of water vapor            (kg/m2/s)
                         XSFU        ,&! zonal momentum flux            (m/s)
                         XSFV        ,&! meridian momentum flux         (m/s)
                         XSFCO2      ,&! flux of CO2                    (kg/m2/s)
                         XSFTS       ,&! flux of scalar var.            (kg/m2/s)
                         XPEW_A_COEF ,&! implicit coefficients
                         XPEW_B_COEF ,&!
                         XPET_A_COEF ,&
                         XPEQ_A_COEF ,&
                         XPET_B_COEF ,&
                         XPEQ_B_COEF

USE PROXI_SVAT_CONSTS, ONLY: VEG_ALB, VEG_EMIS, GARDEN_BR, GREENROOF_BR
!
IMPLICIT NONE
! ---------------------------------------------------------------
! Namelist: Add to allow parameters to be changed dynamically using
!           namelist file.
! ---------------------------------------------------------------
!
namelist /dimensions/   NROOF_LAYER, NROAD_LAYER, NWALL_LAYER, NFLOOR_LAYER

namelist /parameters/   XTSTEP_SURF, IYEAR, IMONTH, IDAY, ZTIME_START, ZLON, ZLAT ,&
                        INB_STEP_ATM, INB_ATM, KSW, ZZREF, CBEM, HROAD_DIR ,&
                        HWALL_OPT, LGARDEN, LGREENROOF, ZFRAC_GR, LSOLAR_PANEL ,&
                        ZFRAC_PANEL, LPAR_RD_IRRIG, CCOOL_COIL ,&
                        CHEAT_COIL, HZ0H, ZZ0, ZBLD, ZGARDEN, ZBLD_HEIGHT ,&
                        ZWALL_O_HOR, ZROAD_DIR, ZALB_ROOF, ZEMIS_ROOF ,&
                        ZHC_ROOF, ZTC_ROOF, ZD_ROOF, ZALB_ROAD, ZEMIS_ROAD ,&
                        ZHC_ROAD, ZTC_ROAD, ZD_ROAD, ZALB_WALL, ZEMIS_WALL, ZHC_WALL ,&
                        ZTC_WALL, ZD_WALL, ZHC_FLOOR, ZTC_FLOOR, ZD_FLOOR, ZH_TRAFFIC ,&
                        ZLE_TRAFFIC, ZH_INDUSTRY, ZLE_INDUSTRY, ZRD_START_MONTH, ZRD_END_MONTH ,&
                        ZRD_START_HOUR, ZRD_END_HOUR, ZRD_24H_IRRIG, ZEMIS_PANEL, ZALB_PANEL ,&
                        ZEFF_PANEL, ZRESIDENTIAL, ZDT_RES, ZDT_OFF, PFLOOR_HEIGHT, ZINF, ZQIN ,&
                        ZQIN_FRAD, ZQIN_FLAT, ZGR, ZSHGC, PU_WIN, ZSHADE, ZSHGC_SH ,&
                        ZNATVENT, ZV_VENT, ZF_WATER_COND, ZF_WASTE_CAN, ZTCOOL_TARGET, ZTHEAT_TARGET ,&
                        ZHR_TARGET, ZEFF_HEAT, ZCAP_SYS_HEAT, ZCAP_SYS_RAT, ZT_ADP, ZM_SYS_RAT ,&
                        ZCOP_RAT, CCH_BEM, ZROUGH_ROOF, ZROUGH_WALL, ZT_ROAD, ZT_ROOF, ZT_WALL ,&
                        ZT_FLOOR, ZT_MASS, ZTI_BLD, ZT_CANYON, ZT_WIN1, ZT_WIN2, ZQ_CANYON, ZQI_BLD, &
                        VEG_ALB, VEG_EMIS, GARDEN_BR, GREENROOF_BR, NO_OUTPUT

! ---------------------------------------------------------------
! Declarations of local variables (INPUTS)
! ---------------------------------------------------------------
!
! Simulation - prepared for CAPITOUL atmospheric forcing
REAL               :: XTSTEP_SURF
INTEGER            :: IYEAR      ! Current year (UTC)
INTEGER            :: IMONTH     ! Current month (UTC)
INTEGER            :: IDAY       ! Current day (UTC)
REAL               :: ZTIME_START! Time at start of the run (s)
REAL,DIMENSION(1)  :: ZLON       ! Longitude (deg)
REAL,DIMENSION(1)  :: ZLAT       ! Latitude (deg)
INTEGER           :: INB_STEP_ATM! Forcing time-steps
INTEGER            :: INB_ATM    ! number time the driver calls the TEB
!                                ! routines during a forcing time-step
!                                ! --> it defines the time-step for TEB
INTEGER            :: KSW        ! number of spectral bands in SW forcing
REAL,DIMENSION(1)  :: ZZREF      ! Atm. Forcing height above roof level
!
! GO TO LINE 550 FOR MORE INPUTS
!
! ---------------------------------------------------------------------               ! ||   ||
! declarations of local variables (PARAMETERS)                                        ! ||   ||
! ---------------------------------------------------------------------               ! ||   ||
!                                                                                     ! ||   ||
REAL,DIMENSION(1) :: ZTI_BLD        ! indoor air temperature                          ! ||   ||
REAL,DIMENSION(1) :: ZT_CANYON      ! air canyon temperature                          ! ||   ||
REAL,DIMENSION(1) :: ZQA_KGKG       ! air humidity at forcing level (kg/kg)           ! || G ||
REAL              :: ZTIMEC   = 0.0 ! Current duration since start of the run(s)      ! || O ||
INTEGER           :: JFORC_STEP     ! atmospheric loop index                          ! ||   ||
INTEGER           :: JSURF_STEP     ! Driver loop index                               ! || B ||
INTEGER           :: JLOOP          ! loop counter                                    ! || E ||
INTEGER           :: NWALL_LAYER    ! number of wall layers                           ! || L ||
INTEGER           :: NROOF_LAYER    ! number of roof layers                           ! || O ||
INTEGER           :: NROAD_LAYER    ! number of road layers                           ! || W ||
INTEGER           :: NFLOOR_LAYER   ! number of floor layers                          ! ||   ||
TYPE(DATE_TIME)   :: TPTIME                                                           ! ||   ||
CHARACTER(LEN=3)  :: HIMPLICIT_WIND='NEW' ! Implicitation option for wind fluxes      ! ||   ||
REAL,DIMENSION(:,:), ALLOCATABLE :: ZHC_WALL ! Heat capacity        of wall layers    ! ||   ||
REAL,DIMENSION(:,:), ALLOCATABLE :: ZTC_WALL ! Thermal conductivity of wall layers    ! ||   ||
REAL,DIMENSION(:,:), ALLOCATABLE :: ZD_WALL  ! Thickness            of wall layers    !\\     //
REAL,DIMENSION(:,:), ALLOCATABLE :: ZHC_ROOF ! Heat capacity        of roof layers    ! \\   //
REAL,DIMENSION(:,:), ALLOCATABLE :: ZTC_ROOF ! Thermal conductivity of roof layers    !  \\ //
REAL,DIMENSION(:,:), ALLOCATABLE :: ZD_ROOF  ! Thickness            of roof layers    !   \\/
REAL,DIMENSION(:,:), ALLOCATABLE :: ZHC_ROAD ! Heat capacity        of road layers    !
REAL,DIMENSION(:,:), ALLOCATABLE :: ZTC_ROAD ! Thermal conductivity of road layers    ! ||   ||
REAL,DIMENSION(:,:), ALLOCATABLE :: ZD_ROAD  ! Thickness            of road layers    ! ||   ||
REAL,DIMENSION(:,:), ALLOCATABLE :: ZT_ROAD  ! road layers temperatures               ! || F ||
REAL,DIMENSION(:,:), ALLOCATABLE :: ZT_ROOF  ! roof layers temperatures               ! || O ||
REAL,DIMENSION(:,:), ALLOCATABLE :: ZT_WALL! wall layers temperatures (wall 'A')    ! || R ||
REAL,DIMENSION(:,:), ALLOCATABLE :: ZT_WALL_B! wall layers temperatures (wall 'B')    ! ||   ||
REAL,DIMENSION(1)  :: ZROAD_DIR         ! road direction (° from North, clockwise)    ! || U ||
REAL,DIMENSION(1)  :: ZFRAC_GR          ! fraction of greenroofs on roofs             ! || R ||
REAL,DIMENSION(1)  :: ZFRAC_PANEL       ! fraction of solar panels on roofs           ! || B ||
                                                                                      ! || A ||
!* snow variables                                                                     ! || N ||
CHARACTER(LEN=3)   :: HSNOW_ROOF = "1-L"! Option for roof snow                        ! ||   ||
REAL,DIMENSION(1,1):: ZWSNOW_ROOF= 0.   ! Initial Amount      of roof snow reservoir  ! || P ||
REAL,DIMENSION(1,1):: ZTSNOW_ROOF       ! layer temperature   of roof snow            ! || A ||
REAL,DIMENSION(1,1):: ZRSNOW_ROOF       ! density             of roof snow            ! || R ||
REAL,DIMENSION(1)  :: ZTSSNOW_ROOF      ! surface temperature of roof snow            ! || A ||
CHARACTER(LEN=3)   :: HSNOW_ROAD = "1-L"! Option for road snow                        ! || M ||
REAL,DIMENSION(1,1):: ZWSNOW_ROAD= 0.   ! Initial amount      of road snow reservoir  ! || E ||
REAL,DIMENSION(1,1):: ZTSNOW_ROAD       ! layer temperature   of road snow            ! || T ||
REAL,DIMENSION(1,1):: ZRSNOW_ROAD       ! density             of road snow            ! || E ||
REAL,DIMENSION(1)  :: ZTSSNOW_ROAD      ! surface temperature of road snow            ! || R ||
!* radiative variables                                                                ! || S ||
REAL,DIMENSION(1)  :: ZALB_WALL         ! albedo of walls                             ! ||   ||
REAL,DIMENSION(1)  :: ZEMIS_WALL        ! emissivity of walls                         ! ||   ||
REAL,DIMENSION(1)  :: ZALB_ROOF         ! albedo of roofs                             !\\     //
REAL,DIMENSION(1)  :: ZEMIS_ROOF        ! emissivity of roofs                         ! \\   //
REAL,DIMENSION(1)  :: ZESNOW_ROAD       ! road snow emissivity                        !  \\ //
REAL,DIMENSION(1)  :: ZALB_ROAD         ! albedo of roads                             !   \\/
REAL,DIMENSION(1)  :: ZEMIS_ROAD        ! emissivity of roads                         !
REAL,DIMENSION(1)  :: ZASNOW_ROOF       ! roof snow albedo                            ! ||   ||
REAL,DIMENSION(1)  :: ZASNOW_ROAD       ! road snow albedo                            ! || A ||
REAL,DIMENSION(1)  :: ZABS_SW_ROOF      ! Shortwave radiation absorbed by roofs       ! || N ||
REAL,DIMENSION(1)  :: ZABS_SW_ROAD      ! Shortwave radiation absorbed by roads       ! || D ||
REAL,DIMENSION(1)  :: ZABS_SW_WALL_A    ! Shortwave radiation absorbed by wall A      ! ||   ||
REAL,DIMENSION(1)  :: ZABS_SW_WALL_B    ! Shortwave radiation absorbed by wall B      ! || T ||
REAL,DIMENSION(1)  :: ZABS_SW_GARDEN    ! Shortwave radiation absorbed by gardens     ! || E ||
REAL,DIMENSION(1)  :: ZABS_SW_GREENROOF ! Shortwave radiation absorbed by greenroofs  ! || B ||
REAL,DIMENSION(1)  :: ZABS_LW_ROOF      ! Longwave  radiation absorbed by roofs       ! ||   ||
REAL,DIMENSION(1)  :: ZABS_LW_ROAD      ! Longwave  radiation absorbed by roads       ! || O ||
REAL,DIMENSION(1)  :: ZABS_LW_WALL_A    ! Longwave  radiation absorbed by wall A      ! || P ||
REAL,DIMENSION(1)  :: ZABS_LW_WALL_B    ! Longwave  radiation absorbed by wall B      ! || T ||
REAL,DIMENSION(1)  :: ZABS_LW_GARDEN    ! Longwave  radiation absorbed by gardens     ! || I ||
REAL,DIMENSION(1)  :: ZABS_LW_GREENROOF ! Longwave  radiation absorbed by greenroofs  ! || O ||
REAL,DIMENSION(1)  :: ZABS_SW_SNOW_ROOF ! Shortwave radiation absorbed by roof snow   ! || N ||
REAL,DIMENSION(1)  :: ZABS_SW_SNOW_ROAD ! Shortwave radiation absorbed by road snow   ! || S ||
REAL,DIMENSION(1)  :: ZABS_SW_PANEL  ! Shortwave radiation absorbed by solar panels   ! ||   ||
REAL,DIMENSION(1)  :: ZABS_LW_PANEL  ! Longwave  radiation absorbed by solar panels   ! ||   ||
REAL,DIMENSION(1)  :: ZDIR_ALB_TOWN  ! town direct albedo                             ! ||   ||
REAL,DIMENSION(1)  :: ZSCA_ALB_TOWN  ! town scaterred albedo                          ! ||   ||
REAL,DIMENSION(1)  :: ZCAN_HW_RATIO  ! canyon    h/W                                  ! ||   ||
REAL,DIMENSION(1)  :: ZSVF_ROAD      ! road sky view factor                           ! ||   ||
REAL,DIMENSION(1)  :: ZSVF_GARDEN    ! garden sky view factor                         ! ||   ||
REAL,DIMENSION(1)  :: ZSVF_WALL      ! wall sky view factor                           ! ||   ||
REAL,DIMENSION(1)  :: ZWAKE          ! reduction of average wind speed                ! ||   ||
REAL,DIMENSION(1)  :: ZGSNOW_ROOF  = 0.0 ! roof snow conduction                       !\\     //
REAL,DIMENSION(1)  :: ZHSNOW_ROOF                                                     ! \\   //
! Anthropogenic heat fluxes                                                           !  \\ //
REAL,DIMENSION(1)  :: ZH_TRAFFIC       ! heat fluxes due to traffic                   !   \\/
REAL,DIMENSION(1)  :: ZLE_TRAFFIC      ! heat fluxes due to traffic                   !
REAL,DIMENSION(1)  :: XH_TRAFFIC       ! heat fluxes due to traffic                   !   \\/
REAL,DIMENSION(1)  :: XLE_TRAFFIC      ! heat fluxes due to traffic
REAL,DIMENSION(1)  :: ZH_INDUSTRY      ! heat fluxes due to factories                 ! ||   ||
REAL,DIMENSION(1)  :: ZLE_INDUSTRY     ! heat fluxes due to factories                 ! ||   ||
! Urban options                                                                       ! ||   ||
LOGICAL            :: LPAR_RD_IRRIG    ! Flag for road watering                       ! || S ||
LOGICAL            :: LSOLAR_PANEL     ! Flag to use a solar panels on roofs          ! || P ||
LOGICAL            :: LGARDEN          ! Flag to use a vegetation scheme in gardens   ! || E ||
LOGICAL            :: LGREENROOF       ! Flag to use a green roofs scheme             ! || C ||
CHARACTER(LEN=6)   :: HZ0H             ! TEB option for z0h roof & road               ! || I ||
CHARACTER(LEN=4)   :: HROAD_DIR        ! road direction option :                      ! || F ||
!                                      ! 'UNIF' : uniform roads                       ! || I ||
!                                      ! 'ORIE' : specified road orientation          ! || C ||
CHARACTER(LEN=4)   :: HWALL_OPT        ! Wall option                                  ! || A ||
!                                      ! 'UNIF' : uniform walls                       ! || T ||
!                                      ! 'TWO ' : 2 opposite  walls                   ! || I ||
! Canyon geometry                                                                     ! || O ||
REAL,DIMENSION(1)  :: ZZ0              ! Roughness length (m)                         ! || N ||
REAL,DIMENSION(1)  :: ZBLD             ! Horizontal building area density             ! || S ||
REAL,DIMENSION(1)  :: ZGARDEN          ! fraction of GARDEN areas                     ! ||   ||
REAL,DIMENSION(1)  :: ZBLD_HEIGHT      ! Canyon height (m)                            ! ||   ||
REAL,DIMENSION(1)  :: ZWALL_O_HOR      ! Vertical to horizonal surf ratio             ! ||   ||
! Urban variables                                                                     ! ||   ||
REAL,DIMENSION(1)  :: ZU_CANYON = 1.0  ! hor. wind in canyon                          ! ||   ||
REAL,DIMENSION(1)  :: ZQ_CANYON        ! canyon air specific humidity     (kg/kg)     ! ||   ||
REAL,DIMENSION(1)  :: ZDIR_CANYON      ! canyon wind direction                        ! ||   ||
REAL,DIMENSION(1)  :: ZTS_ROOF         ! surface temperature                          ! ||   ||
REAL,DIMENSION(1)  :: ZTS_ROAD         ! surface temperature                          !\\     //
REAL,DIMENSION(1)  :: ZTS_WALL_A       ! surface temperature                          ! \\   //
REAL,DIMENSION(1)  :: ZTS_WALL_B       ! surface temperature                          !  \\ //
!                                                                                     !   \\/
REAL,DIMENSION(1)  :: ZZ_LOWCAN        ! altitude of air layer above road             !
REAL,DIMENSION(1)  :: ZT_LOWCAN        ! temperature of air above road                ! ||   ||
REAL,DIMENSION(1)  :: ZU_LOWCAN        ! wind above road                              ! ||   ||
REAL,DIMENSION(1)  :: ZQ_LOWCAN        ! humidity above road                          ! ||   ||
REAL,DIMENSION(1)  :: ZEXNS            ! surface exner function                       ! ||   ||
REAL,DIMENSION(1)  :: ZEXNA            ! exner function                               ! ||   ||
REAL,DIMENSION(1)  :: ZROAD            ! fraction of roads                            ! ||   ||
REAL,DIMENSION(1)  :: ZWS_ROOF     = 0.! roof water content (kg/m2)                   ! ||   ||
REAL,DIMENSION(1)  :: ZWS_ROAD     = 0.! road water content (kg/m2)                   ! ||   ||
REAL,DIMENSION(1)  :: ZPEW_A_COEF      ! implicit coefficients                        ! ||   ||
REAL,DIMENSION(1)  :: ZPEW_B_COEF      ! for wind coupling                            ! ||   ||
REAL,DIMENSION(1)  :: ZPEW_A_COEF_LOWCAN!                                             ! ||   ||
REAL,DIMENSION(1)  :: ZPEW_B_COEF_LOWCAN!                                             ! ||   ||
REAL,DIMENSION(1)  :: ZWALL_O_GRND     ! Wall to ground surface ratio                 ! ||   ||
REAL,DIMENSION(1)  :: ZROAD_O_GRND     ! Road to ground surface ratio                 ! ||   ||
REAL,DIMENSION(1)  :: ZGARDEN_O_GRND   ! Garden to ground surface ratio               ! ||   ||
REAL,DIMENSION(1)  :: ZVMOD            ! Module of wind speed at the top of the canyon! ||   ||
REAL,DIMENSION(1)  :: ZCD              ! drag coefficient                             ! ||   ||
REAL,DIMENSION(1)  :: ZCDN             ! neutral drag coefficient                     ! ||   ||
REAL,DIMENSION(1)  :: ZAC_ROAD         ! road aerodynamical conductance               ! ||   ||
REAL,DIMENSION(1)  :: ZAC_ROAD_WAT     ! road aerodynamical conductance (for water)   ! ||   ||
REAL,DIMENSION(1)  :: ZAC_GARDEN       ! garden aerodynamical conductance             !\\     //
REAL,DIMENSION(1)  :: ZAC_GARDEN_WAT   ! garden aerodynamical conductance for vapor   ! \\   //
REAL,DIMENSION(1)  :: ZAC_GREENROOF    ! green roofs aerodynamical conductance        !  \\ //
REAL,DIMENSION(1)  :: ZAC_GREENROOF_WAT! green roofs aerodynamical conductance        !   \\/
!                                      ! for vapor                                    !
REAL,DIMENSION(1)  :: ZUW_ROOF         ! Momentum flux for roofs                      ! ||   ||
REAL,DIMENSION(1)  :: ZDUWDU_GRND      ! d(u'w')/du for ground                        ! ||   ||
REAL,DIMENSION(1)  :: ZDUWDU_ROOF      ! d(u'w')/du for roof                          ! ||   ||
REAL,DIMENSION(1)  :: ZUSTAR_TOWN      ! Fraction velocity for town                   ! ||   ||
REAL,DIMENSION(1)  :: ZRESA_TOWN       ! Aerodynamical resistance                     ! ||   ||
REAL,DIMENSION(1)  :: ZCH_TOWN         ! Heat exchange coefficient                    ! ||   ||
REAL,DIMENSION(1)  :: ZRI_TOWN         ! Richardson number                            ! ||   ||
REAL,DIMENSION(1)  :: ZRUNOFF_TOWN     ! runoff for town                              ! ||   ||
REAL,DIMENSION(1)  :: ZRUNOFF_ROOF     ! runoff for roof                              ! ||   ||
REAL,DIMENSION(1)  :: ZRUNOFF_ROAD     ! runoff for road                              ! ||   ||
! Road-wall-budget routines                                                           ! ||   ||
REAL,DIMENSION(1)  :: ZGSNOW_ROAD = 0.0! road snow conduction                         ! ||   ||
! Urban fluxes variables                                                              ! ||   ||
REAL,DIMENSION(1)  :: ZROOF_FRAC       ! roof, wall,                                  ! ||   ||
REAL,DIMENSION(1)  :: ZWALL_FRAC       ! road, and green area                         ! ||   ||
REAL,DIMENSION(1)  :: ZROAD_FRAC       ! fractions                                    ! ||   ||
REAL,DIMENSION(1)  :: ZGARDEN_FRAC     ! fractions                                    ! ||   ||
REAL,DIMENSION(1)  :: ZTOTS_O_HORS     ! total canyon+roof surf over horizontal surf  ! ||   ||
REAL,DIMENSION(1)  :: ZUW_GRND         ! friction flux over ground                    ! ||   ||
REAL,DIMENSION(1)  :: ZRN_ROOF         ! net radiation over roof                      ! ||   ||
REAL,DIMENSION(1)  :: ZH_ROOF          ! sensible heat flux over roof                 ! ||   ||
REAL,DIMENSION(1)  :: ZLE_ROOF         ! latent heat flux over roof                   !\\     //
REAL,DIMENSION(1)  :: ZGFLUX_ROOF      ! flux through the roof                        ! \\   //
REAL,DIMENSION(1)  :: ZRN_ROAD         ! net radiation over road                      !  \\ //
REAL,DIMENSION(1)  :: ZH_ROAD          ! sensible heat flux over road                 !   \\/
REAL,DIMENSION(1)  :: ZLE_ROAD         ! latent heat flux over road                   !
REAL,DIMENSION(1)  :: ZGFLUX_ROAD      ! flux through the road                        ! ||   ||
REAL,DIMENSION(1)  :: ZRN_WALL_A       ! net radiation over wall                      ! ||   ||
REAL,DIMENSION(1)  :: ZRN_WALL_B       ! net radiation over wall                      ! ||   ||
REAL,DIMENSION(1)  :: ZH_WALL_A = 0.0  ! sensible heat flux over wall                 ! ||   ||
REAL,DIMENSION(1)  :: ZH_WALL_B = 0.0  ! sensible heat flux over wall                 ! ||   ||
REAL,DIMENSION(1)  :: ZLE_WALL_A       ! latent heat flux over wall                   ! ||   ||
REAL,DIMENSION(1)  :: ZLE_WALL_B       ! latent heat flux over wall                   ! ||   ||
REAL,DIMENSION(1)  :: ZGFLUX_WALL_A    ! flux through the wall                        ! ||   ||
REAL,DIMENSION(1)  :: ZGFLUX_WALL_B    ! flux through the wall                        ! ||   ||
                                                                                      ! ||   ||
REAL,DIMENSION(1)  :: ZG_GREENROOF_ROOF! heat flux between base of greenroof          ! ||   ||
!                                      ! and structural roof                          ! ||   ||
                                                                                      ! ||   ||
REAL,DIMENSION(1)  :: ZRNSNOW_ROOF = 0.0 ! net radiation over snow                    ! ||   ||
REAL,DIMENSION(1)  :: ZRNSNOW_ROAD = 0.0 ! net radiation over snow                    ! ||   ||
REAL,DIMENSION(1)  :: ZHSNOW_ROAD  = 0.0 ! sensible heat flux over snow               ! ||   ||
REAL,DIMENSION(1)  :: ZLESNOW_ROAD = 0.0 ! latent heat flux over snow                 ! ||   ||
REAL,DIMENSION(1)  :: ZRN_BLT            ! net radiation over built covers            ! ||   ||
REAL,DIMENSION(1)  :: ZH_BLT             ! sensible heat flux over built covers       ! ||   ||
REAL,DIMENSION(1)  :: ZLE_BLT            ! latent heat flux over built covers         !\\     //
REAL,DIMENSION(1)  :: ZGFLUX_BLT         ! flux through the built covers              ! \\   //
REAL,DIMENSION(1)  :: ZFLX_BLD           ! heat flx from bld to its structure         !  \\ //
REAL,DIMENSION(1)  :: ZDQS_TOWN          ! storage inside town materials              !   \\/
REAL,DIMENSION(1)  :: ZQF_TOWN           ! total anthropogenic heat                   !
REAL,DIMENSION(1)  :: ZMELT_ROOF = 0.0   ! snow melting on roof                       ! ||   ||
REAL,DIMENSION(1)  :: ZMELT_ROAD  = 0.0  ! snow melting on road                       ! ||   ||
REAL,DIMENSION(1)  :: ZQF_BLD                                                         ! ||   ||
REAL,DIMENSION(1)  :: ZSFCO2             ! Surface Flux of CO2                        ! ||   ||
!                                                                                     ! ||   ||
! new arguments created after BEM                                                     ! ||   ||
!                                                                                     ! ||   ||
CHARACTER(LEN=3)    :: CBEM              ! Building Energy model 'DEF' or 'BEM'       ! ||   ||
CHARACTER(LEN=12)   :: CCOOL_COIL        ! option for cooling device type             ! ||   ||
CHARACTER(LEN=6)    :: CHEAT_COIL        ! option for heating device type             ! ||   ||
REAL, DIMENSION(1)  :: ZF_WATER_COND     ! fraction of evaporation for the condensers ! ||   ||
CHARACTER(LEN=4), DIMENSION(1) :: HNATVENT                                            ! ||   ||
REAL, DIMENSION(1)  :: ZNATVENT          ! flag to describe surventilation system for ! ||   ||
!                                        ! i/o 0 for NONE, 1 for MANU and 2 for AUTO  ! ||   ||
REAL, DIMENSION(1)  :: ZAUX_MAX = 5. ! Auxiliar variable for autosize calcs (not used)! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZT_FLOOR ! Floor layers temperatures [K]         ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZT_MASS  ! Internal mass layers temperatures [K] ! ||   ||
REAL, DIMENSION(1) :: PFLOOR_HEIGHT      ! Floor height (m)                           ! ||   ||
REAL, DIMENSION(1) :: ZH_BLD_COOL        ! Sensible cooling energy demand             ! ||   ||
                                         ! of the building [W m-2(bld)]               ! ||   ||
REAL, DIMENSION(1) :: ZT_BLD_COOL        ! Total cooling energy demand                ! ||   ||
                                         ! of the building [W m-2(bld)]               ! ||   ||
REAL, DIMENSION(1) :: ZH_BLD_HEAT        ! Heating energy demand                      ! ||   ||
                                         ! of the building [W m-2(bld)]               ! ||   ||
REAL, DIMENSION(1) :: ZLE_BLD_COOL       ! Latent cooling energy demand               !\\     //
                                         ! of the building [W m-2(bld)]               ! \\   //
REAL, DIMENSION(1) :: ZLE_BLD_HEAT       ! Latent heating energy demand               !  \\ //
                                         ! of the building [W m-2(bld)]               !   \\/
REAL, DIMENSION(1) :: ZH_WASTE           ! Sensible waste heat from HVAC system       !
                                         ! [W m-2(tot)]                               ! ||   ||
REAL, DIMENSION(1) :: ZLE_WASTE          ! Latent waste heat from HVAC system         ! ||   ||
                                         ! [W m-2(tot)]                               ! ||   ||
REAL, DIMENSION(1) :: ZF_WASTE_CAN       ! fraction of waste heat released            ! ||   ||
!                                        ! into the canyon                            ! ||   ||
REAL, DIMENSION(1) :: ZHVAC_COOL         ! Energy consumption of the cooling system   ! ||   ||
                                         ! [W m-2(bld)]                               ! ||   ||
REAL, DIMENSION(1) :: ZHVAC_HEAT         ! Energy consumption of the heating system   ! ||   ||
                                         ! [W m-2(bld)]                               ! ||   ||
REAL, DIMENSION(1) :: ZHVAC_COOL_TOT     ! Energy consumption of the cooling system   ! ||   ||
                                         ! [W m-2(tot)]                               ! ||   ||
REAL, DIMENSION(1) :: ZHVAC_HEAT_TOT     ! Energy consumption of the heating system   ! ||   ||
                                         ! [W m-2(tot)]                               ! ||   ||
REAL, DIMENSION(1) :: ZQIN               ! Internal heat gains [W m-2(floor)]         ! ||   ||
REAL, DIMENSION(1) :: ZQIN_FRAD          ! Radiant fraction of internal heat gains    ! ||   ||
REAL, DIMENSION(1) :: ZQIN_FLAT          ! Latent franction of internal heat gains    ! ||   ||
REAL, DIMENSION(1) :: ZGR                ! Glazing ratio                              ! ||   ||
REAL, DIMENSION(1) :: ZEFF_HEAT          ! Efficiency of the heating system           ! ||   ||
REAL, DIMENSION(1) :: ZINF               ! Infiltration flow rate [AC/H]              ! ||   ||
REAL, DIMENSION(1) :: ZTCOOL_TARGET      ! Cooling setpoint of HVAC system [K]        ! ||   ||
REAL, DIMENSION(1) :: ZTHEAT_TARGET      ! Heating setpoint of HVAC system [K]        ! ||   ||
REAL, DIMENSION(1) :: ZCUR_QIN           ! Internal heat gains [W m-2(floor)]         ! ||   ||
REAL, DIMENSION(1) :: ZCUR_TCOOL_TARGET  ! Cooling setpoint of HVAC system [K]        ! ||   ||
REAL, DIMENSION(1) :: ZCUR_THEAT_TARGET  ! Heating setpoint of HVAC system [K]        ! ||   ||
REAL, DIMENSION(1) :: ZHR_TARGET         ! Relative humidity setpoint                 ! ||   ||
REAL, DIMENSION(1) :: ZT_WIN2            ! Indoor window temperature [K]              !\\     //
REAL, DIMENSION(1) :: ZQI_BLD            ! Indoor air specific humidity [kg kg-1]     ! \\   //
REAL, DIMENSION(1) :: ZV_VENT            ! Ventilation flow rate [AC/H]               !  \\ //
REAL, DIMENSION(1) :: ZCAP_SYS_HEAT      ! Capacity of the heating system             !   \\/
                                         ! [W m-2(bld)]                               !
REAL, DIMENSION(1) :: ZCAP_SYS_RAT       ! Rated capacity of the cooling system       ! ||   ||
                                         ! [W m-2(bld)]                               ! ||   ||
REAL, DIMENSION(1) :: ZT_ADP             ! Apparatus dewpoint temperature of the      ! ||   ||
                                         ! cooling coil [K]                           ! ||   ||
REAL, DIMENSION(1) :: ZM_SYS_RAT         ! Rated HVAC mass flow rate                  ! ||   ||
                                         ! [kg s-1 m-2(bld)]                          ! ||   ||
REAL, DIMENSION(1) :: ZCOP_RAT           ! Rated COP of the cooling system            ! ||   ||
REAL, DIMENSION(1) :: ZCAP_SYS           ! Actual capacity of the cooling system      ! ||   ||
                                         ! [W m-2(bld)]                               ! ||   ||
REAL, DIMENSION(1) :: ZM_SYS             ! Actual HVAC mass flow rate                 ! ||   ||
                                         ! [kg s-1 m-2(bld)]                          ! ||   ||
REAL, DIMENSION(1) :: ZCOP               ! COP of the cooling system                  ! ||   ||
REAL, DIMENSION(1) :: ZQ_SYS             ! Supply air specific humidity [kg kg-1]     ! ||   ||
REAL, DIMENSION(1) :: ZT_SYS             ! Supply air temperature [K]                 ! ||   ||
REAL, DIMENSION(1) :: ZTR_SW_WIN         ! Solar radiation transmitted throught       ! ||   ||
                                         ! windows [W m-2(bld)]                       ! ||   ||
REAL, DIMENSION(1) :: ZFAN_POWER         ! HVAC fan power                             ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZHC_FLOOR ! heat capacity for floor layers       ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZTC_FLOOR ! thermal conductivity for             ! ||   ||
                                               ! floor layers                         ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZD_FLOOR  ! depth of floor layers                ! ||   ||
                                                                                      ! ||   ||
REAL, DIMENSION(1) :: ZT_WIN1            ! outdoor window temperature [K]             ! ||   ||
REAL, DIMENSION(1) :: ZABS_SW_WIN        ! window absorbed shortwave radiation [W m-2]!\\     //
REAL, DIMENSION(1) :: ZABS_LW_WIN        ! absorbed infrared rad. [W m-2]             ! \\   //
REAL, DIMENSION(1) :: ZSHGC              ! window solar transmittance                 !  \\ //
REAL, DIMENSION(1) :: ZSHGC_SH           ! window + shading solar heat gain coef.     !   \\/
REAL, DIMENSION(1) :: ZUGG_WIN           ! window glass-to-glass U-factro [W m-2 K-1] !
REAL, DIMENSION(1) :: ZALB_WIN           ! window albedo                              ! ||   ||
REAL, DIMENSION(1) :: PU_WIN             ! window U-factor [K m W-2]                  ! ||   ||
REAL, DIMENSION(1) :: ZABS_WIN           ! window absortance                          ! ||   ||
REAL, DIMENSION(1) :: ZTRAN_WIN          ! window transmittance                       ! ||   ||
!                                                                                     ! ||   ||
! new argument for the UTCI calculation                                               ! ||   ||
REAL, DIMENSION(1)  :: ZEMIT_LW_GRND     ! LW flux emitted by the ground (W/m² ground)! ||   ||
REAL, DIMENSION(1)  :: ZEMIT_LW_FAC      ! LW flux emitted by the facade (W/m² ground)! ||   ||
REAL, DIMENSION(1)  :: ZT_RAD_IND        ! Indoor mean radiant temperature [K]        ! ||   ||
REAL, DIMENSION(1)  :: ZREF_SW_GRND      ! total solar rad reflected from ground      ! ||   ||
REAL, DIMENSION(1)  :: ZREF_SW_FAC       ! total solar rad reflected from facade      ! ||   ||
REAL, DIMENSION(1)  :: ZHU_BLD           ! Indoor relative humidity 0 < (-) < 1       ! ||   ||
!                                                                                     ! ||   ||
! solar panels                                                                        ! ||   ||
REAL, DIMENSION(1)  :: ZEMIS_PANEL       ! Emissivity of solar panel [-]              ! ||   ||
REAL, DIMENSION(1)  :: ZALB_PANEL        ! albedo of solar panel  [-]                 ! ||   ||
REAL, DIMENSION(1)  :: ZEFF_PANEL        ! Efficiency of solar panel [-]              ! ||   ||
REAL, DIMENSION(1)  :: ZTHER_PROD_PANEL  ! Thermal      Energy production             ! ||   ||
!                                        !     of solar panel on roofs (W/m2 panel)   ! ||   ||
REAL, DIMENSION(1)  :: ZPHOT_PROD_PANEL  ! Photovoltaic Energy production             ! ||   ||
!                                        !     of solar panel on roofs (W/m2 panel)   ! ||   ||
REAL, DIMENSION(1)  :: ZPROD_PANEL       ! Averaged     Energy production             ! ||   ||
!                                        !     of solar panel on roofs (W/m2 panel)   ! ||   ||
REAL, DIMENSION(1)  :: ZTHER_PROD_BLD    ! Thermal      Energy production             ! ||   ||
!                                        !     of solar panel on roofs (W/m2 bld  )   ! ||   ||
REAL, DIMENSION(1)  :: ZPHOT_PROD_BLD    ! Photovoltaic Energy production             ! ||   ||
!                                        !     of solar panel on roofs (W/m2 bld  )   !\\     //
REAL, DIMENSION(1)  :: ZPROD_BLD         ! Averaged     Energy production             ! \\   //
!                                        !     of solar panel on roofs (W/m2 bld  )   !  \\ //
REAL, DIMENSION(1)  :: ZTHER_PRODC_DAY=0.! Present day integrated thermal production  !   \\/
!                                        ! of energy (J/m2 panel). zero value at start!
REAL, DIMENSION(1)  :: ZH_PANEL          ! Sensible heat flux from solar panels       ! ||   ||
!                                        !     (W/m2 panel)                           ! ||   ||
REAL, DIMENSION(1)  :: ZRN_PANEL         ! Net radiation        of solar panel        ! ||   ||
!                                        !     (W/m2 panel)                           ! ||   ||
!                                                                                     ! ||   ||
REAL, DIMENSION(1)  :: ZRESIDENTIAL      ! Fraction of residential use in buildings(-)! ||   ||
REAL                :: ZDT_RES           ! target temperature change when unoccupied  ! ||   ||
!                                        ! (K) (residential buildings)                ! ||   ||
REAL                :: ZDT_OFF           ! target temperature change when unoccupied  ! ||   ||
!                                        ! (K) (office buildings)                     ! ||   ||
!                                                                                     ! ||   ||
! road watering                                                                       ! ||   ||
REAL, DIMENSION(1)  :: ZRD_START_MONTH   ! start month for watering of roads(included)! ||   ||
REAL, DIMENSION(1)  :: ZRD_END_MONTH     ! end   month for watering of roads(included)! ||   ||
REAL, DIMENSION(1)  :: ZRD_START_HOUR    ! start hour  for watering of roads(included)! ||   ||
REAL, DIMENSION(1)  :: ZRD_END_HOUR      ! end   hour  for watering of roads(excluded)! ||   ||
REAL, DIMENSION(1)  :: ZRD_24H_IRRIG     ! 24h quantity of water used                 ! ||   ||
!                                        ! for road watering (liter/m2)               ! ||   ||
REAL, DIMENSION(1)  :: ZIRRIG_ROAD       ! road irrigation during current time-step   ! ||   ||
!                                                                                     ! ||   ||
! new arguments for shading, schedule or natural ventilation                          ! ||   ||
LOGICAL,DIMENSION(1) :: LSHADE            ! Flag to use shading devices               ! ||   ||
REAL,   DIMENSION(1) :: ZSHADE            ! flag to activate shading devices          ! ||   ||
!                                         ! -> REAL for i/o 0. or 1                   ! ||   ||
LOGICAL,DIMENSION(1) :: GSHAD_DAY         ! has shading been necessary this day ?     ! ||   ||
LOGICAL,DIMENSION(1) :: GNATVENT_NIGHT    ! has natural ventilation been              ! ||   ||
!                                         ! necessary/possible this night ?           ! ||   ||
!                                                                                     ! ||   ||
REAL, DIMENSION(1)  :: ZN_FLOOR          ! Number of floors                           ! ||   ||
REAL, DIMENSION(1)  :: ZWALL_O_BLD       ! Wall area [m2_wall/m2_bld]                 ! ||   ||
REAL, DIMENSION(1)  :: ZGLAZ_O_BLD       ! Window area [m2_win/m2_bld]                ! ||   ||
REAL, DIMENSION(1)  :: ZMASS_O_BLD       ! Mass area [m2_mass/m2_bld]                 ! ||   ||
REAL, DIMENSION(1)  :: ZFLOOR_HW_RATIO   ! H/W ratio of 1 floor level                 ! ||   ||
REAL, DIMENSION(1)  :: ZF_FLOOR_MASS     ! View factor floor-mass                     ! ||   ||
REAL, DIMENSION(1)  :: ZF_FLOOR_WALL     ! View factor floor-wall                     !\\     //
REAL, DIMENSION(1)  :: ZF_FLOOR_WIN      ! View factor floor-window                   ! \\   //
REAL, DIMENSION(1)  :: ZF_FLOOR_ROOF     ! View factor floor-roof                     !  \\ //
REAL, DIMENSION(1)  :: ZF_WALL_FLOOR     ! View factor wall-floor                     !   \\/
REAL, DIMENSION(1)  :: ZF_WALL_MASS      ! View factor wall-mass                      !
REAL, DIMENSION(1)  :: ZF_WALL_WIN       ! View factor wall-win                       ! ||   ||
REAL, DIMENSION(1)  :: ZF_WIN_FLOOR      ! View factor win-floor                      ! ||   ||
REAL, DIMENSION(1)  :: ZF_WIN_MASS       ! View factor win-mass                       ! ||   ||
REAL, DIMENSION(1)  :: ZF_WIN_WALL       ! View factor win-wall                       ! ||   ||
REAL, DIMENSION(1)  :: ZF_MASS_FLOOR     ! View factor mass-floor                     ! ||   ||
REAL, DIMENSION(1)  :: ZF_MASS_WALL      ! View factor mass-wall                      ! ||   ||
REAL, DIMENSION(1)  :: ZF_MASS_WIN       ! View factor mass-window                    ! ||   ||
LOGICAL             :: LCANOPY           ! is canopy active ?                         ! ||   ||
CHARACTER(LEN=5)    :: CCH_BEM           ! TEB option for building outside conv. coef ! ||   ||
REAL, DIMENSION(1)  :: ZROUGH_ROOF       ! roof roughness coef.                       ! ||   ||
REAL, DIMENSION(1)  :: ZROUGH_WALL       ! wall roughness coef.                       ! ||   ||
REAL, DIMENSION(1)  :: ZF_WIN_WIN        ! indoor win to win view factor              ! ||   ||
                                                                                      ! ||   ||
! Average urban fluxes variables                                                      ! ||   ||
REAL,DIMENSION(1)  :: ZTS_TOWN          ! town surface temperature                    ! ||   ||
REAL,DIMENSION(1)  :: ZEMIS_TOWN        ! town equivalent emissivity                  ! ||   ||
REAL,DIMENSION(1)  :: ZALB_TOWN         ! town eqivalent albedo                       ! ||   ||
REAL,DIMENSION(1)  :: ZQ_TOWN           ! town eqivalent specific humidity            ! ||   ||
REAL,DIMENSION(1)  :: ZESNOW_ROOF  = 1.0! snow roof emissivity                        ! ||   ||
REAL,DIMENSION(1)  :: ZABS_LW_SNOW_ROOF ! abs. LW rad. by snow                        ! ||   ||
REAL,DIMENSION(1)  :: ZABS_LW_SNOW_ROAD ! abs. LW rad. by snow                        ! ||   ||
REAL,DIMENSION(1)  :: ZRN_STRLROOF      ! net radiation over structural roof          !
REAL,DIMENSION(1)  :: ZH_STRLROOF       ! sensible heat flux over structural roof     ! ||   ||
REAL,DIMENSION(1)  :: ZLE_STRLROOF      ! latent heat flux over structural roof       ! ||   ||
REAL,DIMENSION(1)  :: ZGFLUX_STRLROOF   ! flux through the structural roof            ! ||   ||
REAL,DIMENSION(1)  :: ZRUNOFF_STRLROOF  ! water runoff on the structural roof         ! ||   ||
REAL,DIMENSION(1)  :: ZLEW_ROOF         ! latent heat flux of snowfree roof           ! ||   ||
REAL,DIMENSION(1)  :: ZLESNOW_ROOF      ! latent heat flux over snow                  ! ||   ||
REAL,DIMENSION(1)  :: ZLEW_ROAD         ! latent heat flux of snowfree road           ! ||   ||
REAL,DIMENSION(1)  :: ZRN_GRND          ! net radiation over ground                   ! ||   ||
REAL,DIMENSION(1)  :: ZH_GRND           ! sensible heat flux over ground              ! ||   ||
REAL,DIMENSION(1)  :: ZLE_GRND          ! latent heat flux over ground                ! ||   ||
REAL,DIMENSION(1)  :: ZGFLUX_GRND       ! flux through the ground                     ! ||   ||
REAL,DIMENSION(1)  :: ZRN_TOWN          ! net radiation over town                     ! ||   ||
REAL,DIMENSION(1)  :: ZH_TOWN           ! sensible heat flux over town                ! ||   ||
REAL,DIMENSION(1)  :: ZLE_TOWN          ! latent heat flux over town                  ! ||   ||
REAL,DIMENSION(1)  :: ZGFLUX_TOWN       ! flux through the ground for town            ! ||   ||
REAL,DIMENSION(1)  :: ZEVAP_TOWN        ! evaporation (kg/m2/s)                       ! ||   ||
! Atmospheric Forcing variables                                                       ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZTA    ! air temperature forcing (K)             ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZQA    ! air humidity forcing (kg/m3)            ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZWIND  ! wind speed (m/s)                        ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZSCA_SW! diffuse solar radiation (on hor surf)   ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZDIR_SW! direct  solar radiation (on hor surf)   ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZLW    ! longwave radiation (on horizontal surf) ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZSNOW  ! snow precipitation  (kg/m2/s)           ! ||   ||
REAL, DIMENSION(:,:), ALLOCATABLE :: ZRAIN  ! liquid precipitation  (kg/m2/s)         !\\     //
REAL, DIMENSION(:,:), ALLOCATABLE :: ZPS    ! pressure at forcing level  (Pa)         ! \\   //
REAL, DIMENSION(:,:), ALLOCATABLE :: ZCO2   ! CO2 concentration in the air  (kg/m3)   !  \\ //
REAL, DIMENSION(:,:), ALLOCATABLE :: ZDIR   ! wind direction                          !   \\/
REAL, DIMENSION(1)  :: ZCOEF                ! work array                              !
REAL, DIMENSION(1)  :: ZF1_o_B              ! Coefficient for sky model               ! ||   ||
REAL, DIMENSION(1,1):: ZTDIR_SW             ! total direct SW                         ! ||   ||
REAL, DIMENSION(1,1):: ZTSCA_SW             ! total diffuse SW                        ! ||   ||
REAL                :: ZTIME_BEG            ! Time at beginning of time step          ! ||   ||
REAL                :: ZTIME                ! Time at end       of time step          ! ||   ||
! -----------------------------------------------------------                         ! ||   ||
! Outputs                                                                             ! ||   ||
! -----------------------------------------------------------                         ! ||   ||
!                                                                                     ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: T_ROOF1 = 'output/T_ROOF1.txt'                   ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: T_CANYON = 'output/T_CANYON.txt'                 ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: T_ROAD1 = 'output/T_ROAD1.txt'                   ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: T_FLOOR1 = 'output/T_FLOOR1.txt'                   ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: T_MASS1 = 'output/T_MASS1.txt'                   ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: T_WALLA1= 'output/T_WALLA1.txt'                  ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: T_WALLB1= 'output/T_WALLB1.txt'                  ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: TI_BLD = 'output/TI_BLD.txt'                     ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: QI_BLD = 'output/QI_BLD.txt'                     ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: Q_CANYON = 'output/Q_CANYON.txt'                 ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: U_CANYON = 'output/U_CANYON.txt'                 ! ||   ||
CHARACTER(LEN=*), PARAMETER       :: H_TOWN = 'output/H_TOWN.txt'                     !\\     //
CHARACTER(LEN=*), PARAMETER       :: LE_TOWN = 'output/LE_TOWN.txt'                   ! \\   //
CHARACTER(LEN=*), PARAMETER       :: RN_TOWN = 'output/RN_TOWN.txt'                   !  \\ //
CHARACTER(LEN=*), PARAMETER       :: HVAC_COOL = 'output/HVAC_COOL.txt'               !   \\/
CHARACTER(LEN=*), PARAMETER       :: HVAC_HEAT = 'output/HVAC_HEAT.txt'               !
CHARACTER(LEN=*), PARAMETER       :: COP = 'output/COP.txt'
!
CHARACTER(LEN=*), PARAMETER       :: DIR_CANYON = 'output/DIR_CANYON.txt'
CHARACTER(LEN=*), PARAMETER       :: ALB_TOWN = 'output/ALB_TOWN.txt'
CHARACTER(LEN=*), PARAMETER       :: EMIS_TOWN = 'output/EMIS_TOWN.txt'
CHARACTER(LEN=*), PARAMETER       :: EVAP_TOWN = 'output/EVAP_TOWN.txt'
CHARACTER(LEN=*), PARAMETER       :: GFLUX_TOWN = 'output/GFLUX_TOWN.txt'
CHARACTER(LEN=*), PARAMETER       :: TS_TOWN = 'output/TS_TOWN.txt'
CHARACTER(LEN=*), PARAMETER       :: Q_TOWN = 'output/Q_TOWN.txt'
CHARACTER(LEN=*), PARAMETER       :: USTAR_TOWN = 'output/USTAR_TOWN.txt'
CHARACTER(LEN=*), PARAMETER       :: THER_PROD_PANEL = 'output/THER_PROD_PANEL.txt'
CHARACTER(LEN=*), PARAMETER       :: PHOT_PROD_PANEL = 'output/PHOT_PROD_PANEL.txt'
CHARACTER(LEN=*), PARAMETER       :: QF_TOWN = 'output/QF_TOWN.txt'
CHARACTER(LEN=*), PARAMETER       :: DQS_TOWN = 'output/DQS_TOWN.txt'
!
CHARACTER(LEN=*), PARAMETER       :: SWD = 'output/SWD.txt'
CHARACTER(LEN=*), PARAMETER       :: SWU = 'output/SWU.txt'
CHARACTER(LEN=*), PARAMETER       :: LWD = 'output/LWD.txt'
CHARACTER(LEN=*), PARAMETER       :: LWU = 'output/LWU.txt'
!
CHARACTER(LEN=*), PARAMETER       :: Forc_TA    = 'output/Forc_TA.txt'
CHARACTER(LEN=*), PARAMETER       :: Forc_PS    = 'output/Forc_PS.txt'
CHARACTER(LEN=*), PARAMETER       :: Forc_QA    = 'output/Forc_QA.txt'
CHARACTER(LEN=*), PARAMETER       :: Forc_WIND  = 'output/Forc_WIND.txt'
CHARACTER(LEN=*), PARAMETER       :: Forc_RAIN  = 'output/Forc_RAIN.txt'
CHARACTER(LEN=*), PARAMETER       :: Forc_SNOW  = 'output/Forc_SNOW.txt'

INTEGER                           :: ID_FORC
REAL, DIMENSION(1) :: ZSUMZEN
REAL, DIMENSION(1) :: ZSW
REAL                 :: ZBEGIN_TRAFFIC_TIME ! start traffic time (solar time, s)
REAL                 :: ZEND_TRAFFIC_TIME   ! end traffic time   (solar time, s)
INTEGER                           :: IYEAR2              ! current year at end of timestep(UTC)
INTEGER                           :: IMONTH2             ! current month at end of timestep(UTC)
INTEGER                           :: IDAY2               ! current day at end of timestep(UTC)
REAL                              :: ZTIME2              ! current time since start of the day at end of timestep (s)

logical :: exist ! TODO: testing remove
LOGICAL :: NO_OUTPUT ! Whether to output results to file

!===========================================================================
! Read from namelist file after default values are set.
!===========================================================================

OPEN(UNIT=99, FILE='input.nml', STATUS='old')
READ(99, NML = dimensions)

ALLOCATE(ZHC_ROOF    (1,NROOF_LAYER))
ALLOCATE(ZTC_ROOF    (1,NROOF_LAYER))
ALLOCATE(ZD_ROOF     (1,NROOF_LAYER))
ALLOCATE(ZT_ROOF     (1,NROOF_LAYER))

ALLOCATE(ZHC_ROAD    (1,NROAD_LAYER))
ALLOCATE(ZTC_ROAD    (1,NROAD_LAYER))
ALLOCATE(ZD_ROAD     (1,NROAD_LAYER))
ALLOCATE(ZT_ROAD     (1,NROAD_LAYER))

ALLOCATE(ZHC_WALL    (1,NWALL_LAYER))
ALLOCATE(ZTC_WALL    (1,NWALL_LAYER))
ALLOCATE(ZD_WALL     (1,NWALL_LAYER))
ALLOCATE(ZT_WALL   (1,NWALL_LAYER))
ALLOCATE(ZT_WALL_B   (1,NWALL_LAYER))

ALLOCATE(ZHC_FLOOR   (1,NFLOOR_LAYER))
ALLOCATE(ZTC_FLOOR   (1,NFLOOR_LAYER))
ALLOCATE(ZD_FLOOR    (1,NFLOOR_LAYER))
ALLOCATE(ZT_FLOOR    (1,NFLOOR_LAYER))
ALLOCATE(ZT_MASS     (1,NFLOOR_LAYER))

READ(99, NML = parameters)
CLOSE(99)

!===========================================================================
!===========================================================================
!===========================================================================
!===========================================================================
!===========================================================================
!===========================================================================
!                     *** DO NOT CHANGE VALUES BELOW ***
!===========================================================================
!===========================================================================
!===========================================================================
!===========================================================================
!===========================================================================
!===========================================================================
! -----------------------------------------------------------
! Inizializations (SYSTEM)
! -----------------------------------------------------------

ZT_WALL_B = ZT_WALL    ! wall layers temperatures
!

GSHAD_DAY = .FALSE. ! has shading been necessary this day ?
GNATVENT_NIGHT =.FALSE. ! has natural ventilation been necessary/possible this night ?

! irrigation not supported currently
LPAR_RD_IRRIG = .FALSE.
ZRD_START_MONTH = 6
ZRD_END_MONTH = 6
ZRD_START_HOUR = 6
ZRD_END_HOUR = 6
ZRD_24H_IRRIG = 0

IF (ZNATVENT(1) >= 0.0 .AND. ZNATVENT(1) < 0.5) THEN
  HNATVENT = 'NONE'
ELSEIF (ZNATVENT(1) >= 0.5 .AND. ZNATVENT(1) < 1.5) THEN
  HNATVENT = 'MANU'
ELSEIF (ZNATVENT(1) >= 1.5 .AND. ZNATVENT(1) <= 2.5) THEN
  HNATVENT = 'AUTO'        
ELSEIF (ZNATVENT(1) >= 2.5 .AND. ZNATVENT(1) <= 3.5) THEN
  HNATVENT = 'MECH'        
ELSE
  HNATVENT = 'NONE'        
ENDIF

IF (ZSHADE(1) >= 0.0 .AND. ZSHADE(1) < 0.5) THEN
  LSHADE = .FALSE.
ELSEIF (ZSHADE(1) >= 0.5 .AND. ZSHADE(1) <= 1.0) THEN
  LSHADE = .TRUE.
ELSE
  LSHADE = .FALSE.
ENDIF

!
! coherence check
IF ( (.NOT. LGREENROOF) .AND. ZFRAC_GR(1)>0.) THEN
  print*, 'Greenroofs option   is not activated but a non-zero greenroof fraction is given'
  STOP
END IF
IF ( (.NOT. LGARDEN) .AND. ZGARDEN(1)>0.) THEN
  print*, 'Garden     option   is not activated but a non-zero garden    fraction is given'
  STOP
END IF
IF ( ZBLD(1)+ZGARDEN(1)>=1.) THEN
  print*, 'The sum of garden and building fraction is larger than one, so road fraction is negative. Please check their values.'
  STOP
END IF
IF ( (.NOT. LSOLAR_PANEL) .AND. ZFRAC_PANEL(1)>0.) THEN
  print*, 'Solar panels option is not activated but a non-zero solar panels fraction is given'
  STOP
END IF
IF ( (.NOT. CBEM=='BEM') .AND. ZGR(1)>0.) THEN
  print*, 'Building Energy Module (BEM) is not activated but a non-zero glazing ratio is given'
  STOP
END IF
!
!
! multi layer option
LCANOPY= .FALSE.  ! is canopy active ?  ** DO NOT CHANGE **
!
! initialization of physical constants
!
CALL INI_CSTS
!
!CALL INIT_SURFCONSPHY
!
CQSAT='NEW' ! saturation is computed relative to water above 0°C, and relative to ice below 0°C
!
!* various thresholds
!
XCISMIN = 0.5     ! minimum wind shear
XVMODMIN = 0.5    ! minimum wind speed
LALDTHRES = .FALSE.    ! activate aladin threshold for wind
XRIMAX = 0.2 ! Maximum richardson number for exchange coefficients computations
!
!* Open atmospheric forcing files
!
CALL OPEN_CLOSE_BIN_ASC_FORC('OPEN ','ASCII ','R')
!
! allocation of variables
!
CALL OL_ALLOC_ATM(1,1,1) ! INI, IBANDS, ISCAL
!
ZTIME = ZTIME_START
!
! sun position at run start
!
CALL SUNPOS(IYEAR, IMONTH, IDAY, ZTIME, ZLON, ZLAT, XTSUN, XZENITH, XAZIM)
!
! allocate local atmospheric variables
ALLOCATE(ZTA    (1,2))
ALLOCATE(ZQA    (1,2))
ALLOCATE(ZWIND  (1,2))
ALLOCATE(ZDIR_SW(1,2))
ALLOCATE(ZSCA_SW(1,2))
ALLOCATE(ZLW    (1,2))
ALLOCATE(ZSNOW  (1,2))
ALLOCATE(ZRAIN  (1,2))
ALLOCATE(ZPS    (1,2))
ALLOCATE(ZCO2   (1,2))
ALLOCATE(ZDIR   (1,2))
!
!* reads atmospheric forcing for first time-step
!
CALL OL_READ_ATM('ASCII ', 'ASCII ', 1,    &
                    ZTA,ZQA,ZWIND,ZDIR_SW,ZSCA_SW,ZLW,ZSNOW,ZRAIN,ZPS,&
                    ZCO2,ZDIR,.false. )
XCO2(:)  = ZCO2(:,1)
XRHOA(:) = ZPS(:,1) / ( ZTA(:,1)*XRD * ( 1.+((XRV/XRD)-1.)*ZQA(:,1) ) + XZREF(:)*XG )
!
! -----------------------------------------------------------
! Geometric parameters
! -----------------------------------------------------------
!
ZROAD         = (1. - ZBLD - ZGARDEN)
XZREF         = ZZREF
XUREF         = ZZREF
ZCAN_HW_RATIO = 0.5 * ZWALL_O_HOR / (1.-ZBLD)
ZSVF_ROAD     = (SQRT(ZCAN_HW_RATIO**2+1.) - ZCAN_HW_RATIO)
ZSVF_GARDEN   = ZSVF_ROAD
ZSVF_WALL     =  0.5*(ZCAN_HW_RATIO+1.-SQRT(ZCAN_HW_RATIO**2+1.))/ZCAN_HW_RATIO
ZZ_LOWCAN     = ZBLD_HEIGHT / 2
ZTOTS_O_HORS = 1. + ZWALL_O_HOR
ZROOF_FRAC   = ZBLD        / ZTOTS_O_HORS
ZWALL_FRAC   = ZWALL_O_HOR / ZTOTS_O_HORS
ZROAD_FRAC   = ZROAD       / ZTOTS_O_HORS
ZGARDEN_FRAC = ZGARDEN     / ZTOTS_O_HORS
ZWALL_O_GRND = ZWALL_FRAC  / (ZROAD_FRAC+ZGARDEN_FRAC)
ZROAD_O_GRND   = ZROAD / (ZROAD + ZGARDEN)
ZGARDEN_O_GRND = ZGARDEN / (ZROAD + ZGARDEN)
!
CALL BEM_MORPHO_STRUCT(ZBLD, ZWALL_O_HOR, ZBLD_HEIGHT, PFLOOR_HEIGHT,                  &
                      ZGR, ZN_FLOOR, ZWALL_O_BLD, ZGLAZ_O_BLD, ZMASS_O_BLD,     &
                      ZFLOOR_HW_RATIO,                                          &
                      ZF_FLOOR_MASS, ZF_FLOOR_WALL, ZF_FLOOR_WIN,               &
                      ZF_FLOOR_ROOF, ZF_WALL_FLOOR, ZF_WALL_MASS,               &
                      ZF_WALL_WIN, ZF_WIN_FLOOR, ZF_WIN_MASS, ZF_WIN_WALL,      &
                      ZF_MASS_FLOOR, ZF_MASS_WALL, ZF_MASS_WIN, ZF_WASTE_CAN,   &
                      ZF_WIN_WIN)
!
! -----------------------------------------------------------
! Window characteristics
! -----------------------------------------------------------
!
CALL WINDOW_DATA_STRUCT(1, ZSHGC, PU_WIN, ZALB_WIN, ZABS_WIN, ZUGG_WIN, ZTRAN_WIN)
!
! -----------------------------------------------------------
! Default at first time-step : no snow
! -----------------------------------------------------------
!
ZWSNOW_ROOF = 0.
ZTSNOW_ROOF = XUNDEF
ZRSNOW_ROOF = XUNDEF
ZASNOW_ROOF = XUNDEF
ZESNOW_ROOF = XUNDEF
ZTSSNOW_ROOF= XUNDEF
ZWSNOW_ROAD = 0.
ZTSNOW_ROAD = XUNDEF
ZRSNOW_ROAD = XUNDEF
ZASNOW_ROAD = XUNDEF
ZESNOW_ROAD = XUNDEF
ZTSSNOW_ROAD= XUNDEF
! -----------------------------------------------------------
! Outputs
! -----------------------------------------------------------
!
IF (.NOT. NO_OUTPUT) THEN
  OPEN(UNIT=13, FILE = T_ROOF1,   ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=14, FILE = T_CANYON,  ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=15, FILE = T_ROAD1,   ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=16, FILE = T_WALLA1,  ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=17, FILE = T_WALLB1,  ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=18, FILE = TI_BLD,    ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=19, FILE = Q_CANYON,  ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=21, FILE = U_CANYON,  ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=22, FILE = H_TOWN,    ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=23, FILE = LE_TOWN,   ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=24, FILE = RN_TOWN,   ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=25, FILE = HVAC_COOL, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=26, FILE = HVAC_HEAT, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=37, FILE = COP,       ACCESS = 'APPEND',STATUS = 'REPLACE')
  !
  OPEN(UNIT=27, FILE = DIR_CANYON, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=28, FILE = ALB_TOWN,   ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=29, FILE = EMIS_TOWN,  ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=30, FILE = EVAP_TOWN,  ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=31, FILE = GFLUX_TOWN, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=32, FILE = TS_TOWN,    ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=33, FILE = Q_TOWN,     ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=34, FILE = USTAR_TOWN, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=35, FILE = THER_PROD_PANEL, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=36, FILE = PHOT_PROD_PANEL, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=38, FILE = QF_TOWN, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=39, FILE = DQS_TOWN, ACCESS = 'APPEND',STATUS = 'REPLACE')
  !
  OPEN(UNIT=40, FILE = SWD, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=41, FILE = SWU, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=42, FILE = LWD, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=43, FILE = LWU, ACCESS = 'APPEND',STATUS = 'REPLACE')

  OPEN(UNIT=50, FILE = Forc_TA, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=51, FILE = Forc_PS, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=52, FILE = Forc_QA, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=53, FILE = Forc_WIND, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=54, FILE = Forc_RAIN, ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=55, FILE = Forc_SNOW, ACCESS = 'APPEND',STATUS = 'REPLACE')

  OPEN(UNIT=56, FILE = T_FLOOR1,   ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=57, FILE = T_MASS1,   ACCESS = 'APPEND',STATUS = 'REPLACE')
  OPEN(UNIT=58, FILE = QI_BLD,   ACCESS = 'APPEND',STATUS = 'REPLACE')
END IF
!
! -----------------------------------------------------------
! Temporal loops
! -----------------------------------------------------------
!
DO JFORC_STEP= 1,INB_STEP_ATM
   WRITE(*,FMT='(I5,A1,I5)') JFORC_STEP,'/',INB_STEP_ATM
   !
   ZTS_ROOF   = 0.
   ZTS_ROAD   = 0.
   ZTS_WALL_A = 0.
   ZTS_WALL_B = 0.
   ! read Forcing
   CALL OL_READ_ATM('ASCII ', 'ASCII ', JFORC_STEP,    &
                    ZTA,ZQA,ZWIND,ZDIR_SW,ZSCA_SW,ZLW,ZSNOW,ZRAIN,ZPS,&
                    ZCO2,ZDIR,.false. )
   !
  !COMPUTE SUM ZENITH angle between 2 timestepA
  ZSUMZEN(:)=0.0
  DO JSURF_STEP = 1,INB_ATM
    IDAY2  = IDAY
    ZTIME2 = ZTIME + (JSURF_STEP-1.)*XTSTEP_SURF
    IF (ZTIME2>86400.) THEN
      ZTIME2 = ZTIME2-86400
      IDAY2  = IDAY+1
    ENDIF
    CALL SUNPOS(IYEAR, IMONTH, IDAY2, ZTIME+(JSURF_STEP-1.)*XTSTEP_SURF, &
                ZLON, ZLAT, XTSUN, XZENITH, XAZIM)
    !
    ZSUMZEN(:)= ZSUMZEN(:) + MAX(COS(XZENITH(:)+0.1),0.)/(INB_ATM*1.0)
    !
  ENDDO
  WHERE ( ZSUMZEN<0.01 ) ZSUMZEN = 0.0

   !
   DO JSURF_STEP=1,INB_ATM
      !
      ! time interpolation of the forcing
      !
      !
      CALL SUNPOS(IYEAR, IMONTH, IDAY, ZTIME, ZLON, ZLAT, XTSUN, XZENITH, XAZIM)
      IYEAR2 = IYEAR
      IMONTH2= IMONTH
      IDAY2  = IDAY
      ZTIME2 = ZTIME+XTSTEP_SURF
      CALL ADD_FORECAST_TO_DATE_SURF(IYEAR2, IMONTH2, IDAY2, ZTIME2)
      CALL SUNPOS(IYEAR2, IMONTH2, IDAY2, ZTIME2, ZLON, ZLAT, XTSUN, XZENITH2, XAZIM)
       !
       TPTIME%TIME= ZTIME
       TPTIME%TDATE%YEAR =IYEAR
       TPTIME%TDATE%MONTH=IMONTH
       TPTIME%TDATE%DAY  =IDAY

      !
      !interpolation between beginning and end of current forcing time step
       ID_FORC = 1
    CALL OL_TIME_INTERP_ATM(JSURF_STEP,INB_ATM,                      &
                            ZTA(:,ID_FORC),ZTA(:,ID_FORC+1),         &
                            ZQA(:,ID_FORC),ZQA(:,ID_FORC+1),         &
                            ZWIND(:,ID_FORC),ZWIND(:,ID_FORC+1),     &
                            ZDIR_SW(:,ID_FORC),ZDIR_SW(:,ID_FORC+1), &
                            ZSCA_SW(:,ID_FORC),ZSCA_SW(:,ID_FORC+1), &
                            ZLW(:,ID_FORC),ZLW(:,ID_FORC+1),         &
                            ZSNOW(:,ID_FORC+1),ZRAIN(:,ID_FORC+1),   &
                            ZPS(:,ID_FORC),ZPS(:,ID_FORC+1),         &
                            ZCO2(:,ID_FORC),ZCO2(:,ID_FORC+1),       &
                            ZDIR(:,ID_FORC),ZDIR(:,ID_FORC+1),       &
                            XZENITH+0.1,ZSUMZEN                      )

      ZSW(:) = 0.
      DO JLOOP=1,SIZE(XDIR_SW,2)
        ZSW(:) = ZSW(:) + XDIR_SW(:,JLOOP) + XSCA_SW(:,JLOOP)
      END DO
      WHERE (ZSW(:)>0.)
        XZENITH  = MIN (XZENITH ,XPI/2.-0.01)
        XZENITH2 = MIN (XZENITH2,XPI/2.-0.01)
      ELSEWHERE
        XZENITH  = MAX (XZENITH ,XPI/2.)
        XZENITH2 = MAX (XZENITH2,XPI/2.)
      END WHERE
    
      ! updates time
      ZTIMEC= ZTIMEC+XTSTEP_SURF

       ! Exner functions
       !
       ZEXNS = (XPS/XP00)**(XRD/XCPD)
       ZEXNA = (XPA/XP00)**(XRD/XCPD)
       !
       ! specific humidity (conversion from kg/m3 to kg/kg)
       !
       ZQA_KGKG(:) = XQA(:) / XRHOA(:)

       ZTDIR_SW = XDIR_SW(1,1)
       ZTSCA_SW = XSCA_SW(1,1)
       KSW = 1  ! only one spectral band here
       !
       ! Sky model for diffuse radiation
       !
       !add directionnal contrib from scattered radiation
       CALL CIRCUMSOLAR_RAD(XDIR_SW(:,1), XSCA_SW(:,1), XZENITH, ZF1_o_B)
       ZTDIR_SW(:,1) = XDIR_SW(:,1) + XSCA_SW(:,1) * ZF1_o_B
       ZTSCA_SW(:,1) = XSCA_SW(:,1) * (1. - ZF1_o_B)


       ZBEGIN_TRAFFIC_TIME = 21600.
       ZEND_TRAFFIC_TIME   = 64800.
       !
       WHERE( XTSUN>ZBEGIN_TRAFFIC_TIME  .AND.  XTSUN<ZEND_TRAFFIC_TIME  )
         XH_TRAFFIC  (:) = ZH_TRAFFIC(:)
         XLE_TRAFFIC (:) = ZLE_TRAFFIC(:)
       ELSEWHERE
         XH_TRAFFIC  (:) = 0.
         XLE_TRAFFIC (:) = 0.   
       END WHERE

       !
       !
       ! Wind speed
       ZVMOD = SQRT(XU**2+XV**2)
       ZWAKE = 1. + (2./XPI-1.) * 2. * (ZCAN_HW_RATIO-0.5)
       ZWAKE = MAX(MIN(ZWAKE,1.),2./XPI)
       ZU_CANYON = ZWAKE * EXP(-ZCAN_HW_RATIO/4.) * ZVMOD     &
              * LOG( (           2.* ZBLD_HEIGHT/3.) / ZZ0)   &
              / LOG( (ZZREF + 2.* ZBLD_HEIGHT/3.) / ZZ0)
       ZU_LOWCAN = ZU_CANYON
       ZT_LOWCAN = ZT_CANYON
       ZQ_LOWCAN = ZQ_CANYON
       !
       ZPEW_A_COEF        = 0.
       ZPEW_A_COEF_LOWCAN = 0.
       ZPEW_B_COEF        = ZVMOD
       ZPEW_B_COEF_LOWCAN = ZU_LOWCAN

!*****************************************************************************
!*****************************************************************************
!                  Call of physical routines of TEB is here                  !
!*****************************************************************************
!*****************************************************************************

    CALL TEB_GARDEN_STRUCT (LGARDEN, LGREENROOF, LSOLAR_PANEL,                &
                     HZ0H, HIMPLICIT_WIND, HROAD_DIR, HWALL_OPT, TPTIME,      &
                     XTSUN, ZT_CANYON, ZQ_CANYON, ZU_CANYON,                  &
                     ZT_LOWCAN, ZQ_LOWCAN, ZU_LOWCAN, ZZ_LOWCAN,              &
                     ZTI_BLD,                                                 &
                     ZT_ROOF, ZT_ROAD, ZT_WALL, ZT_WALL_B,                  &
                     ZWS_ROOF,ZWS_ROAD,                                       &
                     HSNOW_ROOF,                                              &
                     ZWSNOW_ROOF, ZTSNOW_ROOF, ZRSNOW_ROOF, ZASNOW_ROOF,      &
                     ZTSSNOW_ROOF, ZESNOW_ROOF,                               &
                     HSNOW_ROAD,                                              &
                     ZWSNOW_ROAD, ZTSNOW_ROAD, ZRSNOW_ROAD, ZASNOW_ROAD,      &
                     ZTSSNOW_ROAD, ZESNOW_ROAD,                               &
                     ZPEW_A_COEF, ZPEW_B_COEF,                                &
                     ZPEW_A_COEF_LOWCAN, ZPEW_B_COEF_LOWCAN,                  &
                     XPS, XPA, ZEXNS, ZEXNA,                                  &
                     XTA, ZQA_KGKG, XRHOA, XCO2,                              &
                     XLW, ZTDIR_SW, ZTSCA_SW, XSW_BANDS, KSW,                 &
                     XZENITH, XAZIM,                                          &
                     XRAIN, XSNOW,                                            &
                     ZZREF, ZZREF, ZVMOD,                                     &
                     XH_TRAFFIC, XLE_TRAFFIC, ZH_INDUSTRY, ZLE_INDUSTRY,      &
                     XTSTEP_SURF,                                             &
                     ZZ0,                                                     &
                     ZBLD,ZGARDEN,ZROAD_DIR,ZROAD,ZFRAC_GR,                   &
                     ZBLD_HEIGHT,ZWALL_O_HOR,ZCAN_HW_RATIO,                   &
                     ZROAD_O_GRND, ZGARDEN_O_GRND, ZWALL_O_GRND,              &
                     ZALB_ROOF, ZEMIS_ROOF,                                   &
                     ZHC_ROOF,ZTC_ROOF,ZD_ROOF,                               &
                     ZALB_ROAD, ZEMIS_ROAD, ZSVF_ROAD,                        &
                     ZHC_ROAD,ZTC_ROAD,ZD_ROAD,                               &
                     ZALB_WALL, ZEMIS_WALL, ZSVF_WALL,                        &
                     ZSVF_GARDEN,                                             &
                     ZHC_WALL,ZTC_WALL,ZD_WALL,                               &
                     ZRN_ROOF, ZH_ROOF, ZLE_ROOF, ZLEW_ROOF, ZGFLUX_ROOF,     &
                     ZRUNOFF_ROOF,                                            &
                     ZRN_ROAD, ZH_ROAD, ZLE_ROAD, ZLEW_ROAD, ZGFLUX_ROAD,     &
                     ZRUNOFF_ROAD,                                            &
                     ZRN_WALL_A, ZH_WALL_A, ZLE_WALL_A, ZGFLUX_WALL_A,        &
                     ZRN_WALL_B, ZH_WALL_B, ZLE_WALL_B, ZGFLUX_WALL_B,        &
                     ZRN_STRLROOF,ZH_STRLROOF,ZLE_STRLROOF, ZGFLUX_STRLROOF,  &
                     ZRUNOFF_STRLROOF,                                        &
                     ZRN_BLT,ZH_BLT,ZLE_BLT, ZGFLUX_BLT,                      &
                     ZRNSNOW_ROOF, ZHSNOW_ROOF, ZLESNOW_ROOF, ZGSNOW_ROOF,    &
                     ZMELT_ROOF,                                              &
                     ZRNSNOW_ROAD, ZHSNOW_ROAD, ZLESNOW_ROAD, ZGSNOW_ROAD,    &
                     ZMELT_ROAD,                                              &
                     ZRN_GRND, ZH_GRND, ZLE_GRND, ZGFLUX_GRND,                &
                     ZRN_TOWN, ZH_TOWN, ZLE_TOWN, ZGFLUX_TOWN, ZEVAP_TOWN,    &
                     ZRUNOFF_TOWN, ZSFCO2,                                    &
                     ZUW_GRND, ZUW_ROOF, ZDUWDU_GRND, ZDUWDU_ROOF,            &
                     ZUSTAR_TOWN, ZCD, ZCDN, ZCH_TOWN, ZRI_TOWN,              &
                     ZTS_TOWN, ZEMIS_TOWN, ZDIR_ALB_TOWN, ZSCA_ALB_TOWN,      &
                     ZRESA_TOWN, ZDQS_TOWN, ZQF_TOWN, ZQF_BLD,                &
                     ZFLX_BLD, ZAC_ROAD, ZAC_GARDEN, ZAC_GREENROOF,           &
                     ZAC_ROAD_WAT, ZAC_GARDEN_WAT, ZAC_GREENROOF_WAT,         &
                     ZABS_SW_ROOF,ZABS_LW_ROOF,                               &
                     ZABS_SW_SNOW_ROOF,ZABS_LW_SNOW_ROOF,                     &
                     ZABS_SW_ROAD,ZABS_LW_ROAD,                               &
                     ZABS_SW_SNOW_ROAD,ZABS_LW_SNOW_ROAD,                     &
                     ZABS_SW_WALL_A,ZABS_LW_WALL_A,                           &
                     ZABS_SW_WALL_B,ZABS_LW_WALL_B,                           &
                     ZABS_SW_PANEL,ZABS_LW_PANEL,                             &
                     ZABS_SW_GARDEN,ZABS_LW_GARDEN,                           &
                     ZABS_SW_GREENROOF,ZABS_LW_GREENROOF,                     &
                     ZG_GREENROOF_ROOF,    &
                     CCOOL_COIL, ZF_WATER_COND, CHEAT_COIL,  &
                     HNATVENT, ZNATVENT, IDAY, ZAUX_MAX, ZT_FLOOR,            &
                     ZT_MASS, ZH_BLD_COOL, ZT_BLD_COOL, ZH_BLD_HEAT,          &
                     ZLE_BLD_COOL, ZLE_BLD_HEAT, ZH_WASTE, ZLE_WASTE,         &
                     ZF_WASTE_CAN, ZHVAC_COOL, ZHVAC_HEAT, ZQIN, ZQIN_FRAD,   &
                     ZQIN_FLAT, ZGR, ZEFF_HEAT, ZINF,                         &
                     ZTCOOL_TARGET, ZTHEAT_TARGET, ZHR_TARGET, ZT_WIN2,       &
                     ZQI_BLD, ZV_VENT, ZCAP_SYS_HEAT, ZCAP_SYS_RAT, ZT_ADP,   &
                     ZM_SYS_RAT, ZCOP_RAT, ZCAP_SYS, ZM_SYS, ZCOP, ZQ_SYS,    &
                     ZT_SYS, ZTR_SW_WIN, ZFAN_POWER, ZHC_FLOOR, ZTC_FLOOR,    &
                     ZD_FLOOR, ZT_WIN1, ZABS_SW_WIN, ZABS_LW_WIN, ZSHGC,      &
                     ZSHGC_SH, ZUGG_WIN, ZALB_WIN, ZABS_WIN, ZEMIT_LW_FAC,    &
                     ZEMIT_LW_GRND, ZT_RAD_IND, ZREF_SW_GRND, ZREF_SW_FAC,    &
                     ZHU_BLD, ZTIME, LSHADE, ZSHADE, GSHAD_DAY,           &
                     GNATVENT_NIGHT,                                          &
                     CBEM,                                                    &
                     ZN_FLOOR, ZWALL_O_BLD, ZGLAZ_O_BLD, ZMASS_O_BLD,         &
                     ZFLOOR_HW_RATIO, ZF_FLOOR_MASS, ZF_FLOOR_WALL,           &
                     ZF_FLOOR_WIN, ZF_FLOOR_ROOF, ZF_WALL_FLOOR, ZF_WALL_MASS,&
                     ZF_WALL_WIN, ZF_WIN_FLOOR, ZF_WIN_MASS, ZF_WIN_WALL,     &
                     ZF_MASS_FLOOR, ZF_MASS_WALL, ZF_MASS_WIN, LCANOPY,       &
                     ZTRAN_WIN, CCH_BEM, ZROUGH_ROOF, ZROUGH_WALL, ZF_WIN_WIN,&
                     LPAR_RD_IRRIG, ZRD_START_MONTH, ZRD_END_MONTH,           &
                     ZRD_START_HOUR, ZRD_END_HOUR, ZRD_24H_IRRIG, ZIRRIG_ROAD,&
                     ZEMIS_PANEL, ZALB_PANEL, ZEFF_PANEL, ZFRAC_PANEL,        &
                     ZRESIDENTIAL,                                            &
                     ZTHER_PROD_PANEL, ZPHOT_PROD_PANEL, ZPROD_PANEL,         &
                     ZTHER_PROD_BLD  , ZPHOT_PROD_BLD  , ZPROD_BLD  ,         &
                     ZTHER_PRODC_DAY, ZH_PANEL, ZRN_PANEL,                    &
                     ZDT_RES, ZDT_OFF,                                        &
                     ZCUR_TCOOL_TARGET, ZCUR_THEAT_TARGET, ZCUR_QIN           )
!*****************************************************************************
!*****************************************************************************
!*****************************************************************************
!*****************************************************************************
!

    ZTIME = ZTIME + XTSTEP_SURF
    CALL ADD_FORECAST_TO_DATE_SURF(IYEAR, IMONTH, IDAY, ZTIME)


   END DO

  IF (.NOT. NO_OUTPUT) THEN
    !  Instantaneous diagnostics
    ZTS_ROOF = ZT_ROOF(1,1)
    ZTS_ROAD = ZT_ROAD(1,1)
    ZTS_WALL_A = ZT_WALL(1,1)
    ZTS_WALL_B = ZT_WALL_B(1,1)

    ! Calucalte the total (direct + diffuse radiaitons)town albedo
    IF (ZTDIR_SW(1,1) == 0.) THEN
      ZALB_TOWN  = 0.
    ELSE
      ZALB_TOWN = (ZDIR_ALB_TOWN * ZTDIR_SW(1,1) + ZSCA_ALB_TOWN * ZTSCA_SW(1,1)) / (ZTDIR_SW(1,1) + ZTSCA_SW(1,1))
    END IF
    ! TEB does no modify the wind direction
    ZDIR_CANYON = ZDIR(1,1)
    ! Town specific humidity assumed to be same as canyon humidity
    ZQ_TOWN = ZQ_CANYON

      !
      WRITE(13,*) ZTS_ROOF
      WRITE(14,*) ZT_CANYON
      WRITE(15,*) ZTS_ROAD
      WRITE(16,*) ZTS_WALL_A
      WRITE(17,*) ZTS_WALL_B
      WRITE(18,*) ZTI_BLD
      WRITE(19,*) ZQ_CANYON
      WRITE(21,*) ZU_CANYON
      WRITE(22,*) ZH_TOWN
      WRITE(23,*) ZLE_TOWN
      WRITE(24,*) ZRN_TOWN
      IF (CBEM=='BEM') THEN
        ! The heating and cooling energy demand are converted
        ! from W/m²(bld) to W/m²(urb).
        ! FIXME: this does not seem correct anymore, why?
        ! it seems that ZHVAC_COOL is already W/m²(urb)...  
        ZHVAC_COOL_TOT = ZBLD * ZHVAC_COOL
        ZHVAC_HEAT_TOT = ZBLD * ZHVAC_HEAT
        WRITE(25,*) ZHVAC_COOL
        WRITE(26,*) ZHVAC_HEAT
        WRITE(37,*) ZCOP
      END IF
    !
        WRITE(27,*) ZDIR_CANYON
        WRITE(28,*) ZALB_TOWN
        WRITE(29,*) ZEMIS_TOWN
        WRITE(30,*) ZEVAP_TOWN
        WRITE(31,*) ZGFLUX_TOWN
        WRITE(32,*) ZTS_TOWN
        WRITE(33,*) ZQ_TOWN
        WRITE(34,*) ZUSTAR_TOWN
        WRITE(38,*) ZQF_TOWN
        WRITE(39,*) ZDQS_TOWN
        IF (LSOLAR_PANEL) THEN
          WRITE(35,*) ZTHER_PROD_PANEL
          WRITE(36,*) ZPHOT_PROD_PANEL
        END IF
        WRITE(40,*) ZTDIR_SW(1,1) + ZTSCA_SW(1,1)       
                          ! PDIR_SW(:,JSWB)                    + PSCA_SW(:,JSWB)
        WRITE(41,*) ZTDIR_SW(1,1) * ZDIR_ALB_TOWN(1) + ZTSCA_SW(1,1) * ZSCA_ALB_TOWN(1)
                          ! PDIR_SW(:,JSWB) * PDIR_ALB(:,JSWB) + PSCA_SW(:,JSWB) * PSCA_ALB(:,JSWB) 
        WRITE(42,*) XLW
                          ! PLW(:)
        WRITE(43,*) ZEMIS_TOWN * XSTEFAN *ZTS_TOWN**4 + (1.-ZEMIS_TOWN)*XLW
          ! PEMIS(:)*XSTEFAN*PTRAD(:)**4 + (1.-PEMIS(:))*PLW(:)

        ! Interpolated forcing variables
        WRITE(50,*) XTA
        WRITE(51,*) XPS
        WRITE(52,*) XQA
        WRITE(53,*) ZVMOD
        WRITE(54,*) XRAIN
        WRITE(55,*) XSNOW

        WRITE(56,*) ZT_FLOOR(1,1)
        WRITE(57,*) ZT_MASS(1,1)
        WRITE(58,*) ZQI_BLD
      END IF
    !
END DO
!
! --------------------------------------------------------------------------------------
!
!
!  DEALLOCATE variables
DEALLOCATE(ZTA)
DEALLOCATE(ZQA)
DEALLOCATE(ZWIND)
DEALLOCATE(ZDIR_SW)
DEALLOCATE(ZSCA_SW)
DEALLOCATE(ZLW)
DEALLOCATE(ZSNOW)
DEALLOCATE(ZRAIN)
DEALLOCATE(ZPS)
DEALLOCATE(ZCO2)
DEALLOCATE(ZDIR)
!
DEALLOCATE(ZHC_WALL)
DEALLOCATE(ZTC_WALL)
DEALLOCATE(ZD_WALL)
DEALLOCATE(ZT_WALL)
DEALLOCATE(ZT_WALL_B)
DEALLOCATE(ZHC_ROOF)
DEALLOCATE(ZTC_ROOF)
DEALLOCATE(ZD_ROOF)
DEALLOCATE(ZT_ROOF)
DEALLOCATE(ZHC_ROAD)
DEALLOCATE(ZTC_ROAD)
DEALLOCATE(ZD_ROAD)
DEALLOCATE(ZT_ROAD)
!
CALL OPEN_CLOSE_BIN_ASC_FORC('CLOSE ','ASCII ','R')
!
IF (.NOT. NO_OUTPUT) THEN
  CLOSE(13)
  CLOSE(14)
  CLOSE(15)
  CLOSE(16)
  CLOSE(17)
  CLOSE(18)
  CLOSE(19)
  CLOSE(21)
  CLOSE(22)
  CLOSE(23)
  CLOSE(24)
  CLOSE(25)
  CLOSE(26)
  CLOSE(37)
  CLOSE(27)
  CLOSE(28)
  CLOSE(29)
  CLOSE(30)
  CLOSE(31)
  CLOSE(32)
  CLOSE(33)
  CLOSE(34)
  CLOSE(35)
  CLOSE(36)
  CLOSE(38)
  CLOSE(39)
  CLOSE(40)
  CLOSE(41)
  CLOSE(42)
  CLOSE(43)

  CLOSE(50)
  CLOSE(51)
  CLOSE(52)
  CLOSE(53)
  CLOSE(54)
  CLOSE(55)

  CLOSE(56)
  CLOSE(57)
  CLOSE(58)


  !
      WRITE(*,*) ' '
      WRITE(*,*) '    --------------------------'
      WRITE(*,*) '    |  DRIVER ENDS CORRECTLY |'
      WRITE(*,*) '    --------------------------'
      WRITE(*,*) ' '
END IF
!
! --------------------------------------------------------------------------------------
!
END PROGRAM DRIVER