!-------------------------------------- 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 --------------------------------------
!     #############################################################

      SUBROUTINE INIT_TEB(HPROGRAM,HINIT,HSV,PCO2,PRHOA,              & 1,8
                          PZENITH,PAZIM,PSW_BANDS,PDIR_ALB,PSCA_ALB,  &
                          PEMIS,PTSRAD,                               &
                          HATMFILE,HATMFILETYPE,KYEAR,KMONTH,KDAY,PTIME)
!     #############################################################
!
!!****  *INIT_TEB$n* - routine to initialize TEB
!!
!!    PURPOSE
!!    -------
!!
!!**  METHOD
!!    ------
!!
!!    EXTERNAL
!!    --------
!!
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!    REFERENCE
!!    ---------
!!
!!
!!    AUTHOR
!!    ------
!!	V. Masson   *Meteo France*	
!!
!!    MODIFICATIONS
!!    -------------
!!      Original    01/2003
!-------------------------------------------------------------------------------
!
!*       0.    DECLARATIONS
!              ------------
!
USE MODD_SNOW_PAR, ONLY : XEMISSN
USE MODD_TEB,      ONLY : XTSTEP, XOUT_TSTEP,                        &
                          XBLD, XWALL_O_HOR, XCAN_HW_RATIO,          &
                          XSVF_ROAD, XSVF_WALL,                      &
                          TSNOW_ROOF, TSNOW_ROAD,                    &
                          XEMIS_ROOF, XEMIS_ROAD, XEMIS_WALL,        &
                          XALB_ROOF, XALB_ROAD, XALB_WALL,           &
                          XT_ROOF, XT_ROAD, XT_WALL              
USE MODD_SURF_PAR, ONLY : XUNDEF
!
USE MODI_DEFAULT_TEB
!USE MODI_READ_DEFAULT_TEB$n
!USE MODI_READ_TEB$n
!USE MODI_READ_PGD_TEB$n
!USE MODI_CONVERT_COVER_TEB
USE MODI_INIT_SNOW_LW
USE MODI_AVERAGED_TSRAD_TEB
USE MODI_AVERAGED_ALBEDO_TEB
!USE MODI_DIAG_TEB_INIT$n
!USE MODI_END_IO_SURF$n
!USE MODI_GET_LUOUT
!USE MODI_READ_SURF
!
USE MODD_TOWN
!
IMPLICIT NONE
!
!*       0.1   Declarations of arguments
!              -------------------------
!
CHARACTER(LEN=6),                INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
CHARACTER(LEN=3),                INTENT(IN)  :: HINIT     ! choice of fields to initialize
CHARACTER(LEN=6), DIMENSION(:),  INTENT(IN)  :: HSV       ! name of all scalar variables
REAL,             DIMENSION(:),  INTENT(IN)  :: PCO2      ! CO2 concentration (kg/m3)
REAL,             DIMENSION(:),  INTENT(IN)  :: PRHOA     ! air density       (kg/m3)
REAL,             DIMENSION(:),  INTENT(IN)  :: PZENITH   ! solar zenithal angle
REAL,             DIMENSION(:),  INTENT(IN)  :: PAZIM     ! solar azimuthal angle (rad from N, clock)
REAL,             DIMENSION(:),  INTENT(IN)  :: PSW_BANDS ! middle wavelength of each band
REAL,             DIMENSION(:,:),INTENT(OUT) :: PDIR_ALB  ! direct albedo for each band
REAL,             DIMENSION(:,:),INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each band
REAL,             DIMENSION(:),  INTENT(OUT) :: PEMIS     ! emissivity
REAL,             DIMENSION(:),  INTENT(OUT) :: PTSRAD    ! radiative temperature
CHARACTER(LEN=28), INTENT(IN)  :: HATMFILE    ! atmospheric file name
CHARACTER(LEN=6),  INTENT(IN)  :: HATMFILETYPE! atmospheric file type
INTEGER,           INTENT(IN)  :: KYEAR     ! current year (UTC)
INTEGER,           INTENT(IN)  :: KMONTH    ! current month (UTC)
INTEGER,           INTENT(IN)  :: KDAY      ! current day (UTC)
REAL,              INTENT(IN)  :: PTIME     ! current time since midnight (UTC, s)
!
!*       0.2   Declarations of local variables
!              -------------------------------
!
INTEGER           :: ILU      ! sizes of TEB arrays
INTEGER           :: ILUOUT   ! unit of output listing file
INTEGER           :: IRESP    ! return code
!
!
INTEGER           :: ISWB     ! number of shortwave spectral bands
INTEGER           :: JLAYER   ! loop counter on layers
INTEGER           :: JSWB     ! loop on shortwave spectral bands
!
REAL, DIMENSION(:), ALLOCATABLE :: ZDIR_ALB ! direct town albedo
REAL, DIMENSION(:), ALLOCATABLE :: ZSCA_ALB ! diffuse town albedo
!-------------------------------------------------------------------------------
!
!         Other littel things
!
!
PDIR_ALB = XUNDEF
PSCA_ALB = XUNDEF
PEMIS    = XUNDEF
PTSRAD   = XUNDEF
!
!
!*       0.     Defaults
!               --------
!
!        0.1. Hard defaults
!      
CALL DEFAULT_TEB(XTSTEP,XOUT_TSTEP)
!
ILU = SIZE(XBLD)
!
!*       3.     Physiographic data fields from land cover:
!               -----------------------------------------
!
!*       4.     User physiographic fields:
!               -------------------------
!
!*       5.     Sky-view-factors:
!               ----------------
!
WHERE (XCAN_HW_RATIO /= XUNDEF)
 XSVF_ROAD = SQRT(XCAN_HW_RATIO**2+1.) - XCAN_HW_RATIO
 XSVF_WALL = 0.5 *  (XCAN_HW_RATIO + 1. - SQRT(XCAN_HW_RATIO**2+1.) ) &
                 /  XCAN_HW_RATIO
