GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/hydrol.F90 Lines: 0 39 0.0 %
Date: 2023-06-30 12:51:15 Branches: 0 8 0.0 %

Line Branch Exec Source
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