SURFEX v7.3
General documentation of Surfex
|
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