!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer, 
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms 
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer 
!version 3 or (at your option) any later version that should be found at: 
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html 
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software; 
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), 
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
!!!S/P INITOWN  
!
#include "phy_macros_f.h"
!

      SUBROUTINE INITOWN ( E, ESIZ, F, FSIZ, D, DSIZ, NI, NK) 1,20
!
      USE MODD_TOWN,      ONLY : NNI, XMASK, XINI_LAT, XINI_LON,        &
                                 XINI_ZS, XINI_TSOIL, XINI_TS,          &
                                 XINI_TA, XINI_QA,                      &
                                 XTOWN
      USE MODD_CSTS
      USE MODD_PREP    ,  ONLY : XZS_LS,XLAT_OUT,XLON_OUT
      USE MODD_TEB_GRID,  ONLY : XLAT, XLON
      USE MODD_TEB,       ONLY : XZS, XBLD, XBLD_HEIGHT, XZ0_TOWN,      &
                                 XWALL_O_HOR, XCAN_HW_RATIO,            &
                                 XSVF_ROAD,XSVF_WALL,                   &
                                 XALB_ROOF, XALB_ROAD, XALB_WALL,       &
                                 XEMIS_ROOF, XEMIS_ROAD, XEMIS_WALL,    &
                                 XHC_ROOF, XTC_ROOF, XD_ROOF,           &
                                 XHC_ROAD, XTC_ROAD, XD_ROAD,           &
                                 XHC_WALL, XTC_WALL, XD_WALL,           &
                                 NROOF_LAYER, NROAD_LAYER, NWALL_LAYER, &
                                 XH_TRAFFIC, XLE_TRAFFIC,               &
                                 XH_INDUSTRY, XLE_INDUSTRY,             &
                                 XT_ROOF, XT_ROAD, XT_WALL,             &
                                 XWS_ROOF, XWS_ROAD,                    &
                                 XT_CANYON, XQ_CANYON,                  &
                                 XTI_ROAD, XTI_BLD,                     &
                                 TSNOW_ROOF, TSNOW_ROAD
      USE MODD_SURF_PAR,  ONLY : XUNDEF
      USE MODD_TYPE_SNOW
! 
      USE MODI_ALLOCATE_GR_SNOW
      USE MODI_INI_CSTS
      USE MODI_PREP_TEB
      USE MODI_INIT_TEB
      USE MODI_SUNPOS
      USE MODI_POSSOL
! 
#include "impnone.cdk"
! 
      INTEGER NI, NK
      INTEGER ESIZ, FSIZ, DSIZ
      REAL E(ESIZ), F(FSIZ), D(DSIZ)
! 
#include "phybus.cdk"
#include "tebcst.cdk"
#include "indx_sfc.cdk"
#include "options.cdk"
! 
!Author
!       Aude Lemonsu (March 2004)
! 
! 
!Object
!       Transfer and initialize initial fields for TEB
! 
!Revision
! 001      A. Lemonsu (Dec 2005) Computation of zenithal angle
! 
!Arguments
! 
!       - Input/Ouput -
! F        field for permanent physics variables
! FSIZ     dimension of F
! E        field for entry variables
! ESIZ     dimension of E
! D        field for dynamical variables
! DSIZ     dimension of D
! NI       horizontal dimension
! NK       vertical dimension
! 
!
!     Type of files
!     -------------
      CHARACTER(LEN=6)        :: HPROGRAM
      CHARACTER(LEN=3)        :: HINIT
      CHARACTER(LEN=28)       :: HATMFILE
      CHARACTER(LEN=6)        :: HATMFILETYPE
      PARAMETER(HPROGRAM    ='MC2GEM')
      PARAMETER(HINIT       ='ALL')
      PARAMETER(HATMFILE    ='                            ')
      PARAMETER(HATMFILETYPE='MC2GEM')
!
!
!     Local variables
!     ---------------
      REAL     JULIEN,JULIAND
      EXTERNAL JULIAND
!
      INTEGER I, K

      INTEGER, DIMENSION (60) :: ALLOC_STATUS
