| 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 |
| 119 |
|
|
|