source: LMDZ.3.3/branches/LF/libf/phylmd/hydrol.F @ 301

Last change on this file since 301 was 2, checked in by lmdz, 25 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 3.9 KB
Line 
1      SUBROUTINE hydrol(dtime,pctsrf,rain_fall,snow_fall,evap,
2     .                  agesno, tsol,qsol,snow,runoff)
3      IMPLICIT none
4c======================================================================
5c Auteur(s): Z.X. Li (LMD/CNRS)
6c date: 19940414
7c======================================================================
8c
9c Traitement de l'hydrologie du sol
10c ---------------------------------
11c rain_fall: taux de pluie
12c snow_fall: taux de neige
13c agesno: age de la neige
14c evap: taux d'evaporation
15c tsol: temperature du sol
16c qsol: humidite du sol
17c snow: couverture neigeuse
18C
19#include "dimensions.h"
20#include "dimphy.h"
21#include "YOMCST.h"
22#include "indicesol.h"
23c
24      REAL chasno ! epaisseur du sol: 0.15 m
25      PARAMETER (chasno=3.334E+05/(2.3867E+06*0.15))
26      REAL mx_eau_sol
27      PARAMETER (mx_eau_sol=150.0)
28c
29      REAL dtime
30      REAL pctsrf(klon,nbsrf)
31      REAL snow(klon,nbsrf), tsol(klon,nbsrf), qsol(klon,nbsrf)
32      REAL snow_fall(klon), rain_fall(klon), evap(klon)
33      REAL runoff(klon), agesno(klon)
34C
35      INTEGER i, is
36      REAL subli, fsno
37C-----------------------------------------------------------------------
38      DO 99999 i = 1, klon
39c
40         runoff(i) = 0.0
41c
42         is = is_ter
43         snow(i,is) = snow(i,is) + snow_fall(i) * dtime * pctsrf(i,is)
44         IF (pctsrf(i,is) .GT. epsfra) THEN
45            subli = MIN(evap(i)*dtime,snow(i,is))
46            snow(i,is) = snow(i,is) - subli
47            fsno = MIN(MAX((tsol(i,is)-RTT)/chasno,0.0),snow(i,is))
48            snow(i,is) = snow(i,is) - fsno
49            tsol(i,is) = tsol(i,is) - fsno*chasno
50            qsol(i,is) = qsol(i,is) + (rain_fall(i)-evap(i))*dtime
51     .                              + subli + fsno
52            qsol(i,is) = MAX(qsol(i,is),0.0)
53            runoff(i) = runoff(i) + MAX(qsol(i,is)-mx_eau_sol, 0.0)
54     .                            * pctsrf(i,is)
55            qsol(i,is) = MIN(qsol(i,is),mx_eau_sol)
56ccc         ELSE
57ccc            snow(i,is) = 0.0
58ccc            qsol(i,is) = 0.0
59ccc            tsol(i,is) = 0.0
60         ENDIF
61c
62         is = is_lic
63         snow(i,is) = snow(i,is) + snow_fall(i) * dtime * pctsrf(i,is)
64         IF (pctsrf(i,is) .GT. epsfra) THEN
65            subli = MIN(evap(i)*dtime,snow(i,is))
66            snow(i,is) = snow(i,is) - subli
67            fsno = MIN(MAX((tsol(i,is)-RTT)/chasno,0.0),snow(i,is))
68            snow(i,is) = snow(i,is) - fsno
69            tsol(i,is) = tsol(i,is) - fsno*chasno
70            qsol(i,is) = qsol(i,is) + (rain_fall(i)-evap(i))*dtime
71     .                              + subli + fsno
72            qsol(i,is) = MAX(qsol(i,is),0.0)
73            runoff(i) = runoff(i) + MAX(qsol(i,is)-mx_eau_sol, 0.0)
74     .                            * pctsrf(i,is)
75            qsol(i,is) = MIN(qsol(i,is),mx_eau_sol)
76c je limite la temperature a RTT-1.8 (il faudrait aussi prendre l'eau de
77c la fonte) (Laurent Li, le 14mars98):
78      tsol(i,is) = MIN(tsol(i,is),RTT-1.8)
79c
80ccc         ELSE
81ccc            snow(i,is) = 0.0
82ccc            qsol(i,is) = 0.0
83ccc            tsol(i,is) = 0.0
84         ENDIF
85c
86         is = is_sic
87         qsol(i,is) = 0.0
88         snow(i,is) = snow(i,is) + snow_fall(i) * dtime * pctsrf(i,is)
89         IF (pctsrf(i,is) .GT. epsfra) THEN
90            subli = MIN(evap(i)*dtime,snow(i,is))
91            snow(i,is) = snow(i,is) - subli
92            fsno = MIN(MAX((tsol(i,is)-RTT)/chasno,0.0),snow(i,is))
93            snow(i,is) = snow(i,is) - fsno
94            tsol(i,is) = tsol(i,is) - fsno*chasno
95c je limite la temperature a RTT-1.8 (il faudrait aussi prendre l'eau de
96c la fonte) (Laurent Li, le 14mars98):
97      tsol(i,is) = MIN(tsol(i,is),RTT-1.8)
98c
99ccc         ELSE
100ccc            snow(i,is) = 0.0
101ccc            tsol(i,is) = 0.0
102         ENDIF
103c
104         agesno(i) = (agesno(i)+ (1.-agesno(i)/50.)*dtime/86400.)
105     .             * EXP(-1.*MAX(0.0,snow_fall(i))*dtime/0.3)
106         agesno(i) = MAX(agesno(i),0.0)
107c
10899999 CONTINUE
109c
110      RETURN
111      END
Note: See TracBrowser for help on using the repository browser.