!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
***s/r calcalb1 - compute surface albedo considering vegetation and snow.
*

      subroutine calcalb1(alb, veg, sno, anal, ni) 2
*
#include "impnone.cdk"
*
      integer ni
      real    alb(ni),veg(ni),sno(ni),
     +        anal(ni)
*
*Author
*          B. Brasnett/A. Methot - CMC - March 1996 (from GEM)
*
*Revision
* 001      N. Brunet (Fall 1999)  - routine moved to "physics" library
*                              (adaptation)
* 002      B. Dugas (July 2000) - restrict to soil
*
*Language
*          Fortran 77
*
*Object
*          Compute surface albedo considering vegetation, ice, snow
*          and a background albedo.
*          According to the value of  bkgalb the background albedo
*          is taken from climatological file ( bkgalb=true)
*          or from a table of background albedo for each vegetation
*          type (given within this subroutine).
*
*          The routine modifies this background albedo considering both
*          the snow depth analysis and a table of snow masking depths
*          for each vegetation type ( given in this subroutine ).
*
*          Albedo over ice and snow is 0.8.
*
*Arguments
*
*          - Input -
* ALB      climatological "no snow" albedos
* VEG      coded vegetation types 
* SNO      snow depth (metres)
* ICE      ice cover  (0. - 1.)
* MASK     land-sea mask 
* NI       first working dimension of all fields
*
*          - Output -
* ANAL     final albedo values
*
*NOTES
*          1) THE METHOD USED TO CALCULATE THE ALBEDO WITH SNOW HAS BEEN
*             ADOPTED FROM A. HENDERSON-SELLERS AND J. GRAHAM COGLEY,
*             TRENT U. TECHNICAL NOTE 85-1, OBTAINED FROM CCRN.
*
*          2) This subroutine expects snow depth (INPUT) in metres.
*
***
*
*
      INTEGER I,ICODE,MG2,IFACTR,M,G,GG2 ,J,VG2,AG2,A
      REAL    MASKDP(0:24)
      real    albveg(0:24)
      REAL    ALBSNO
      real    pralg, albgbar
      REAL    ISNO
*
#include "options.cdk"
*                                   NOT USED            WATER
      DATA albveg(0), albveg(1) /    0.06,               0.06/
*                                  GLACIAL ICE    INLAND LAKES      
      DATA albveg(2),albveg(3) /     0.80,               0.06 /
*                            EVERGREEN NEEDLELEAF EVERGREEN BROADLEAF
      DATA albveg(4),albveg(5) /     0.14,               0.14/
*                            DECIDUOUS NEEDLELEAF DECIDUOUS BROADLEAF
      DATA albveg(6),albveg(7) /     0.13,               0.13/ 
*                            TROPICAL BROADLEAF   DROUGHT DECIDUOUS
      DATA albveg(8),albveg(9) /     0.13,               0.13/
*                             EVERGREEN SHRUB     BROADLEAF SHRUB
      DATA albveg(10),albveg(11)/    0.17,               0.16/
*                             THORN SHRUB          SHORT GRASS, FORBS
      DATA albveg(12),albveg(13)/    0.16,               0.19/
*                             LONG GRASS                ARABLE
      DATA albveg(14),albveg(15)/    0.20,               0.20/
*                                  RICE                 SUGAR
      DATA albveg(16),albveg(17)/    0.12,               0.17/
*                                  MAIZE                COTTON
      DATA albveg(18),albveg(19)/     0.19,               0.19/
*                              IRRIGATED CROP           URBAN
      DATA albveg(20),albveg(21)/     0.25,               0.18/
*                                  TUNDRA                SWAMP
      DATA albveg(22),albveg(23)/     0.15,               0.12/
*                              SANDY DRY SOIL
      DATA albveg(24)      /          0.35                   /
*
*
*
*                                 NOT USED             WATER
      DATA MASKDP(0), MASKDP(1) /    0.01,               0.01/
*                                 GLACIAL ICE     INLAND LAKES
      DATA MASKDP(2),MASKDP(3) /     0.01,               0.01/
*                            EVERGREEN NEEDLELEAF EVERGREEN BROADLEAF
      DATA MASKDP(4),MASKDP(5) /    12.00,               8.00/
*                            DECIDUOUS NEEDLELEAF DECIDUOUS BROADLEAF
      DATA MASKDP(6),MASKDP(7) /     8.00,               8.00/
*                            TROPICAL BROADLEAF   DROUGHT DECIDUOUS
      DATA MASKDP(8),MASKDP(9) /     8.00,               4.00/
*                             EVERGREEN SHRUB     BROADLEAF SHRUB
      DATA MASKDP(10),MASKDP(11)/    2.00,               1.00/
*                             THORN SHRUB          SHORT GRASS, FORBS
      DATA MASKDP(12),MASKDP(13)/    1.00,               0.10/
*                             LONG GRASS                ARABLE
      DATA MASKDP(14),MASKDP(15)/    0.15,               0.10/
*                                  RICE                 SUGAR
      DATA MASKDP(16),MASKDP(17)/    0.10,               0.10/
*                                  MAIZE                COTTON
      DATA MASKDP(18),MASKDP(19)/    0.10,               0.10/
*                              IRRIGATED CROP           URBAN
      DATA MASKDP(20),MASKDP(21)/    0.10,               4.00/
*                                  TUNDRA                SWAMP
      DATA MASKDP(22),MASKDP(23)/    0.02,               0.01/
*                              SANDY DRY SOIL
      DATA MASKDP(24)      /         0.01                    /
*
*
      DATA ALBSNO/0.8/
***********************************************************************
*
*     isno = 1 centimetre
      ISNO = 0.01
      DO 10 I=1,ni

        ICODE = MAX(MIN(24,NINT(VEG(I))),1)

*               compute albedo over ground considering snow and vegetation

        if ( bkgalb ) then
                  albgbar = alb(i)
        else
                  albgbar = albveg(icode)
        endif

        IF ( sno(i) .GT. ISNO ) THEN
           IF ( sno(i) .LE. MASKDP(ICODE) ) THEN
               pralg = albgbar + (sno(i)/maskdp(icode)) *
     %                                               (albsno-albgbar)
           ELSE
               pralg = albsno
           ENDIF
        ELSE
               pralg = albgbar
        ENDIF
*
        anal(i) =  pralg

 10   CONTINUE
*
      RETURN
      END