8 precip_rain, precip_snow, snow,
qsurf, &
9 radsol, dif_grnd, t1lay, q1lay, u1lay, v1lay, &
10 petacoef, peqacoef, petbcoef, peqbcoef, &
11 tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
56 INTEGER,
INTENT(IN) :: knon, nisurf
57 REAL ,
INTENT(IN) ::
dtime
58 REAL,
DIMENSION(klon),
INTENT(IN) :: petacoef, peqacoef
59 REAL,
DIMENSION(klon),
INTENT(IN) :: petbcoef, peqbcoef
60 REAL,
DIMENSION(klon),
INTENT(IN) :: ps, q1lay
61 REAL,
DIMENSION(klon),
INTENT(IN) ::
tsurf, p1lay, cal,
beta, coef1lay
62 REAL,
DIMENSION(klon),
INTENT(IN) :: precip_rain, precip_snow
63 REAL,
DIMENSION(klon),
INTENT(IN) :: radsol, dif_grnd
64 REAL,
DIMENSION(klon),
INTENT(IN) :: t1lay, u1lay, v1lay
68 REAL,
DIMENSION(klon),
INTENT(INOUT) :: snow
72 REAL,
DIMENSION(klon),
INTENT(OUT) ::
qsurf
73 REAL,
DIMENSION(klon),
INTENT(OUT) :: tsurf_new, evap, fluxsens, fluxlat
74 REAL,
DIMENSION(klon),
INTENT(OUT) :: dflux_s, dflux_l
79 REAL,
DIMENSION(klon) :: zx_mh, zx_nh, zx_oh
80 REAL,
DIMENSION(klon) :: zx_mq, zx_nq, zx_oq
81 REAL,
DIMENSION(klon) :: zx_pkh, zx_dq_s_dt, zx_qsat, zx_coef
82 REAL,
DIMENSION(klon) :: zx_sl, zx_k1
83 REAL,
DIMENSION(klon) :: d_ts
84 REAL :: zdelta, zcvm5, zx_qs, zcor, zx_dq_s_dh
85 REAL :: qsat_new, q1_new
86 REAL,
PARAMETER :: t_grnd = 271.35, t_coup = 273.15
87 REAL,
PARAMETER :: max_eau_sol = 150.0
88 CHARACTER (len = 20) :: modname =
'calcul_fluxs'
90 LOGICAL,
SAVE :: check = .
false.
96 IF (check)
WRITE(*,*)
'Entree ', modname,
' surface = ',nisurf
99 WRITE(*,*)
' radsol (min, max)', &
100 minval(radsol(1:knon)), maxval(radsol(1:knon))
132 zx_pkh(
i) = (ps(
i)/ps(
i))**rkappa
134 zdelta=max(0.,sign(1.,rtt-
tsurf(
i)))
135 zcvm5 = r5les*rlvtt*(1.-zdelta) + r5ies*rlstt*zdelta
136 zcvm5 = zcvm5 / rcpd / (1.0+rvtmp2*q1lay(
i))
137 zx_qs= r2es * foeew(
tsurf(
i),zdelta)/ps(
i)
139 zcor=1./(1.-retv*zx_qs)
141 zx_dq_s_dh = foede(
tsurf(
i),zdelta,zcvm5,zx_qs,zcor) &
144 IF (
tsurf(
i).LT.t_coup)
THEN
145 zx_qs = qsats(
tsurf(
i)) / ps(
i)
146 zx_dq_s_dh = dqsats(
tsurf(
i),zx_qs)/rlvtt &
149 zx_qs = qsatl(
tsurf(
i)) / ps(
i)
150 zx_dq_s_dh = dqsatl(
tsurf(
i),zx_qs)/rlvtt &
154 zx_dq_s_dt(
i) = rcpd * zx_pkh(
i) * zx_dq_s_dh
156 zx_coef(
i) = coef1lay(
i) * &
157 (1.0+sqrt(u1lay(
i)**2+v1lay(
i)**2)) * &
158 p1lay(
i)/(rd*t1lay(
i))
169 IF (
tsurf(
i) .LT. rtt) zx_sl(
i) = rlstt
170 zx_k1(
i) = zx_coef(
i)
177 zx_mq(
i) =
beta(
i) * zx_k1(
i) * &
178 (peqacoef(
i) - zx_qsat(
i) + &
181 zx_nq(
i) =
beta(
i) * zx_k1(
i) * (-1. * zx_dq_s_dt(
i)) &
185 zx_oh(
i) = 1. - (zx_k1(
i) * petbcoef(
i) *
dtime)
186 zx_mh(
i) = zx_k1(
i) * petacoef(
i) / zx_oh(
i)
187 zx_nh(
i) = - (zx_k1(
i) * rcpd * zx_pkh(
i))/ zx_oh(
i)
191 (radsol(
i) + zx_mh(
i) + zx_sl(
i) * zx_mq(
i)) &
192 + dif_grnd(
i) * t_grnd *
dtime)/ &
193 ( 1. -
dtime * cal(
i)/(rcpd * zx_pkh(
i)) * ( &
194 zx_nh(
i) + zx_sl(
i) * zx_nq(
i)) &
210 evap(
i) = - zx_mq(
i) - zx_nq(
i) * tsurf_new(
i)
211 fluxlat(
i) = - evap(
i) * zx_sl(
i)
212 fluxsens(
i) = zx_mh(
i) + zx_nh(
i) * tsurf_new(
i)
215 dflux_s(
i) = zx_nh(
i)
216 dflux_l(
i) = (zx_sl(
i) * zx_nq(
i))
219 qsat_new=zx_qsat(
i) + zx_dq_s_dt(
i) * d_ts(
i)
220 q1_new = peqacoef(
i) - peqbcoef(
i)*evap(
i)*
dtime
246 u0, v0, u1, v1, cdrag_m, &
247 acoefu, acoefv, bcoefu, bcoefv, &
256 INTEGER,
INTENT(IN) :: knon
257 REAL,
INTENT(IN) ::
dtime
258 REAL,
DIMENSION(klon),
INTENT(IN) :: u0, v0
259 REAL,
DIMENSION(klon),
INTENT(IN) :: u1, v1
260 REAL,
DIMENSION(klon),
INTENT(IN) :: cdrag_m
261 REAL,
DIMENSION(klon),
INTENT(IN) :: acoefu, acoefv, bcoefu, bcoefv
262 REAL,
DIMENSION(klon),
INTENT(IN) :: p1lay
263 REAL,
DIMENSION(klon),
INTENT(IN) :: t1lay
266 REAL,
DIMENSION(klon),
INTENT(OUT) :: flux_u1
267 REAL,
DIMENSION(klon),
INTENT(OUT) :: flux_v1
272 REAL :: mod_wind, buf
279 mod_wind = 1.0 + sqrt((u1(
i) - u0(
i))**2 + (v1(
i)-v0(
i))**2)
280 buf = cdrag_m(
i) * mod_wind * p1lay(
i)/(rd*t1lay(
i))
281 flux_u1(
i) = (acoefu(
i) - u0(
i)) / (1/buf - bcoefu(
i)*
dtime )
282 flux_v1(
i) = (acoefv(
i) - v0(
i)) / (1/buf - bcoefv(
i)*
dtime )