!
      CHARACTER(LEN=6), DIMENSION(NI)    :: HSV       !
      REAL            , DIMENSION(NI)    :: PCO2      !
      REAL            , DIMENSION(NI)    :: PRHOA     !
      REAL            , DIMENSION(NI)    :: PZENITH   ! solar zenithal angle
      REAL            , DIMENSION(NI)    :: PAZIM     ! solar azimuthal angle (from N, clock)
      REAL            , DIMENSION(1)     :: PSW_BANDS ! middle wavelength of each band
      REAL            , DIMENSION(NI,1)	 :: PDIR_ALB  ! direct albedo for each band
      REAL            , DIMENSION(NI,1)	 :: PSCA_ALB  ! diffuse albedo for each band
      REAL            , DIMENSION(NI)    :: PEMIS     ! emissivity
      REAL            , DIMENSION(NI)    :: PTSRAD    ! radiative temperature
      INTEGER                            :: KYEAR
      INTEGER                            :: KMONTH
      INTEGER                            :: KDAY
      REAL                               :: PTIME
!
      REAL,    DIMENSION(NI)  :: ZDAY
      REAL,    DIMENSION(NI)  :: ZHOUR
      REAL,    DIMENSION(NI)  :: ZMIN
      REAL,    DIMENSION(NI)  :: ZTSUN
!
      REAL,    DIMENSION(NI)  :: XU
      REAL,    DIMENSION(NI)  :: XV
!
      NROOF_LAYER = ROOF_LAYER
      NROAD_LAYER = ROAD_LAYER
      NWALL_LAYER = WALL_LAYER
!
!
!     Allocation
!     ----------
!     General parameters
!     ------------------
      ALLOCATE( XMASK        (NI)            , STAT=ALLOC_STATUS( 1) )
      ALLOCATE( XINI_LAT     (NI)            , STAT=ALLOC_STATUS( 2)  )
      ALLOCATE( XINI_LON     (NI)            , STAT=ALLOC_STATUS( 3)  )
      ALLOCATE( XLAT         (NI)            , STAT=ALLOC_STATUS( 4)  )
      ALLOCATE( XLON         (NI)            , STAT=ALLOC_STATUS( 5)  )
      ALLOCATE( XINI_ZS      (NI)            , STAT=ALLOC_STATUS( 6)  )
      ALLOCATE( XZS          (NI)            , STAT=ALLOC_STATUS( 7)  )
      ALLOCATE( XTOWN        (NI)            , STAT=ALLOC_STATUS( 8)  )
!     Analysis variables   
!     ------------------
      ALLOCATE( XINI_TSOIL   (NI)            , STAT=ALLOC_STATUS( 9)  )
      ALLOCATE( XINI_TS      (NI)            , STAT=ALLOC_STATUS(10)  )
      ALLOCATE( XINI_TA      (NI)            , STAT=ALLOC_STATUS(11)  )
      ALLOCATE( XINI_QA      (NI)            , STAT=ALLOC_STATUS(12)  )
!     Urban parameters
!     ----------------
!     1. Geometric parameters :
      ALLOCATE( XBLD         (NI)            , STAT=ALLOC_STATUS(13)  )
      ALLOCATE( XBLD_HEIGHT  (NI)            , STAT=ALLOC_STATUS(14)  )
      ALLOCATE( XZ0_TOWN     (NI)            , STAT=ALLOC_STATUS(15)  )
      ALLOCATE( XWALL_O_HOR  (NI)            , STAT=ALLOC_STATUS(16)  )
      ALLOCATE( XCAN_HW_RATIO(NI)            , STAT=ALLOC_STATUS(17)  )
      ALLOCATE( XSVF_ROAD    (NI)            , STAT=ALLOC_STATUS(18)  )
      ALLOCATE( XSVF_WALL    (NI)            , STAT=ALLOC_STATUS(19)  )
