source: LMDZ6/trunk/libf/phylmd/hydrol.f90 @ 5322

Last change on this file since 5322 was 5285, checked in by abarral, 3 weeks ago

As discussed internally, remove generic ONLY: ... for new _mod_h modules

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.8 KB
Line 
1
2! $Header$
3
4
5
6SUBROUTINE hydrol(dtime, pctsrf, rain_fall, snow_fall, evap, agesno, tsol, &
7    qsol, snow, runoff)
8  USE dimphy
9  USE indice_sol_mod
10
11  USE yomcst_mod_h
12IMPLICIT NONE
13  ! ======================================================================
14  ! Auteur(s): Z.X. Li (LMD/CNRS)
15  ! date: 19940414
16  ! ======================================================================
17
18  ! Traitement de l'hydrologie du sol
19  ! ---------------------------------
20  ! rain_fall: taux de pluie
21  ! snow_fall: taux de neige
22  ! agesno: age de la neige
23  ! evap: taux d'evaporation
24  ! tsol: temperature du sol
25  ! qsol: humidite du sol
26  ! snow: couverture neigeuse
27
28
29
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
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
41  INTEGER i, is
42  REAL subli, fsno
43  ! -----------------------------------------------------------------------
44  DO i = 1, klon
45
46    runoff(i) = 0.0
47
48    is = is_ter
49    snow(i, is) = snow(i, is) + snow_fall(i)*dtime*pctsrf(i, is)
50    IF (pctsrf(i,is)>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 + subli + fsno
57      qsol(i, is) = max(qsol(i,is), 0.0)
58      runoff(i) = runoff(i) + max(qsol(i,is)-mx_eau_sol, 0.0)*pctsrf(i, is)
59      qsol(i, is) = min(qsol(i,is), mx_eau_sol)
60      ! cc         ELSE
61      ! cc            snow(i,is) = 0.0
62      ! cc            qsol(i,is) = 0.0
63      ! cc            tsol(i,is) = 0.0
64    END IF
65
66    is = is_lic
67    snow(i, is) = snow(i, is) + snow_fall(i)*dtime*pctsrf(i, is)
68    IF (pctsrf(i,is)>epsfra) THEN
69      subli = min(evap(i)*dtime, snow(i,is))
70      snow(i, is) = snow(i, is) - subli
71      fsno = min(max((tsol(i,is)-rtt)/chasno,0.0), snow(i,is))
72      snow(i, is) = snow(i, is) - fsno
73      tsol(i, is) = tsol(i, is) - fsno*chasno
74      qsol(i, is) = qsol(i, is) + (rain_fall(i)-evap(i))*dtime + subli + fsno
75      qsol(i, is) = max(qsol(i,is), 0.0)
76      runoff(i) = runoff(i) + max(qsol(i,is)-mx_eau_sol, 0.0)*pctsrf(i, is)
77      qsol(i, is) = min(qsol(i,is), mx_eau_sol)
78      ! je limite la temperature a RTT-1.8 (il faudrait aussi prendre l'eau
79      ! de
80      ! la fonte) (Laurent Li, le 14mars98):
81      ! IM cf GK   tsol(i,is) = MIN(tsol(i,is),RTT-1.8)
82      ! IM cf GK : la glace fond a 0C, non pas a -1.8
83      tsol(i, is) = min(tsol(i,is), rtt)
84
85      ! cc         ELSE
86      ! cc            snow(i,is) = 0.0
87      ! cc            qsol(i,is) = 0.0
88      ! cc            tsol(i,is) = 0.0
89    END IF
90
91    is = is_sic
92    qsol(i, is) = 0.0
93    snow(i, is) = snow(i, is) + snow_fall(i)*dtime*pctsrf(i, is)
94    IF (pctsrf(i,is)>epsfra) THEN
95      subli = min(evap(i)*dtime, snow(i,is))
96      snow(i, is) = snow(i, is) - subli
97      fsno = min(max((tsol(i,is)-rtt)/chasno,0.0), snow(i,is))
98      snow(i, is) = snow(i, is) - fsno
99      tsol(i, is) = tsol(i, is) - fsno*chasno
100      ! je limite la temperature a RTT-1.8 (il faudrait aussi prendre l'eau
101      ! de
102      ! la fonte) (Laurent Li, le 14mars98):
103      ! IM cf GK   tsol(i,is) = MIN(tsol(i,is),RTT-1.8)
104      ! IM cf GK : la glace fond a 0C, non pas a -1.8
105      tsol(i, is) = min(tsol(i,is), rtt)
106
107      ! cc         ELSE
108      ! cc            snow(i,is) = 0.0
109      ! cc            tsol(i,is) = 0.0
110    END IF
111
112    agesno(i) = (agesno(i)+(1.-agesno(i)/50.)*dtime/86400.)* &
113      exp(-1.*max(0.0,snow_fall(i))*dtime/0.3)
114    agesno(i) = max(agesno(i), 0.0)
115
116  END DO
117
118  RETURN
119END SUBROUTINE hydrol
Note: See TracBrowser for help on using the repository browser.