ELSEWHERE
 XSVF_ROAD = XUNDEF
 XSVF_WALL = XUNDEF
ENDWHERE
!
!
!*       6.     Prognostic fields:
!               -----------------
!
!*       7.     Infra-red Radiative fields:
!               --------------------------
!
!* snow long-wave properties (not initialized in read_gr_snow)
!
CALL INIT_SNOW_LW(XEMISSN,TSNOW_ROOF)
CALL INIT_SNOW_LW(XEMISSN,TSNOW_ROAD)
!
!* averaged albedo, emissivity and radiative temperature
!
CALL AVERAGED_TSRAD_TEB(XEMIS_ROOF,XT_ROOF(:,1), &
                        XEMIS_ROAD,XT_ROAD(:,1), &
                        XEMIS_WALL,XT_WALL(:,1), &
                        TSNOW_ROOF,TSNOW_ROAD,   &
                        XBLD,XWALL_O_HOR,        &
                        XSVF_ROAD,XSVF_WALL,     &
                        PEMIS,PTSRAD             )
!
!
!*       8.     Visible and near-infra-red Radiative fields:
!               -------------------------------------------
!
ALLOCATE(ZDIR_ALB(ILU))
ALLOCATE(ZSCA_ALB(ILU))
!
CALL AVERAGED_ALBEDO_TEB(PZENITH,                                  &
                     XBLD, XWALL_O_HOR, XCAN_HW_RATIO,             &
                     XALB_ROOF,                                    &
                     XALB_ROAD, XSVF_ROAD,                         &
                     XALB_WALL, XSVF_WALL,                         &
                     TSNOW_ROOF, TSNOW_ROAD,                       &
                     ZDIR_ALB, ZSCA_ALB                            )
!
!
ISWB=SIZE(PSW_BANDS)
DO JSWB=1,ISWB
  PDIR_ALB(:,JSWB) = ZDIR_ALB(:)
  PSCA_ALB(:,JSWB) = ZSCA_ALB(:)
END DO
!
DEALLOCATE(ZDIR_ALB)
DEALLOCATE(ZSCA_ALB)
!
END SUBROUTINE INIT_TEB