!     2. Radiative properties :
      ALLOCATE( XALB_ROOF    (NI)            , STAT=ALLOC_STATUS(20)   )
      ALLOCATE( XALB_ROAD    (NI)            , STAT=ALLOC_STATUS(21)   )
      ALLOCATE( XALB_WALL    (NI)            , STAT=ALLOC_STATUS(22)   )
      ALLOCATE( XEMIS_ROOF   (NI)            , STAT=ALLOC_STATUS(23)   )
      ALLOCATE( XEMIS_ROAD   (NI)            , STAT=ALLOC_STATUS(24)   )
      ALLOCATE( XEMIS_WALL   (NI)            , STAT=ALLOC_STATUS(25)   )
!     3. Thermal properties :
      ALLOCATE( XHC_ROOF     (NI,NROOF_LAYER), STAT=ALLOC_STATUS(26)   )
      ALLOCATE( XTC_ROOF     (NI,NROOF_LAYER), STAT=ALLOC_STATUS(27)   )
      ALLOCATE( XD_ROOF      (NI,NROOF_LAYER), STAT=ALLOC_STATUS(28)   )
      ALLOCATE( XHC_ROAD     (NI,NROAD_LAYER), STAT=ALLOC_STATUS(29)   )
      ALLOCATE( XTC_ROAD     (NI,NROAD_LAYER), STAT=ALLOC_STATUS(30)   )
      ALLOCATE( XD_ROAD      (NI,NROAD_LAYER), STAT=ALLOC_STATUS(31)   )
      ALLOCATE( XHC_WALL     (NI,NWALL_LAYER), STAT=ALLOC_STATUS(32)   )
      ALLOCATE( XTC_WALL     (NI,NWALL_LAYER), STAT=ALLOC_STATUS(33)   )
      ALLOCATE( XD_WALL      (NI,NWALL_LAYER), STAT=ALLOC_STATUS(34)   )
!     4. Anthropogenic fluxes :
      ALLOCATE( XH_TRAFFIC   (NI)            , STAT=ALLOC_STATUS(35)   )
      ALLOCATE( XLE_TRAFFIC  (NI)            , STAT=ALLOC_STATUS(36)   )
      ALLOCATE( XH_INDUSTRY  (NI)            , STAT=ALLOC_STATUS(37)   )
      ALLOCATE( XLE_INDUSTRY (NI)            , STAT=ALLOC_STATUS(38)   )
!     5. Initial pronostic variables :
      ALLOCATE( XTI_ROAD     (NI)            , STAT=ALLOC_STATUS(39)   )
      ALLOCATE( XTI_BLD      (NI)            , STAT=ALLOC_STATUS(40)   )
      ALLOCATE( XZS_LS       (NI)            , STAT=ALLOC_STATUS(41)   )  
      ALLOCATE( XLAT_OUT     (NI)            , STAT=ALLOC_STATUS(42)   )
      ALLOCATE( XLON_OUT     (NI)            , STAT=ALLOC_STATUS(43)   )
      ALLOCATE( XWS_ROOF     (NI)            , STAT=ALLOC_STATUS(44)   )
      ALLOCATE( XWS_ROAD     (NI)            , STAT=ALLOC_STATUS(45)   )
      ALLOCATE( XT_ROOF      (NI,NROOF_LAYER), STAT=ALLOC_STATUS(46)   )
      ALLOCATE( XT_ROAD      (NI,NROAD_LAYER), STAT=ALLOC_STATUS(47)   )
      ALLOCATE( XT_WALL      (NI,NWALL_LAYER), STAT=ALLOC_STATUS(48)   )
      ALLOCATE( XT_CANYON    (NI)            , STAT=ALLOC_STATUS(49)   )
      ALLOCATE( XQ_CANYON    (NI)            , STAT=ALLOC_STATUS(50)   )
!     6. Snow variables :
      TSNOW_ROOF%SCHEME = '1-L '
      TSNOW_ROAD%SCHEME = '1-L '
      CALL ALLOCATE_GR_SNOW(TSNOW_ROOF,NI,1)
      CALL ALLOCATE_GR_SNOW(TSNOW_ROAD,NI,1)
