!-------------------------------------- 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 AVERAGED_ALBEDO_TEB(PZENITH,                      &,3
                     PBLD, PWALL_O_HOR, PCAN_HW_RATIO,             &
                     PALB_ROOF,                                    &
                     PALB_ROAD, PSVF_ROAD,                         &
                     PALB_WALL, PSVF_WALL,                         &
                     TSNOW_ROOF, TSNOW_ROAD,                       &
                     PDIR_ALB_TOWN, PSCA_ALB_TOWN                  )
!     ###################################################
!
!!**** *AVERAGED_ALBEDO_TEB* computes averaged albedo for TEB scheme
!!
!!    PURPOSE
!!    -------
!!
!!    METHOD
!!    ------
!!   
!!    EXTERNAL
!!    --------
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!    REFERENCE
!!    ---------
!!
!!    AUTHOR
!!    ------
!!
!!    V. Masson        Meteo-France
!!
!!    MODIFICATION
!!    ------------
!!
!!    Original    01/2004
!----------------------------------------------------------------------------
!
!*    0.     DECLARATION
!            -----------
!
USE MODD_TYPE_SNOW
!
USE MODI_URBAN_SOLAR_ABS
!
USE MODE_SURF_SNOW_FRAC
!
IMPLICIT NONE
!
!*    0.1    Declaration of arguments
!            ------------------------
!
REAL, DIMENSION(:), INTENT(IN) :: PZENITH      ! zenithal solar angle
!
REAL, DIMENSION(:), INTENT(IN) :: PBLD         ! building fraction
REAL, DIMENSION(:), INTENT(IN) :: PWALL_O_HOR  ! vertical surf. / horizontal surf.
REAL, DIMENSION(:), INTENT(IN) :: PSVF_ROAD    ! sky-view-factor from roads
REAL, DIMENSION(:), INTENT(IN) :: PSVF_WALL    ! sky-view-factor from walls
REAL, DIMENSION(:), INTENT(IN) :: PCAN_HW_RATIO! canyon height/width ratio
!
REAL, DIMENSION(:), INTENT(IN) :: PALB_ROOF    ! roof albedo
REAL, DIMENSION(:), INTENT(IN) :: PALB_ROAD    ! road albedo
REAL, DIMENSION(:), INTENT(IN) :: PALB_WALL    ! wall albedo
TYPE(SURF_SNOW),    INTENT(IN) :: TSNOW_ROOF   ! snow on roofs
TYPE(SURF_SNOW),    INTENT(IN) :: TSNOW_ROAD   ! snow on roads
!
REAL, DIMENSION(:), INTENT(OUT):: PDIR_ALB_TOWN ! direct albedo
REAL, DIMENSION(:), INTENT(OUT):: PSCA_ALB_TOWN ! diffuse albedo
!
!
!*    0.2    Declaration of local variables
!            ------------------------------
!
REAL, DIMENSION(SIZE(PBLD)) :: ZDN_ROOF       ! snow fraction 
REAL, DIMENSION(SIZE(PBLD)) :: ZDN_ROAD       ! on the surface
REAL, DIMENSION(SIZE(PBLD)) :: ZDF_ROOF       ! free-snow fraction 
REAL, DIMENSION(SIZE(PBLD)) :: ZDF_ROAD       ! on the surface
LOGICAL, DIMENSION(SIZE(PBLD)) :: GMASK       ! .false. (= no snow precip.)
!
!
REAL, DIMENSION(SIZE(PBLD)) :: ZDIR_SW     ! direct and diffuse shortwave radiation
REAL, DIMENSION(SIZE(PBLD)) :: ZSCA_SW     ! to mimic radiation behaviour of town
!
REAL, DIMENSION(SIZE(PBLD)) :: ZABS_SW_WALL! shortwave absorbed by walls
REAL, DIMENSION(SIZE(PBLD)) :: ZABS_SW_ROAD! shortwave absorbed by roads
REAL, DIMENSION(SIZE(PBLD)) :: ZABS_SW_ROOF! shortwave absorbed by roofs
REAL, DIMENSION(SIZE(PBLD)) :: ZABS_SW_SNOW_ROAD! shortwave absorbed by snow
REAL, DIMENSION(SIZE(PBLD)) :: ZABS_SW_SNOW_ROOF! on roads and roofs
!
!-------------------------------------------------------------------------------
!
!* snow fractions
!  --------------
!
GMASK(:) = .FALSE.
CALL SNOW_FRAC_ROAD(TSNOW_ROAD%WSNOW(:,1,1),GMASK,ZDN_ROAD,ZDF_ROAD)
CALL SNOW_FRAC_ROOF(TSNOW_ROOF%WSNOW(:,1,1),GMASK,ZDN_ROOF,ZDF_ROOF)
!
!
!* town  direct and diffuse albedo
!  -------------------------------
!
ZDIR_SW=1.
ZSCA_SW=1.
!
CALL URBAN_SOLAR_ABS(ZDIR_SW, ZSCA_SW, PZENITH,                    &
                     PBLD, PWALL_O_HOR, PCAN_HW_RATIO,             &
                     PALB_ROOF,                                    &
                     PALB_ROAD, PSVF_ROAD, PALB_WALL, PSVF_WALL,   &
                     TSNOW_ROOF%ALB(:,1), TSNOW_ROAD%ALB(:,1),     &
                     ZDN_ROOF, ZDF_ROOF, ZDN_ROAD, ZDF_ROAD,       &
                     ZABS_SW_ROOF, ZABS_SW_ROAD, ZABS_SW_WALL,     &
                     ZABS_SW_SNOW_ROOF, ZABS_SW_SNOW_ROAD,         &
                     PDIR_ALB_TOWN, PSCA_ALB_TOWN                  )
!
!-------------------------------------------------------------------------------
!
END SUBROUTINE AVERAGED_ALBEDO_TEB