SURFEX v8.1
General documentation of Surfex
isba_snow_frac.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE isba_snow_frac(HSNOW, PWSNOW, PRSNOW, PASNOW, &
7  PVEG, PLAI, PZ0, PPSN, PPSNV_A, PPSNG, PPSNV )
8 ! ##########################################################################
9 !
10 !!**** *ISBA_SNOW_FRAC*
11 !!
12 !! PURPOSE
13 !! -------
14 !
15 ! Calculates grid-averaged albedo and emissivity (according to snow scheme)
16 !
17 !! EXTERNAL
18 !! --------
19 !!
20 !! none
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! AUTHOR
26 !! ------
27 !!
28 !! S. Belair * Meteo-France *
29 !-------------------------------------------------------------------------------
30 !
31 !* 0. DECLARATIONS
32 ! ------------
33 !
34 USE modd_snow_par , ONLY : xemissn, xemcrin, xsnowdmin, &
35  xrhosmax_es, xrhosmin_es, &
36  xwcrn_expl, xdcrn_expl
37 !
39 !
41 !
42 !
43 USE yomhook ,ONLY : lhook, dr_hook
44 USE parkind1 ,ONLY : jprb
45 !
46 IMPLICIT NONE
47 !
48 !* 0.1 declarations of arguments
49 !
50  CHARACTER(LEN=*) , INTENT(IN) :: HSNOW ! ISBA snow scheme
51 !
52 REAL, DIMENSION(:,:), INTENT(IN) :: PWSNOW ! snow reservoir
53 REAL, DIMENSION(:,:), INTENT(IN) :: PRSNOW ! snow density
54 REAL, DIMENSION(:) , INTENT(IN) :: PASNOW ! snow albedo
55 REAL, DIMENSION(:) , INTENT(IN) :: PVEG
56 REAL, DIMENSION(:) , INTENT(IN) :: PLAI
57 REAL, DIMENSION(:) , INTENT(IN) :: PZ0
58 REAL, DIMENSION(:) , INTENT(INOUT):: PPSN
59 REAL, DIMENSION(:) , INTENT(INOUT):: PPSNV_A
60 REAL, DIMENSION(:) , INTENT(INOUT):: PPSNG
61 REAL, DIMENSION(:) , INTENT(INOUT):: PPSNV
62 ! PVEG = fraction of vegetation
63 ! PLAI = leaf area index
64 ! PZ0 = roughness length for momentum
65 ! PPSN = grid fraction covered by snow
66 ! PPSNG = fraction of the ground covered by snow
67 ! PPSNV = fraction of the veg covered by snow
68 !
69 !-------------------------------------------------------------------------------
70 !
71 !* 0. Local variables
72 ! ---------------
73 !
74 INTEGER :: JLAYER
75 REAL, DIMENSION(SIZE(PVEG)) :: ZSNOWSWE
76 REAL, DIMENSION(SIZE(PVEG)) :: ZSNOWD
77 REAL, DIMENSION(SIZE(PVEG)) :: ZSNOWRHO
78 REAL(KIND=JPRB) :: ZHOOK_HANDLE
79 !
80 !-------------------------------------------------------------------------------
81 !
82 IF (lhook) CALL dr_hook('ISBA_SNOW_FRAC',0,zhook_handle)
83 !
84 !* 1. Compute Total SWE (kg m-2) and snowpack average density (kg m-3)
85 ! ----------------------------------------------------------------
86 !
87 zsnowswe(:) = 0.
88 !
89 DO jlayer=1,SIZE(pwsnow,2)
90  zsnowswe(:) = zsnowswe(:) + pwsnow(:,jlayer)
91 END DO
92 !
93 IF (hsnow == '3-L' .OR. hsnow == 'CRO') THEN
94  zsnowd(:) = 0.
95  DO jlayer=1,SIZE(pwsnow,2)
96  zsnowd (:) = zsnowd(:) + pwsnow(:,jlayer) / prsnow(:,jlayer)
97  END DO
98  zsnowrho(:) = zsnowswe(:)/max(xsnowdmin,zsnowd(:))
99  zsnowrho(:) = max(xrhosmin_es,min(xrhosmax_es,zsnowrho(:)))
100 ELSE
101  zsnowrho(:) = prsnow(:,1)
102 END IF
103 !
104 !* 2. Snow fraction over ground
105 ! -------------------------
106 !
107 IF (hsnow == 'CRO' .OR. hsnow == '3-L') THEN
108  ppsng(:) = min(1.0, zsnowd(:)/xdcrn_expl)
109 ELSE
110  ppsng(:) = snow_frac_ground(zsnowswe)
111 ENDIF
112 !
113 !* 3. Snow fraction over vegetation
114 ! -----------------------------
115 !
116 IF (hsnow == 'EBA' ) THEN
117  ppsnv_a(:) = snow_frac_veg_a(ppsng,plai,pasnow)
118  ppsnv(:) = ppsnv_a(:)
119 ELSE
120  ppsnv(:) = snow_frac_veg(ppsng,zsnowswe,pz0,zsnowrho)
121 ENDIF
122 !
123 !* 4. Total snow fraction
124 ! -------------------
125 !
126 ppsn(:) = snow_frac_nat(zsnowswe,ppsng,ppsnv,pveg)
127 !
128 IF (lsnow_frac_tot) THEN
129  ppsn(:) = min(1.0, zsnowswe(:)/xwcrn_expl)
130  ppsng(:) = ppsn(:)
131  ppsnv(:) = ppsn(:)
132 ENDIF
133 !
134 IF (lhook) CALL dr_hook('ISBA_SNOW_FRAC',1,zhook_handle)
135 !
136 !-------------------------------------------------------------------------------
137 !
138 END SUBROUTINE isba_snow_frac
subroutine isba_snow_frac(HSNOW, PWSNOW, PRSNOW, PASNOW, PVEG, PLAI, PZ0, PPSN, PPSNV_A, PPSNG, P
real function, dimension(size(p_lai)) snow_frac_veg_a(P_PSNG, P_LAI, P_SNOWALB)
integer, parameter jprb
Definition: parkind1.F90:32
real function, dimension(size(pwsnow)) snow_frac_veg(PPSNG, PWSNOW, PZ0VEG, PRHOS)
logical lhook
Definition: yomhook.F90:15
logical lsnow_frac_tot
real function, dimension(size(pwsnow)) snow_frac_ground(PWSNOW)
real function, dimension(size(pwsnow)) snow_frac_nat(PWSNOW, PPSNG, PPSNV, PVEG)