!
!
!     Initialisation
!     --------------
      XMASK        = XUNDEF          
      XINI_LAT     = XUNDEF          
      XINI_LON     = XUNDEF          
      XLAT         = XUNDEF          
      XLON         = XUNDEF          
      XINI_ZS      = XUNDEF          
      XZS          = XUNDEF          
      XTOWN        = XUNDEF          
      XINI_TSOIL   = XUNDEF          
      XINI_TS      = XUNDEF          
      XINI_TA      = XUNDEF          
      XINI_QA      = XUNDEF          
      XBLD         = XUNDEF          
      XBLD_HEIGHT  = XUNDEF          
      XZ0_TOWN     = XUNDEF          
      XWALL_O_HOR  = XUNDEF          
      XCAN_HW_RATIO= XUNDEF          
      XSVF_ROAD    = XUNDEF          
      XSVF_WALL    = XUNDEF          
      XALB_ROOF    = XUNDEF          
      XALB_ROAD    = XUNDEF          
      XALB_WALL    = XUNDEF          
      XEMIS_ROOF   = XUNDEF          
      XEMIS_ROAD   = XUNDEF          
      XEMIS_WALL   = XUNDEF          
      XHC_ROOF     = XUNDEF          
      XTC_ROOF     = XUNDEF          
      XD_ROOF      = XUNDEF          
      XHC_ROAD     = XUNDEF          
      XTC_ROAD     = XUNDEF          
      XD_ROAD      = XUNDEF          
      XHC_WALL     = XUNDEF          
      XTC_WALL     = XUNDEF          
      XD_WALL      = XUNDEF          
      XH_TRAFFIC   = XUNDEF          
      XLE_TRAFFIC  = XUNDEF          
      XH_INDUSTRY  = XUNDEF          
      XLE_INDUSTRY = XUNDEF          
      XTI_ROAD     = XUNDEF          
      XTI_BLD      = XUNDEF  
!
!
      do i=0,ni-1
!      General variables
!      -----------------
       XMASK        (i+1) = e(mgen        +i          )
       XINI_LAT     (i+1) = e(dlaten      +i          )
       XINI_LON     (i+1) = e(dlonen      +i          )
       XINI_ZS      (i+1) = e(mf          +i          )
       XZS          (i+1) = e(mf          +i          )
       XTOWN        (i+1) = f(urban       +i          )
!      Analysis variables
!      ------------------
       XINI_TS      (i+1) = e(tsoilen     +i          )
       XINI_TSOIL   (i+1) = e(tsoilen     +i+ni       )
       XINI_TA      (i+1) = d(tmoins      +i+(nk-1)*ni)
       XINI_QA      (i+1) = d(humoins     +i+(nk-1)*ni)
       XU           (i+1) = d(umoins      +i+(nk-1)*ni) 
       XV           (i+1) = d(vmoins      +i+(nk-1)*ni)
