25 |
use clvent_m, only: clvent |
use clvent_m, only: clvent |
26 |
use coefkz_m, only: coefkz |
use coefkz_m, only: coefkz |
27 |
use coefkzmin_m, only: coefkzmin |
use coefkzmin_m, only: coefkzmin |
28 |
|
use coefkz2_m, only: coefkz2 |
29 |
USE conf_gcm_m, ONLY: lmt_pas |
USE conf_gcm_m, ONLY: lmt_pas |
30 |
USE conf_phys_m, ONLY: iflag_pbl |
USE conf_phys_m, ONLY: iflag_pbl |
31 |
USE dimphy, ONLY: klev, klon, zmasq |
USE dimphy, ONLY: klev, klon, zmasq |
96 |
! flux de vapeur d'eau (kg / m2 / s) à la surface |
! flux de vapeur d'eau (kg / m2 / s) à la surface |
97 |
|
|
98 |
REAL, intent(out):: flux_u(klon, nbsrf), flux_v(klon, nbsrf) |
REAL, intent(out):: flux_u(klon, nbsrf), flux_v(klon, nbsrf) |
99 |
! tension du vent à la surface, en Pa |
! tension du vent (flux turbulent de vent) à la surface, en Pa |
100 |
|
|
101 |
REAL, INTENT(out):: cdragh(klon), cdragm(klon) |
REAL, INTENT(out):: cdragh(klon), cdragm(klon) |
102 |
real q2(klon, klev + 1, nbsrf) |
real q2(klon, klev + 1, nbsrf) |
312 |
|
|
313 |
! calculer Cdrag et les coefficients d'echange |
! calculer Cdrag et les coefficients d'echange |
314 |
CALL coefkz(nsrf, ypaprs, ypplay, ksta, ksta_ter, yts(:knon), & |
CALL coefkz(nsrf, ypaprs, ypplay, ksta, ksta_ter, yts(:knon), & |
315 |
yrugos, yu, yv, yt, yq, yqsurf(:knon), coefm(:knon, :), & |
yrugos, yu, yv, yt, yq, yqsurf(:knon), coefm(:knon, 2:), & |
316 |
coefh(:knon, :)) |
coefh(:knon, 2:), coefm(:knon, 1), coefh(:knon, 1)) |
317 |
|
|
318 |
IF (iflag_pbl == 1) THEN |
IF (iflag_pbl == 1) THEN |
319 |
CALL coefkz2(nsrf, knon, ypaprs, ypplay, yt, ycoefm0, ycoefh0) |
CALL coefkz2(nsrf, knon, ypaprs, ypplay, yt, ycoefm0(:knon, 2:), & |
320 |
|
ycoefh0(:knon, 2:)) |
321 |
|
ycoefm0(:knon, 1) = 0. |
322 |
|
ycoefh0(:knon, 1) = 0. |
323 |
coefm(:knon, :) = max(coefm(:knon, :), ycoefm0(:knon, :)) |
coefm(:knon, :) = max(coefm(:knon, :), ycoefm0(:knon, :)) |
324 |
coefh(:knon, :) = max(coefh(:knon, :), ycoefh0(:knon, :)) |
coefh(:knon, :) = max(coefh(:knon, :), ycoefh0(:knon, :)) |
325 |
END IF |
END IF |
333 |
IF (ok_kzmin) THEN |
IF (ok_kzmin) THEN |
334 |
! Calcul d'une diffusion minimale pour les conditions tres stables |
! Calcul d'une diffusion minimale pour les conditions tres stables |
335 |
CALL coefkzmin(knon, ypaprs, ypplay, yu, yv, yt, yq, & |
CALL coefkzmin(knon, ypaprs, ypplay, yu, yv, yt, yq, & |
336 |
coefm(:knon, 1), ycoefm0, ycoefh0) |
coefm(:knon, 1), ycoefm0(:knon, 2:), ycoefh0(:knon, 2:)) |
337 |
coefm(:knon, :) = max(coefm(:knon, :), ycoefm0(:knon, :)) |
coefm(:knon, :) = max(coefm(:knon, :), ycoefm0(:knon, :)) |
338 |
coefh(:knon, :) = max(coefh(:knon, :), ycoefh0(:knon, :)) |
coefh(:knon, :) = max(coefh(:knon, :), ycoefh0(:knon, :)) |
339 |
END IF |
END IF |
373 |
END DO |
END DO |
374 |
|
|
375 |
ustar(:knon) = ustarhb(yu(:knon, 1), yv(:knon, 1), coefm(:knon, 1)) |
ustar(:knon) = ustarhb(yu(:knon, 1), yv(:knon, 1), coefm(:knon, 1)) |
|
|
|
|
! iflag_pbl peut \^etre utilis\'e comme longueur de m\'elange |
|
|
|
|
376 |
CALL yamada4(dtime, rg, zlev(:knon, :), yzlay(:knon, :), & |
CALL yamada4(dtime, rg, zlev(:knon, :), yzlay(:knon, :), & |
377 |
yu(:knon, :), yv(:knon, :), yteta(:knon, :), & |
yu(:knon, :), yv(:knon, :), yteta(:knon, :), & |
378 |
coefm(:knon, 1), yq2(:knon, :), ykmm(:knon, :), & |
coefm(:knon, 1), yq2(:knon, :), ykmm(:knon, :), & |
379 |
ykmn(:knon, :), ykmq(:knon, :), ustar(:knon), iflag_pbl) |
ykmn(:knon, :), ykmq(:knon, :), ustar(:knon)) |
|
|
|
380 |
coefm(:knon, 2:) = ykmm(:knon, 2:klev) |
coefm(:knon, 2:) = ykmm(:knon, 2:klev) |
381 |
coefh(:knon, 2:) = ykmn(:knon, 2:klev) |
coefh(:knon, 2:) = ykmn(:knon, 2:klev) |
382 |
END IF |
END IF |
383 |
|
|
384 |
! calculer la diffusion des vitesses "u" et "v" |
CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), coefm(:knon, 2:), & |
385 |
CALL clvent(knon, dtime, yu(:knon, 1), yv(:knon, 1), & |
coefm(:knon, 1), yt(:knon, :), yu(:knon, :), ypaprs(:knon, :), & |
386 |
coefm(:knon, :), yt, yu, ypaprs, ypplay, ydelp, y_d_u, & |
ypplay(:knon, :), ydelp(:knon, :), y_d_u(:knon, :), & |
387 |
y_flux_u(:knon)) |
y_flux_u(:knon)) |
388 |
CALL clvent(knon, dtime, yu(:knon, 1), yv(:knon, 1), & |
CALL clvent(dtime, yu(:knon, 1), yv(:knon, 1), coefm(:knon, 2:), & |
389 |
coefm(:knon, :), yt, yv, ypaprs, ypplay, ydelp, y_d_v, & |
coefm(:knon, 1), yt(:knon, :), yv(:knon, :), ypaprs(:knon, :), & |
390 |
|
ypplay(:knon, :), ydelp(:knon, :), y_d_v(:knon, :), & |
391 |
y_flux_v(:knon)) |
y_flux_v(:knon)) |
392 |
|
|
393 |
! calculer la diffusion de "q" et de "h" |
! calculer la diffusion de "q" et de "h" |