LMDZ
hydrol.F90
Go to the documentation of this file.
1 
2 ! $Id: hydrol.F90 2346 2015-08-21 15:13:46Z emillour $
3 
4 
5 
6 SUBROUTINE hydrol(dtime, pctsrf, rain_fall, snow_fall, evap, agesno, tsol, &
7  qsol, snow, runoff)
8  USE dimphy
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
integer, parameter is_ter
integer, save klon
Definition: dimphy.F90:3
integer, parameter is_lic
subroutine hydrol(dtime, pctsrf, rain_fall, snow_fall, evap, agesno, tsol, qsol, snow, runoff)
Definition: hydrol.F90:8
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
integer, parameter nbsrf
real, parameter epsfra
integer, parameter is_sic
Definition: dimphy.F90:1