!      Urban parameters 
!      ----------------
       IF (XTOWN(i+1)>0.) THEN
        XBLD         (i+1) = f(bld         +i          )
        XBLD_HEIGHT  (i+1) = f(bld_height  +i          )
        XZ0_TOWN     (i+1) = f(z0_town     +i          )
        XWALL_O_HOR  (i+1) = f(wall_o_hor  +i          )
        XCAN_HW_RATIO(i+1) = f(can_hw_ratio+i          )
        XALB_ROOF    (i+1) = f(alb_roof    +i          )
        XEMIS_ROOF   (i+1) = f(emis_roof   +i          )
        XALB_ROAD    (i+1) = f(alb_road    +i          )
        XEMIS_ROAD   (i+1) = f(emis_road   +i          )
        XALB_WALL    (i+1) = f(alb_wall    +i          )
        XEMIS_WALL   (i+1) = f(emis_wall   +i          )
        XH_TRAFFIC   (i+1) = f(h_traffic   +i          )
        XLE_TRAFFIC  (i+1) = f(le_traffic  +i          )
        XH_INDUSTRY  (i+1) = f(h_industry  +i          )
        XLE_INDUSTRY (i+1) = f(le_industry +i          )
        do k=0,NROOF_LAYER-1
         XHC_ROOF (i+1,k+1) = f(hc_roof +i+ni*k)
         XTC_ROOF (i+1,k+1) = f(tc_roof +i+ni*k)
         XD_ROOF  (i+1,k+1) = f(d_roof  +i+ni*k) 
        end do
        do k=0,NROAD_LAYER-1
         XHC_ROAD (i+1,k+1) = f(hc_road +i+ni*k)
         XTC_ROAD (i+1,k+1) = f(tc_road +i+ni*k)
         XD_ROAD  (i+1,k+1) = f(d_road  +i+ni*k) 
        end do
        do k=0,NWALL_LAYER-1
         XHC_WALL (i+1,k+1) = f(hc_wall +i+ni*k)
         XTC_WALL (i+1,k+1) = f(tc_wall +i+ni*k)
         XD_WALL  (i+1,k+1) = f(d_wall  +i+ni*k) 
        end do
       ELSE
        XBLD         (i+1) = XUNDEF 
        XBLD_HEIGHT  (i+1) = XUNDEF 
        XZ0_TOWN     (i+1) = XUNDEF 
        XWALL_O_HOR  (i+1) = XUNDEF 
        XCAN_HW_RATIO(i+1) = XUNDEF 
        XALB_ROOF    (i+1) = XUNDEF 
        XEMIS_ROOF   (i+1) = XUNDEF 
        XALB_ROAD    (i+1) = XUNDEF 
        XEMIS_ROAD   (i+1) = XUNDEF 
        XALB_WALL    (i+1) = XUNDEF 
        XEMIS_WALL   (i+1) = XUNDEF 
        XH_TRAFFIC   (i+1) = XUNDEF 
        XLE_TRAFFIC  (i+1) = XUNDEF 
        XH_INDUSTRY  (i+1) = XUNDEF 
        XLE_INDUSTRY (i+1) = XUNDEF 
        XHC_ROOF   (i+1,:) = XUNDEF
        XTC_ROOF   (i+1,:) = XUNDEF
        XD_ROOF    (i+1,:) = XUNDEF
        XHC_ROAD   (i+1,:) = XUNDEF
        XTC_ROAD   (i+1,:) = XUNDEF
        XD_ROAD    (i+1,:) = XUNDEF
        XHC_WALL   (i+1,:) = XUNDEF
        XTC_WALL   (i+1,:) = XUNDEF
        XD_WALL    (i+1,:) = XUNDEF
       ENDIF
      end do
! 
      XLAT (:) = XINI_LAT(:)
      XLON (:) = XINI_LON(:)
!
      NNI = NI
!
!-------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------
!
!
!     Physical constants
      CALL INI_CSTS
!
!-------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------
!
!
!     Preparation of fields
      CALL PREP_TEB(HPROGRAM,HATMFILE,HATMFILETYPE)
!
!
!-------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------
!
!     Time
!     ----
      JULIEN    = JULIAND(0,0,DATE)
      PTIME     = date(5)*3600. + date(6)/100.
      KDAY      = date(3) + INT(PTIME/86400.)
      KMONTH    = date(2)
      KYEAR     = date(4)
      PTIME     = AMOD(PTIME,3600*24.)

!-------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------
!
!
!     Radiative Calculations
!     ----------------------
      PSW_BANDS = 0.
      ZDAY(:)   = JULIEN
      ZHOUR(:)  = INT(PTIME/3600.)*1.
      ZMIN(:)   = (PTIME/3600.-INT(PTIME/3600.))*60.
!
      CALL SUNPOS(KYEAR,KMONTH,KDAY,PTIME,XINI_LON*180./XPI,XINI_LAT*180./XPI,ZTSUN,PZENITH,PAZIM)
!	
      HSV   = '      '
      PCO2  = 0.
      PRHOA = 0.
!
!-------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------
!
!
!     Initialisation
       CALL INIT_TEB(HPROGRAM,HINIT,HSV,PCO2,PRHOA,              &
                     PZENITH,PAZIM,PSW_BANDS,PDIR_ALB,PSCA_ALB,  &
                     PEMIS,PTSRAD,                               &
                     HATMFILE,HATMFILETYPE,KYEAR,KMONTH,KDAY,PTIME)

