4 |
|
|
5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE coefkz(nsrf, paprs, pplay, ksta, ksta_ter, ts, u, v, t, q, zgeop, & |
SUBROUTINE coefkz(nsrf, paprs, pplay, ts, u, v, t, q, zgeop, coefm, coefh) |
|
coefm, coefh) |
|
8 |
|
|
9 |
! Authors: F. Hourdin, M. Forichon, Z. X. Li (LMD/CNRS) |
! Authors: F. Hourdin, M. Forichon, Z. X. Li (LMD/CNRS) |
10 |
! Date: September 22nd, 1993 |
! Date: September 22nd, 1993 |
12 |
! Objet : calculer les coefficients d'échange turbulent dans |
! Objet : calculer les coefficients d'échange turbulent dans |
13 |
! l'atmosphère. |
! l'atmosphère. |
14 |
|
|
15 |
|
USE clesphys, ONLY: ksta, ksta_ter |
16 |
USE conf_phys_m, ONLY: iflag_pbl |
USE conf_phys_m, ONLY: iflag_pbl |
17 |
USE dimphy, ONLY: klev |
USE dimphy, ONLY: klev |
18 |
USE fcttre, ONLY: foede, foeew |
USE fcttre, ONLY: foede, foeew |
28 |
real, intent(in):: pplay(:, :) ! (knon, klev) |
real, intent(in):: pplay(:, :) ! (knon, klev) |
29 |
! pression au milieu de chaque couche (en Pa) |
! pression au milieu de chaque couche (en Pa) |
30 |
|
|
|
REAL, intent(in):: ksta, ksta_ter |
|
31 |
REAL, intent(in):: ts(:) ! (knon) temperature du sol (en Kelvin) |
REAL, intent(in):: ts(:) ! (knon) temperature du sol (en Kelvin) |
32 |
REAL, intent(in):: u(:, :), v(:, :) ! (knon, klev) wind |
REAL, intent(in):: u(:, :), v(:, :) ! (knon, klev) wind |
33 |
REAL, intent(in):: t(:, :) ! (knon, klev) temperature (K) |
REAL, intent(in):: t(:, :) ! (knon, klev) temperature (K) |
35 |
REAL, intent(in):: zgeop(:, :) ! (knon, klev) |
REAL, intent(in):: zgeop(:, :) ! (knon, klev) |
36 |
REAL, intent(out):: coefm(:, 2:) ! (knon, 2:klev) coefficient, vitesse |
REAL, intent(out):: coefm(:, 2:) ! (knon, 2:klev) coefficient, vitesse |
37 |
|
|
38 |
real, intent(out):: coefh(:, 2:) ! (knon, 2:klev) |
real, intent(out):: coefh(:, 2:) ! (knon, 2:klev) |
39 |
! coefficient, chaleur et humidité |
! coefficient, chaleur et humidité |
40 |
|
|
41 |
! Local: |
! Local: |
87 |
knon = size(ts) |
knon = size(ts) |
88 |
|
|
89 |
! Prescrire la valeur de contre-gradient |
! Prescrire la valeur de contre-gradient |
90 |
if (iflag_pbl.eq.1) then |
if (iflag_pbl == 1) then |
91 |
DO k = 3, klev |
DO k = 3, klev |
92 |
gamt(k) = - 1E-3 |
gamt(k) = - 1E-3 |
93 |
ENDDO |
ENDDO |
98 |
ENDDO |
ENDDO |
99 |
ENDIF |
ENDIF |
100 |
|
|
101 |
IF (nsrf .NE. is_oce ) THEN |
IF (nsrf /= is_oce) THEN |
102 |
kstable = ksta_ter |
kstable = ksta_ter |
103 |
ELSE |
ELSE |
104 |
kstable = ksta |
kstable = ksta |
134 |
zfr = MAX(0.0, MIN(1.0, zfr)) |
zfr = MAX(0.0, MIN(1.0, zfr)) |
135 |
IF (.NOT.richum) zfr = 0.0 |
IF (.NOT.richum) zfr = 0.0 |
136 |
|
|
137 |
! calculer le nombre de Richardson: |
! calculer le nombre de Richardson: |
138 |
|
|
139 |
IF (tvirtu) THEN |
IF (tvirtu) THEN |
140 |
ztvd = (t(i, k) & |
ztvd = (t(i, k) & |
141 |
+ zdphi/RCPD/(1. + RVTMP2 * zq) & |
+ zdphi/RCPD/(1. + RVTMP2 * zq) & |
142 |
* ((1. - zfr) + zfr * (1. + RLVTT * zqs/RD/zt)/(1. + zdqs) ) & |
* ((1. - zfr) + zfr * (1. + RLVTT * zqs/RD/zt)/(1. + zdqs)) & |
143 |
) * (1. + RETV * q(i, k)) |
) * (1. + RETV * q(i, k)) |
144 |
ztvu = (t(i, k - 1) & |
ztvu = (t(i, k - 1) & |
145 |
- zdphi/RCPD/(1. + RVTMP2 * zq) & |
- zdphi/RCPD/(1. + RVTMP2 * zq) & |
146 |
* ((1. - zfr) + zfr * (1. + RLVTT * zqs/RD/zt)/(1. + zdqs) ) & |
* ((1. - zfr) + zfr * (1. + RLVTT * zqs/RD/zt)/(1. + zdqs)) & |
147 |
) * (1. + RETV * q(i, k - 1)) |
) * (1. + RETV * q(i, k - 1)) |
148 |
ri(i) = zmgeom(i) * (ztvd - ztvu)/(zdu2 * 0.5 * (ztvd + ztvu)) |
ri(i) = zmgeom(i) * (ztvd - ztvu)/(zdu2 * 0.5 * (ztvd + ztvu)) |
149 |
ri(i) = ri(i) & |
ri(i) = ri(i) & |
189 |
ENDIF |
ENDIF |
190 |
ELSE |
ELSE |
191 |
l2(i) = (mixlen * MAX(0.0, (paprs(i, k) - paprs(i, itop(i) + 1)) & |
l2(i) = (mixlen * MAX(0.0, (paprs(i, k) - paprs(i, itop(i) + 1)) & |
192 |
/(paprs(i, 2) - paprs(i, itop(i) + 1)) ))**2 |
/(paprs(i, 2) - paprs(i, itop(i) + 1))))**2 |
193 |
coefm(i, k) = sqrt(max(cdn**2 * (ric - ri(i)) / ric, kstable)) |
coefm(i, k) = sqrt(max(cdn**2 * (ric - ri(i)) / ric, kstable)) |
194 |
coefm(i, k) = l2(i) * coefm(i, k) |
coefm(i, k) = l2(i) * coefm(i, k) |
195 |
coefh(i, k) = coefm(i, k) / prandtl ! h et m different |
coefh(i, k) = coefm(i, k) / prandtl ! h et m different |