9 |
|
|
10 |
! Computes coefficients for turbulent diffusion in the atmosphere. |
! Computes coefficients for turbulent diffusion in the atmosphere. |
11 |
|
|
12 |
|
use nr_util, only: assert |
13 |
|
|
14 |
USE clesphys, ONLY: ok_kzmin |
USE clesphys, ONLY: ok_kzmin |
15 |
use coefkz_m, only: coefkz |
use coefkz_m, only: coefkz |
16 |
use coefkzmin_m, only: coefkzmin |
use coefkzmin_m, only: coefkzmin |
17 |
use coefkz2_m, only: coefkz2 |
use coefkz2_m, only: coefkz2 |
18 |
USE conf_phys_m, ONLY: iflag_pbl |
USE conf_phys_m, ONLY: iflag_pbl |
19 |
USE dimphy, ONLY: klev |
USE dimphy, ONLY: klev |
|
use nr_util, only: assert |
|
20 |
USE suphec_m, ONLY: rd, rg, rkappa |
USE suphec_m, ONLY: rd, rg, rkappa |
21 |
use ustarhb_m, only: ustarhb |
use ustarhb_m, only: ustarhb |
22 |
use yamada4_m, only: yamada4 |
use yamada4_m, only: yamada4 |
40 |
REAL coefm0(size(ni), 2:klev), coefh0(size(ni), 2:klev) ! (knon, 2:klev) |
REAL coefm0(size(ni), 2:klev), coefh0(size(ni), 2:klev) ! (knon, 2:klev) |
41 |
REAL zlay(size(ni), klev), teta(size(ni), klev) ! (knon, klev) |
REAL zlay(size(ni), klev), teta(size(ni), klev) ! (knon, klev) |
42 |
real zlev(size(ni), klev + 1) ! (knon, klev + 1) |
real zlev(size(ni), klev + 1) ! (knon, klev + 1) |
|
REAL ustar(size(ni)) ! (knon) |
|
43 |
integer k |
integer k |
44 |
|
|
45 |
!------------------------------------------------------------------------- |
!------------------------------------------------------------------------- |
60 |
IF (ok_kzmin) THEN |
IF (ok_kzmin) THEN |
61 |
! Calcul d'une diffusion minimale pour les conditions tres stables |
! Calcul d'une diffusion minimale pour les conditions tres stables |
62 |
CALL coefkzmin(paprs, pplay, u, v, t, q, cdragm, coefh0) |
CALL coefkzmin(paprs, pplay, u, v, t, q, cdragm, coefh0) |
63 |
coefm0 = coefh0 |
coefm = max(coefm, coefh0) |
|
coefm = max(coefm, coefm0) |
|
64 |
coefh = max(coefh, coefh0) |
coefh = max(coefh, coefh0) |
65 |
END IF |
END IF |
66 |
|
|
75 |
/ paprs(:, k) * (pplay(:, k-1) - pplay(:, k)) / rg |
/ paprs(:, k) * (pplay(:, k-1) - pplay(:, k)) / rg |
76 |
END DO |
END DO |
77 |
|
|
78 |
DO k = 1, klev |
forall (k = 1:klev) teta(:, k) = t(:, k) & |
79 |
teta(:, k) = t(:, k) * (paprs(:, 1) / pplay(:, k))**rkappa & |
* (paprs(:, 1) / pplay(:, k))**rkappa * (1. + 0.61 * q(:, k)) |
|
* (1. + 0.61 * q(:, k)) |
|
|
END DO |
|
80 |
|
|
81 |
zlev(:, 1) = 0. |
zlev(:, 1) = 0. |
82 |
zlev(:, klev + 1) = 2. * zlay(:, klev) - zlay(:, klev - 1) |
zlev(:, klev + 1) = 2. * zlay(:, klev) - zlay(:, klev - 1) |
83 |
|
forall (k = 2:klev) zlev(:, k) = 0.5 * (zlay(:, k) + zlay(:, k-1)) |
84 |
|
|
85 |
DO k = 2, klev |
CALL yamada4(dtime, zlev, zlay, u, v, teta, q2, coefm, coefh, & |
86 |
zlev(:, k) = 0.5 * (zlay(:, k) + zlay(:, k-1)) |
ustarhb(u(:, 1), v(:, 1), cdragm)) |
|
END DO |
|
|
|
|
|
ustar = ustarhb(u(:, 1), v(:, 1), cdragm) |
|
|
CALL yamada4(dtime, zlev, zlay, u, v, teta, q2, coefm, coefh, ustar) |
|
87 |
END IF |
END IF |
88 |
|
|
89 |
end subroutine coef_diff_turb |
end subroutine coef_diff_turb |