!-------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------
!
!
!     Transfert to the bus
      do i=0,ni-1
       if (XTOWN(i+1) > 0.) then
        f(svf_road     +i) = XSVF_ROAD(i+1)
        f(svf_wall     +i) = XSVF_WALL(i+1)
        f(ws_roof      +i) = XWS_ROOF (i+1)
        f(ws_road      +i) = XWS_ROAD (i+1)
        f(ti_bld       +i) = XTI_BLD  (i+1)
        f(ti_road      +i) = XTI_ROAD (i+1)
        f(t_canyon     +i) = XT_CANYON(i+1)
        f(q_canyon     +i) = XQ_CANYON(i+1)
        f(sroof_nlayer +i) = TSNOW_ROOF%NLAYER
        f(sroof_wsnow  +i) = TSNOW_ROOF%WSNOW (i+1,1,1)
        f(sroof_t      +i) = TSNOW_ROOF%T     (i+1,1,1)
        f(sroof_rho    +i) = TSNOW_ROOF%RHO   (i+1,1,1)
        f(sroof_alb    +i) = TSNOW_ROOF%ALB   (i+1,1)
        f(sroof_emis   +i) = TSNOW_ROOF%EMIS  (i+1,1)  
        f(sroof_ts     +i) = TSNOW_ROOF%TS    (i+1,1)  
        f(sroad_nlayer +i) = TSNOW_ROAD%NLAYER
        f(sroad_wsnow  +i) = TSNOW_ROAD%WSNOW (i+1,1,1)
        f(sroad_t      +i) = TSNOW_ROAD%T     (i+1,1,1)
        f(sroad_rho    +i) = TSNOW_ROAD%RHO   (i+1,1,1)
        f(sroad_alb    +i) = TSNOW_ROAD%ALB   (i+1,1)
        f(sroad_emis   +i) = TSNOW_ROAD%EMIS  (i+1,1)  
        f(sroad_ts     +i) = TSNOW_ROAD%TS    (i+1,1)
        do k=0,NROOF_LAYER-1
          f(t_roof+i+ni*k)  = XT_ROOF(i+1,k+1)
        end do
        do k=0,NROAD_LAYER-1
          f(t_road+i+ni*k)  = XT_ROAD(i+1,k+1)
        end do
        do k=0,NWALL_LAYER-1
          f(t_wall+i+ni*k)  = XT_WALL(i+1,k+1)
        end do
!       Variables a agreger
!       -------------------
        f(z0    +ni*(indx_urb-1)+i) = XZ0_TOWN (i+1)
        f(z0t   +ni*(indx_urb-1)+i) = 0.10 / 200.
        f(tsurf                 +i) = PTSRAD   (i+1)
        f(tsrad                 +i) = PTSRAD   (i+1)
        f(qsurf +ni*(indx_urb-1)+i) = XQ_CANYON(i+1)
        f(alvis +ni*(indx_urb-1)+i) = PDIR_ALB (i+1,1)
        f(snodp +ni*(indx_urb-1)+i) = 0.
        f(fc    +ni*(indx_urb-1)+i) = 0.
        f(fv    +ni*(indx_urb-1)+i) = 0.
       else
        f(svf_road     +i) = XUNDEF
        f(svf_wall     +i) = XUNDEF
        f(ws_roof      +i) = XUNDEF
        f(ws_road      +i) = XUNDEF
        f(ti_bld       +i) = XUNDEF
        f(ti_road      +i) = XUNDEF
        f(t_canyon     +i) = XUNDEF
        f(q_canyon     +i) = XUNDEF
        f(sroof_nlayer +i) = XUNDEF
        f(sroof_wsnow  +i) = XUNDEF
        f(sroof_t      +i) = XUNDEF
        f(sroof_rho    +i) = XUNDEF
        f(sroof_alb    +i) = XUNDEF
        f(sroof_emis   +i) = XUNDEF
        f(sroof_ts     +i) = XUNDEF
        f(sroad_nlayer +i) = XUNDEF
        f(sroad_wsnow  +i) = XUNDEF
        f(sroad_t      +i) = XUNDEF
        f(sroad_rho    +i) = XUNDEF
        f(sroad_alb    +i) = XUNDEF
        f(sroad_emis   +i) = XUNDEF
        f(sroad_ts     +i) = XUNDEF
        do k=0,NROOF_LAYER-1
          f(t_roof+i+ni*k) = XUNDEF
        end do
        do k=0,NROAD_LAYER-1
          f(t_road+i+ni*k) = XUNDEF
        end do
        do k=0,NWALL_LAYER-1
          f(t_wall+i+ni*k) = XUNDEF
        end do
