1 |
|
|
|
2 |
|
|
! $Header$ |
3 |
|
|
|
4 |
|
|
|
5 |
|
|
|
6 |
|
|
SUBROUTINE hydrol(dtime, pctsrf, rain_fall, snow_fall, evap, agesno, tsol, & |
7 |
|
|
qsol, snow, runoff) |
8 |
|
|
USE dimphy |
9 |
|
|
USE indice_sol_mod |
10 |
|
|
|
11 |
|
|
IMPLICIT NONE |
12 |
|
|
! ====================================================================== |
13 |
|
|
! Auteur(s): Z.X. Li (LMD/CNRS) |
14 |
|
|
! date: 19940414 |
15 |
|
|
! ====================================================================== |
16 |
|
|
|
17 |
|
|
! Traitement de l'hydrologie du sol |
18 |
|
|
! --------------------------------- |
19 |
|
|
! rain_fall: taux de pluie |
20 |
|
|
! snow_fall: taux de neige |
21 |
|
|
! agesno: age de la neige |
22 |
|
|
! evap: taux d'evaporation |
23 |
|
|
! tsol: temperature du sol |
24 |
|
|
! qsol: humidite du sol |
25 |
|
|
! snow: couverture neigeuse |
26 |
|
|
|
27 |
|
|
include "YOMCST.h" |
28 |
|
|
|
29 |
|
|
REAL chasno ! epaisseur du sol: 0.15 m |
30 |
|
|
PARAMETER (chasno=3.334E+05/(2.3867E+06*0.15)) |
31 |
|
|
REAL mx_eau_sol |
32 |
|
|
PARAMETER (mx_eau_sol=150.0) |
33 |
|
|
|
34 |
|
|
REAL dtime |
35 |
|
|
REAL pctsrf(klon, nbsrf) |
36 |
|
|
REAL snow(klon, nbsrf), tsol(klon, nbsrf), qsol(klon, nbsrf) |
37 |
|
|
REAL snow_fall(klon), rain_fall(klon), evap(klon) |
38 |
|
|
REAL runoff(klon), agesno(klon) |
39 |
|
|
|
40 |
|
|
INTEGER i, is |
41 |
|
|
REAL subli, fsno |
42 |
|
|
! ----------------------------------------------------------------------- |
43 |
|
|
DO i = 1, klon |
44 |
|
|
|
45 |
|
|
runoff(i) = 0.0 |
46 |
|
|
|
47 |
|
|
is = is_ter |
48 |
|
|
snow(i, is) = snow(i, is) + snow_fall(i)*dtime*pctsrf(i, is) |
49 |
|
|
IF (pctsrf(i,is)>epsfra) THEN |
50 |
|
|
subli = min(evap(i)*dtime, snow(i,is)) |
51 |
|
|
snow(i, is) = snow(i, is) - subli |
52 |
|
|
fsno = min(max((tsol(i,is)-rtt)/chasno,0.0), snow(i,is)) |
53 |
|
|
snow(i, is) = snow(i, is) - fsno |
54 |
|
|
tsol(i, is) = tsol(i, is) - fsno*chasno |
55 |
|
|
qsol(i, is) = qsol(i, is) + (rain_fall(i)-evap(i))*dtime + subli + fsno |
56 |
|
|
qsol(i, is) = max(qsol(i,is), 0.0) |
57 |
|
|
runoff(i) = runoff(i) + max(qsol(i,is)-mx_eau_sol, 0.0)*pctsrf(i, is) |
58 |
|
|
qsol(i, is) = min(qsol(i,is), mx_eau_sol) |
59 |
|
|
! cc ELSE |
60 |
|
|
! cc snow(i,is) = 0.0 |
61 |
|
|
! cc qsol(i,is) = 0.0 |
62 |
|
|
! cc tsol(i,is) = 0.0 |
63 |
|
|
END IF |
64 |
|
|
|
65 |
|
|
is = is_lic |
66 |
|
|
snow(i, is) = snow(i, is) + snow_fall(i)*dtime*pctsrf(i, is) |
67 |
|
|
IF (pctsrf(i,is)>epsfra) THEN |
68 |
|
|
subli = min(evap(i)*dtime, snow(i,is)) |
69 |
|
|
snow(i, is) = snow(i, is) - subli |
70 |
|
|
fsno = min(max((tsol(i,is)-rtt)/chasno,0.0), snow(i,is)) |
71 |
|
|
snow(i, is) = snow(i, is) - fsno |
72 |
|
|
tsol(i, is) = tsol(i, is) - fsno*chasno |
73 |
|
|
qsol(i, is) = qsol(i, is) + (rain_fall(i)-evap(i))*dtime + subli + fsno |
74 |
|
|
qsol(i, is) = max(qsol(i,is), 0.0) |
75 |
|
|
runoff(i) = runoff(i) + max(qsol(i,is)-mx_eau_sol, 0.0)*pctsrf(i, is) |
76 |
|
|
qsol(i, is) = min(qsol(i,is), mx_eau_sol) |
77 |
|
|
! je limite la temperature a RTT-1.8 (il faudrait aussi prendre l'eau |
78 |
|
|
! de |
79 |
|
|
! la fonte) (Laurent Li, le 14mars98): |
80 |
|
|
! IM cf GK tsol(i,is) = MIN(tsol(i,is),RTT-1.8) |
81 |
|
|
! IM cf GK : la glace fond a 0C, non pas a -1.8 |
82 |
|
|
tsol(i, is) = min(tsol(i,is), rtt) |
83 |
|
|
|
84 |
|
|
! cc ELSE |
85 |
|
|
! cc snow(i,is) = 0.0 |
86 |
|
|
! cc qsol(i,is) = 0.0 |
87 |
|
|
! cc tsol(i,is) = 0.0 |
88 |
|
|
END IF |
89 |
|
|
|
90 |
|
|
is = is_sic |
91 |
|
|
qsol(i, is) = 0.0 |
92 |
|
|
snow(i, is) = snow(i, is) + snow_fall(i)*dtime*pctsrf(i, is) |
93 |
|
|
IF (pctsrf(i,is)>epsfra) THEN |
94 |
|
|
subli = min(evap(i)*dtime, snow(i,is)) |
95 |
|
|
snow(i, is) = snow(i, is) - subli |
96 |
|
|
fsno = min(max((tsol(i,is)-rtt)/chasno,0.0), snow(i,is)) |
97 |
|
|
snow(i, is) = snow(i, is) - fsno |
98 |
|
|
tsol(i, is) = tsol(i, is) - fsno*chasno |
99 |
|
|
! je limite la temperature a RTT-1.8 (il faudrait aussi prendre l'eau |
100 |
|
|
! de |
101 |
|
|
! la fonte) (Laurent Li, le 14mars98): |
102 |
|
|
! IM cf GK tsol(i,is) = MIN(tsol(i,is),RTT-1.8) |
103 |
|
|
! IM cf GK : la glace fond a 0C, non pas a -1.8 |
104 |
|
|
tsol(i, is) = min(tsol(i,is), rtt) |
105 |
|
|
|
106 |
|
|
! cc ELSE |
107 |
|
|
! cc snow(i,is) = 0.0 |
108 |
|
|
! cc tsol(i,is) = 0.0 |
109 |
|
|
END IF |
110 |
|
|
|
111 |
|
|
agesno(i) = (agesno(i)+(1.-agesno(i)/50.)*dtime/86400.)* & |
112 |
|
|
exp(-1.*max(0.0,snow_fall(i))*dtime/0.3) |
113 |
|
|
agesno(i) = max(agesno(i), 0.0) |
114 |
|
|
|
115 |
|
|
END DO |
116 |
|
|
|
117 |
|
|
RETURN |
118 |
|
|
END SUBROUTINE hydrol |