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