!       Variables a agreger
!       -------------------
        f(z0    +ni*(indx_urb-1)+i) = XUNDEF
        f(z0t   +ni*(indx_urb-1)+i) = XUNDEF
        f(qsurf +ni*(indx_urb-1)+i) = XUNDEF
        f(alvis +ni*(indx_urb-1)+i) = XUNDEF
        f(snodp +ni*(indx_urb-1)+i) = XUNDEF
        f(fc    +ni*(indx_urb-1)+i) = XUNDEF
        f(fv    +ni*(indx_urb-1)+i) = XUNDEF
       endif
      end do
! 
!-------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------
!
!
!     Deallocation
!     ------------
!     General parameters
!     ------------------
      DEALLOCATE( XMASK           , STAT=ALLOC_STATUS( 1)  )
      DEALLOCATE( XINI_LAT        , STAT=ALLOC_STATUS( 2)  )
      DEALLOCATE( XINI_LON        , STAT=ALLOC_STATUS( 3)  )
      DEALLOCATE( XLAT            , STAT=ALLOC_STATUS( 4)  )
      DEALLOCATE( XLON            , STAT=ALLOC_STATUS( 5)  )
      DEALLOCATE( XINI_ZS         , STAT=ALLOC_STATUS( 6)  )
      DEALLOCATE( XZS             , STAT=ALLOC_STATUS( 7)  )
      DEALLOCATE( XTOWN           , STAT=ALLOC_STATUS( 8)  )
!     Prognostic variables
!     --------------------
      DEALLOCATE( XINI_TSOIL      , STAT=ALLOC_STATUS( 9)  )
      DEALLOCATE( XINI_TS         , STAT=ALLOC_STATUS(10)  )
      DEALLOCATE( XINI_TA         , STAT=ALLOC_STATUS(11)  )
      DEALLOCATE( XINI_QA         , STAT=ALLOC_STATUS(12)  )
!     Urban parameters
!     ----------------
!     1.Geometric parameter :
      DEALLOCATE( XBLD            , STAT=ALLOC_STATUS(13)  )
      DEALLOCATE( XBLD_HEIGHT     , STAT=ALLOC_STATUS(14)  )
      DEALLOCATE( XZ0_TOWN        , STAT=ALLOC_STATUS(15)  )
      DEALLOCATE( XWALL_O_HOR     , STAT=ALLOC_STATUS(16)  )
      DEALLOCATE( XCAN_HW_RATIO   , STAT=ALLOC_STATUS(17)  )
      DEALLOCATE( XSVF_ROAD       , STAT=ALLOC_STATUS(18)  )
      DEALLOCATE( XSVF_WALL       , STAT=ALLOC_STATUS(19)  )
!     2.Radiative properties :
      DEALLOCATE( XALB_ROOF       , STAT=ALLOC_STATUS(20)  )
      DEALLOCATE( XALB_ROAD       , STAT=ALLOC_STATUS(21)  )
      DEALLOCATE( XALB_WALL       , STAT=ALLOC_STATUS(22)  )
      DEALLOCATE( XEMIS_ROOF      , STAT=ALLOC_STATUS(23)  )
      DEALLOCATE( XEMIS_ROAD      , STAT=ALLOC_STATUS(24)  )
      DEALLOCATE( XEMIS_WALL      , STAT=ALLOC_STATUS(25)  )
