4 PSNOWDZ, PSNOWSWE, PSNOWRHO, PSNOWGRAN1, PSNOWGRAN2, PSNOWAGE, &
5 PSNOWHIST, PSNOWTEMP, PSNOWLIQ, PDIRCOSZW, PSNOWDEND, PSNOWSPHER, &
6 PSNOWSIZE, PSNOWSSA, PSNOWTYPEMEPRA, PSNOWRAM, PSNOWSHEAR, &
7 PSNOWDEPTH_1DAYS, PSNOWDEPTH_3DAYS, PSNOWDEPTH_5DAYS, &
8 PSNOWDEPTH_7DAYS, PSNOWSWE_1DAYS, PSNOWSWE_3DAYS, PSNOWSWE_5DAYS,&
9 PSNOWSWE_7DAYS, PSNOWRAM_SONDE, PSNOW_WETTHICKNESS, PSNOW_REFROZENTHICKNESS)
18 USE modd_snow_par
,ONLY : icris_dend1d, icris_nondend1d, &
19 ifr, ifr_lb, ilb, ilb_fin, ilb_ang, iroul, ifin, ifin_ar, ifin_ang, &
20 ipl, ipl_gob, igob, igel, igob_fon, iron_ang, xx, xd1, xd2, xd3
24 CHARACTER(3),
INTENT(IN) :: HSNOWMETAMO
25 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSNOWDZ
26 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWSWE
27 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWRHO
28 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWGRAN1
29 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWGRAN2
30 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWAGE
31 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWHIST
32 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWTEMP
33 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWLIQ
34 REAL,
DIMENSION(:),
INTENT(IN) :: PDIRCOSZW
35 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSNOWDEND
36 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSNOWSPHER
37 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSNOWSIZE
38 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSNOWSSA
39 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSNOWTYPEMEPRA
40 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSNOWRAM
41 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PSNOWSHEAR
42 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOWDEPTH_1DAYS
43 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOWDEPTH_3DAYS
44 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOWDEPTH_5DAYS
45 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOWDEPTH_7DAYS
46 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOWSWE_1DAYS
47 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOWSWE_3DAYS
48 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOWSWE_5DAYS
49 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOWSWE_7DAYS
50 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOWRAM_SONDE
51 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOW_WETTHICKNESS
52 REAL,
DIMENSION(:),
INTENT(OUT) :: PSNOW_REFROZENTHICKNESS
54 REAL :: ZG1, ZG2, ZRFIN, ZRDEN, ZRFGF
58 LOGICAL,
DIMENSION(SIZE(PSNOWSWE,1)) :: GRAM, GWET, GREFROZEN
60 INTEGER :: ICLASS_DEND, ICLASS_SPHER, ICLASS_SIZE, ICLASS_HIST
93 psnow_wetthickness = 0.
94 psnow_refrozenthickness = 0.
100 DO jst=1,
SIZE(psnowswe,2)
101 DO jj=1,
SIZE(psnowswe,1)
103 IF (psnowswe(jj,jst)>0)
THEN 108 zg1 = psnowgran1(jj,jst)/99.
109 zrfin = 0.17*psnowrho(jj,jst)-31
111 IF (psnowgran1(jj,jst)>=0)
THEN 115 psnowsize(jj,jst) = psnowgran2(jj,jst)
116 psnowdend(jj,jst) = 0
117 psnowspher(jj,jst) = psnowgran1(jj,jst) / xx
120 zdiam = psnowsize(jj,jst) * psnowspher(jj,jst) + &
121 max( 0.0004, 0.5*psnowsize(jj,jst) ) * ( 1.-psnowspher(jj,jst) )
126 iclass_spher = min(int(10 * psnowspher(jj,jst) + 0.05),9)
131 iclass_hist = nint(psnowhist(jj,jst))
135 IF (psnowsize(jj,jst) < 0.00055)
THEN 137 ELSEIF (psnowsize(jj,jst) < 0.00105)
THEN 144 iclass = 1 + iclass_spher + iclass_size*10 + iclass_hist*30
147 psnowtypemepra(jj,jst) = icris_nondend1d(iclass)
155 ltherm=((psnowtemp(jj,jst)<272.96).OR.(psnowliq(jj,jst)/psnowdz(jj,jst)<=0.005))
157 SELECT CASE (nint(psnowtypemepra(jj,jst)))
159 psnowram(jj,jst)=max(3.,zrfin)
161 IF (psnowrho(jj,jst)<200)
THEN 162 psnowram(jj,jst)=zrfin*psnowspher(jj,jst)+&
163 (1- psnowspher(jj,jst))*(zrfin*(0.8-psnowsize(jj,jst))+2*psnowsize(jj,jst))
167 CASE (ifin_ar,igel,igob_fon,iron_ang)
170 psnowram(jj,jst)=max(10.,0.103*psnowrho(jj,jst)-19.666)
172 IF (psnowrho(jj,jst)<250)
THEN 175 psnowram(jj,jst)=max(2.,0.16*psnowrho(jj,jst)-54)
180 IF (psnowsize(jj,jst)>0.8)
THEN 181 psnowram(jj,jst)=max(3.,zrfin)*(0.8-psnowsize(jj,jst))+2*psnowsize(jj,jst)
192 psnowsize(jj,jst) =
xundef 193 psnowdend(jj,jst) = -psnowgran1(jj,jst) / xx
194 psnowspher(jj,jst) = psnowgran2(jj,jst) / xx
197 zdiam = psnowdend(jj,jst) * xd1 + (1 - psnowdend(jj,jst)) * &
198 (psnowspher(jj,jst) * xd2 + (1 - psnowspher(jj,jst)) * xd3)
204 iclass_dend = int(10 * psnowdend(jj,jst))
209 iclass_spher = min(int(10 * psnowspher(jj,jst) + 0.05),9)
212 iclass = 1 + iclass_dend + iclass_spher*10
215 psnowtypemepra(jj,jst) = icris_dend1d(iclass)
221 IF(psnowage(jj,jst)<=1)
THEN 222 psnowdepth_1days(jj) = psnowdepth_1days(jj) + psnowdz(jj,jst)
223 psnowswe_1days(jj) = psnowswe_1days(jj) + psnowswe(jj,jst)
226 IF(psnowage(jj,jst)<=3)
THEN 227 psnowdepth_3days(jj) = psnowdepth_3days(jj) + psnowdz(jj,jst)
228 psnowswe_3days(jj) = psnowswe_3days(jj) + psnowswe(jj,jst)
231 IF(psnowage(jj,jst)<=5)
THEN 232 psnowdepth_5days(jj) = psnowdepth_5days(jj) + psnowdz(jj,jst)
233 psnowswe_5days(jj) = psnowswe_5days(jj) + psnowswe(jj,jst)
236 IF(psnowage(jj,jst)<=7)
THEN 237 psnowdepth_7days(jj) = psnowdepth_7days(jj) + psnowdz(jj,jst)
238 psnowswe_7days(jj) = psnowswe_7days(jj) + psnowswe(jj,jst)
242 IF ((gram(jj)).AND.(psnowram(jj,jst)<=2.))
THEN 243 psnowram_sonde(jj)=psnowram_sonde(jj)+psnowdz(jj,jst)
249 IF ((gwet(jj)).AND.(psnowliq(jj,jst)>0.))
THEN 250 psnow_wetthickness(jj)=psnow_wetthickness(jj)+psnowdz(jj,jst)
255 IF ((grefrozen(jj)).AND.(psnowhist(jj,jst)>=2).AND.(psnowtemp(jj,jst)<273.15))
THEN 256 psnow_refrozenthickness(jj)=psnow_refrozenthickness(jj)+psnowdz(jj,jst)
258 grefrozen(jj)=.false.
262 IF ( hsnowmetamo==
'B92' )
THEN 263 psnowssa(jj,jst) = 6. / (
xrholi*zdiam)
265 psnowssa(jj,jst) = 6. / (
xrholi*psnowgran1(jj,jst))
subroutine snowcro_diag(HSNOWMETAMO, PSNOWDZ, PSNOWSWE, PSNOWRHO, PSNOWGRAN1, PSNOWGRAN2, PSNOWAGE, PSNOWHIST, PSNOWTEMP, PSNOWLIQ, PDIRCOSZW, PSNOWDEND, PSNOWSPHER, PSNOWSIZE, PSNOWSSA, PSNOWTYPEMEPRA, PSNOWRAM, PSNOWSHEAR, PSNOWDEPTH_1DAYS, PSNOWDEPTH_3DAYS, PSNOWDEPTH_5DAYS, PSNOWDEPTH_7DAYS, PSNOWSWE_1DAYS, PSNOWSWE_3DAYS, PSNOWSWE_5DAYS, PSNOWSWE_7DAYS, PSNOWRAM_SONDE, PSNOW_WETTHICKNESS, PSNOW_REFROZENTHICKNESS)