SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/isba_snow_frac.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE ISBA_SNOW_FRAC(HSNOW,                                &
00003                                 PWSNOW, PRSNOW, PASNOW,               &
00004                                 PVEG, PLAI, PZ0,                      &
00005                                 PPSN, PPSNV_A, PPSNG, PPSNV            )  
00006 !     ##########################################################################
00007 !
00008 !!****  *ISBA_SNOW_FRAC*  
00009 !!
00010 !!    PURPOSE
00011 !!    -------
00012 !
00013 !     Calculates grid-averaged albedo and emissivity (according to snow scheme)
00014 !         
00015 !!    EXTERNAL
00016 !!    --------
00017 !!
00018 !!    none
00019 !!
00020 !!    IMPLICIT ARGUMENTS
00021 !!    ------------------ 
00022 !!      
00023 !!    AUTHOR
00024 !!    ------
00025 !!
00026 !!      S. Belair           * Meteo-France *
00027 !-------------------------------------------------------------------------------
00028 !
00029 !*       0.     DECLARATIONS
00030 !               ------------
00031 !
00032 USE MODD_SNOW_PAR   , ONLY : XEMISSN, XEMCRIN, XSNOWDMIN, &
00033                              XRHOSMAX_ES, XRHOSMIN_ES, &
00034                              XWCRN_EXPL 
00035 !
00036 USE MODD_PREP_SNOW, ONLY : LSNOW_FRAC_TOT
00037 !
00038 USE MODE_SURF_SNOW_FRAC
00039 !
00040 !
00041 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00042 USE PARKIND1  ,ONLY : JPRB
00043 !
00044 IMPLICIT NONE
00045 !
00046 !*      0.1    declarations of arguments
00047 !
00048  CHARACTER(LEN=*)    , INTENT(IN)   :: HSNOW      ! ISBA snow scheme
00049 !
00050 REAL, DIMENSION(:,:), INTENT(IN)   :: PWSNOW     ! snow reservoir
00051 REAL, DIMENSION(:,:), INTENT(IN)   :: PRSNOW     ! snow density
00052 REAL, DIMENSION(:)  , INTENT(IN)   :: PASNOW     ! snow albedo
00053 REAL, DIMENSION(:)  , INTENT(IN)   :: PVEG
00054 REAL, DIMENSION(:)  , INTENT(IN)   :: PLAI
00055 REAL, DIMENSION(:)  , INTENT(IN)   :: PZ0
00056 REAL, DIMENSION(:)  , INTENT(INOUT):: PPSN
00057 REAL, DIMENSION(:)  , INTENT(INOUT):: PPSNV_A
00058 REAL, DIMENSION(:)  , INTENT(INOUT):: PPSNG
00059 REAL, DIMENSION(:)  , INTENT(INOUT):: PPSNV
00060 !                                     PVEG = fraction of vegetation
00061 !                                     PLAI = leaf area index
00062 !                                     PZ0  = roughness length for momentum
00063 !                                     PPSN = grid fraction covered by snow
00064 !                                     PPSNG = fraction of the ground covered by snow 
00065 !                                     PPSNV = fraction of the veg covered by snow 
00066 !
00067 !-------------------------------------------------------------------------------
00068 !
00069 !*      0.     Local variables
00070 !              ---------------
00071 !
00072 INTEGER                          :: JLAYER
00073 REAL, DIMENSION(SIZE(PVEG))      :: ZSNOWSWE
00074 REAL, DIMENSION(SIZE(PVEG))      :: ZSNOWD
00075 REAL, DIMENSION(SIZE(PVEG))      :: ZSNOWRHO
00076 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00077 !
00078 !-------------------------------------------------------------------------------
00079 !
00080 !*      1.     Compute snow fractions
00081 !              ----------------------
00082 !
00083 !       1.a    Total SWE (kg m-2) and snowpack average density (kg m-3)
00084 !
00085 IF (LHOOK) CALL DR_HOOK('ISBA_SNOW_FRAC',0,ZHOOK_HANDLE)
00086 ZSNOWSWE(:) = 0.
00087 !
00088 DO JLAYER=1,SIZE(PWSNOW,2)
00089   ZSNOWSWE(:) = ZSNOWSWE(:) + PWSNOW(:,JLAYER)
00090 END DO
00091 !
00092 IF (HSNOW == '3-L' .OR. HSNOW == 'CRO') THEN                  
00093    ZSNOWD  (:) = 0.
00094    DO JLAYER=1,SIZE(PWSNOW,2)
00095      ZSNOWD  (:) = ZSNOWD(:) + PWSNOW(:,JLAYER) / PRSNOW(:,JLAYER)
00096    END DO
00097    ZSNOWRHO(:) = ZSNOWSWE(:)/MAX(XSNOWDMIN,ZSNOWD(:))
00098    ZSNOWRHO(:) = MAX(XRHOSMIN_ES,MIN(XRHOSMAX_ES,ZSNOWRHO(:)))
00099 ELSE
00100    ZSNOWRHO(:) = PRSNOW(:,1)
00101 END IF
00102 !
00103 !       1.b    Snow fractions
00104 !
00105 PPSNG(:) = SNOW_FRAC_GROUND(ZSNOWSWE)
00106 !
00107 IF (HSNOW == 'EBA' ) THEN
00108    PPSNV_A(:) = SNOW_FRAC_VEG_A (PPSNG,PLAI,PASNOW)
00109    PPSNV  (:) = PPSNV_A(:)
00110 ELSE
00111    PPSNV  (:) = SNOW_FRAC_VEG   (PPSNG,ZSNOWSWE,PZ0,ZSNOWRHO)
00112 ENDIF
00113 !
00114 PPSN(:)       = SNOW_FRAC_NAT(ZSNOWSWE,PPSNG,PPSNV,PVEG)
00115 !
00116 IF (LSNOW_FRAC_TOT) THEN
00117   PPSN(:) = MIN(1.0, ZSNOWSWE(:)/XWCRN_EXPL)      
00118   PPSNG(:) = PPSN(:)
00119   PPSNV(:) = PPSN(:)
00120 ENDIF
00121 !
00122 IF (LHOOK) CALL DR_HOOK('ISBA_SNOW_FRAC',1,ZHOOK_HANDLE)
00123 !
00124 !-------------------------------------------------------------------------------
00125 !
00126 END SUBROUTINE ISBA_SNOW_FRAC