!     3. Thermal properties :
      DEALLOCATE( XHC_ROOF        , STAT=ALLOC_STATUS(26)  )
      DEALLOCATE( XTC_ROOF        , STAT=ALLOC_STATUS(27)  )
      DEALLOCATE( XD_ROOF         , STAT=ALLOC_STATUS(28)  )
      DEALLOCATE( XHC_ROAD        , STAT=ALLOC_STATUS(29)  )
      DEALLOCATE( XTC_ROAD        , STAT=ALLOC_STATUS(30)  )
      DEALLOCATE( XD_ROAD         , STAT=ALLOC_STATUS(31)  )
      DEALLOCATE( XHC_WALL        , STAT=ALLOC_STATUS(32)  )
      DEALLOCATE( XTC_WALL        , STAT=ALLOC_STATUS(33)  )
      DEALLOCATE( XD_WALL         , STAT=ALLOC_STATUS(34)  )
!     4. Anthropogenic fluxes :
      DEALLOCATE( XH_TRAFFIC      , STAT=ALLOC_STATUS(35)  )
      DEALLOCATE( XLE_TRAFFIC     , STAT=ALLOC_STATUS(36)  )
      DEALLOCATE( XH_INDUSTRY     , STAT=ALLOC_STATUS(37)  )
      DEALLOCATE( XLE_INDUSTRY    , STAT=ALLOC_STATUS(38)  )
!     5. Initial pronostic variables :
      DEALLOCATE( XTI_ROAD        , STAT=ALLOC_STATUS(39)  )
      DEALLOCATE( XTI_BLD         , STAT=ALLOC_STATUS(40)  )
      DEALLOCATE( XZS_LS          , STAT=ALLOC_STATUS(41)  )
      DEALLOCATE( XLAT_OUT        , STAT=ALLOC_STATUS(42)  )
      DEALLOCATE( XLON_OUT        , STAT=ALLOC_STATUS(43)  )
      DEALLOCATE( XWS_ROOF        , STAT=ALLOC_STATUS(44)  )
      DEALLOCATE( XWS_ROAD        , STAT=ALLOC_STATUS(45)  )
      DEALLOCATE( XT_ROOF         , STAT=ALLOC_STATUS(46)  )
      DEALLOCATE( XT_ROAD         , STAT=ALLOC_STATUS(47)  )
      DEALLOCATE( XT_WALL         , STAT=ALLOC_STATUS(48)  ) 
      DEALLOCATE( XT_CANYON       , STAT=ALLOC_STATUS(49)  )
      DEALLOCATE( XQ_CANYON       , STAT=ALLOC_STATUS(50)  )
      DEALLOCATE( TSNOW_ROOF%WSNOW, STAT=ALLOC_STATUS( 1)  )
      DEALLOCATE( TSNOW_ROOF%T    , STAT=ALLOC_STATUS( 2)  )
      DEALLOCATE( TSNOW_ROOF%RHO  , STAT=ALLOC_STATUS( 3)  )
      DEALLOCATE( TSNOW_ROOF%HEAT , STAT=ALLOC_STATUS( 4)  )
      DEALLOCATE( TSNOW_ROOF%ALB  , STAT=ALLOC_STATUS( 5)  )
      DEALLOCATE( TSNOW_ROOF%EMIS , STAT=ALLOC_STATUS( 6)  )
      DEALLOCATE( TSNOW_ROOF%TS   , STAT=ALLOC_STATUS( 7)  )
      DEALLOCATE( TSNOW_ROAD%WSNOW, STAT=ALLOC_STATUS( 1)  )
      DEALLOCATE( TSNOW_ROAD%T    , STAT=ALLOC_STATUS( 2)  )
      DEALLOCATE( TSNOW_ROAD%RHO  , STAT=ALLOC_STATUS( 3)  )
      DEALLOCATE( TSNOW_ROAD%HEAT , STAT=ALLOC_STATUS( 4)  )
      DEALLOCATE( TSNOW_ROAD%ALB  , STAT=ALLOC_STATUS( 5)  )
      DEALLOCATE( TSNOW_ROAD%EMIS , STAT=ALLOC_STATUS( 6)  )
      DEALLOCATE( TSNOW_ROAD%TS   , STAT=ALLOC_STATUS( 7)  )
! 
! 
      RETURN
      END