9 |
|
|
10 |
! From LMDZ4/libf/dyn3d/bilan_dyn.F, version 1.5 2005/03/16 10:12:17 |
! From LMDZ4/libf/dyn3d/bilan_dyn.F, version 1.5 2005/03/16 10:12:17 |
11 |
|
|
12 |
! Sous-programme consacré à des diagnostics dynamiques de base. |
! Sous-programme consacr\'e \`a des diagnostics dynamiques de |
13 |
! De façon générale, les moyennes des scalaires Q sont pondérées |
! base. De fa\c{}con g\'en\'erale, les moyennes des scalaires Q |
14 |
! par la masse. Les flux de masse sont, eux, simplement moyennés. |
! sont pond\'er\'ees par la masse. Les flux de masse sont, eux, |
15 |
|
! simplement moyenn\'es. |
16 |
|
|
17 |
USE comconst, ONLY: cpp |
USE comconst, ONLY: cpp |
18 |
USE comgeom, ONLY: constang_2d, cu_2d, cv_2d |
USE comgeom, ONLY: constang_2d, cu_2d, cv_2d |
19 |
|
use covcont_m, only: covcont |
20 |
USE dimens_m, ONLY: iim, jjm, llm |
USE dimens_m, ONLY: iim, jjm, llm |
21 |
USE histwrite_m, ONLY: histwrite |
USE histwrite_m, ONLY: histwrite |
22 |
use init_dynzon_m, only: ncum, fileid, znom, ntr, nq, nom |
use init_dynzon_m, only: ncum, fileid, znom, ntr, nq, nom |
39 |
integer:: itau = 0 |
integer:: itau = 0 |
40 |
real qy, factv(jjm, llm) |
real qy, factv(jjm, llm) |
41 |
|
|
42 |
! Variables dynamiques intermédiaires |
! Variables dynamiques interm\'ediaires |
43 |
REAL vcont(iip1, jjm, llm), ucont(iip1, jjp1, llm) |
REAL vcont(iip1, jjm, llm), ucont(iip1, jjp1, llm) |
44 |
REAL ang(iip1, jjp1, llm), unat(iip1, jjp1, llm) |
REAL ang(iip1, jjp1, llm), unat(iip1, jjp1, llm) |
45 |
REAL massebx(iip1, jjp1, llm), masseby(iip1, jjm, llm) |
REAL massebx(iip1, jjp1, llm), masseby(iip1, jjm, llm) |
46 |
REAL ecin(iip1, jjp1, llm) |
REAL ecin(iip1, jjp1, llm) |
47 |
|
|
48 |
! Champ contenant les scalaires advectés |
! Champ contenant les scalaires advect\'es |
49 |
real Q(iip1, jjp1, llm, nQ) |
real Q(iip1, jjp1, llm, nQ) |
50 |
|
|
51 |
! Champs cumulés |
! Champs cumul\'es |
52 |
real, save:: ps_cum(iip1, jjp1) |
real, save:: ps_cum(iip1, jjp1) |
53 |
real, save:: masse_cum(iip1, jjp1, llm) |
real, save:: masse_cum(iip1, jjp1, llm) |
54 |
real, save:: flux_u_cum(iip1, jjp1, llm) |
real, save:: flux_u_cum(iip1, jjp1, llm) |
71 |
|
|
72 |
! Calcul des champs dynamiques |
! Calcul des champs dynamiques |
73 |
|
|
74 |
! Énergie cinétique |
! \'Energie cin\'etique |
75 |
ucont = 0 |
ucont = 0 |
76 |
CALL covcont(llm, ucov, vcov, ucont, vcont) |
CALL covcont(llm, ucov, vcov, ucont, vcont) |
77 |
CALL enercin(vcov, ucov, vcont, ucont, ecin) |
CALL enercin(vcov, ucov, vcont, ucont, ecin) |
78 |
|
|
79 |
! moment cinétique |
! moment cin\'etique |
80 |
forall (l = 1: llm) |
forall (l = 1: llm) |
81 |
ang(:, :, l) = ucov(:, :, l) + constang_2d |
ang(:, :, l) = ucov(:, :, l) + constang_2d |
82 |
unat(:, :, l) = ucont(:, :, l) * cu_2d |
unat(:, :, l) = ucont(:, :, l) * cu_2d |
119 |
+ flux_u(i, :, :) * 0.5 * (Q(i, :, :, iQ) + Q(i + 1, :, :, iQ)) |
+ flux_u(i, :, :) * 0.5 * (Q(i, :, :, iQ) + Q(i + 1, :, :, iQ)) |
120 |
flux_uQ_cum(iip1, :, :, :) = flux_uQ_cum(1, :, :, :) |
flux_uQ_cum(iip1, :, :, :) = flux_uQ_cum(1, :, :, :) |
121 |
|
|
122 |
! Flux méridien |
! Flux m\'eridien |
123 |
forall (iQ = 1: nQ, j = 1: jjm) flux_vQ_cum(:, j, :, iQ) & |
forall (iQ = 1: nQ, j = 1: jjm) flux_vQ_cum(:, j, :, iQ) & |
124 |
= flux_vQ_cum(:, j, :, iQ) & |
= flux_vQ_cum(:, j, :, iQ) & |
125 |
+ flux_v(:, j, :) * 0.5 * (Q(:, j, :, iQ) + Q(:, j + 1, :, iQ)) |
+ flux_v(:, j, :) * 0.5 * (Q(:, j, :, iQ) + Q(:, j + 1, :, iQ)) |
134 |
flux_uQ_cum = flux_uQ_cum / ncum |
flux_uQ_cum = flux_uQ_cum / ncum |
135 |
flux_vQ_cum = flux_vQ_cum / ncum |
flux_vQ_cum = flux_vQ_cum / ncum |
136 |
|
|
137 |
! Transport méridien |
! Transport m\'eridien |
138 |
|
|
139 |
! Cumul zonal des masses des mailles |
! Cumul zonal des masses des mailles |
140 |
|
|
178 |
vq(j, l, istn, iQ) = vqtmp(j, l) - vq(j, l, immc, iQ) |
vq(j, l, istn, iQ) = vqtmp(j, l) - vq(j, l, immc, iQ) |
179 |
enddo |
enddo |
180 |
enddo |
enddo |
181 |
! Fonction de courant méridienne pour la quantité Q |
! Fonction de courant m\'eridienne pour la quantit\'e Q |
182 |
do l = llm, 1, -1 |
do l = llm, 1, -1 |
183 |
do j = 1, jjm |
do j = 1, jjm |
184 |
psiQ(j, l, iQ) = psiQ(j, l + 1, iQ) + vq(j, l, itot, iQ) |
psiQ(j, l, iQ) = psiQ(j, l + 1, iQ) + vq(j, l, itot, iQ) |
186 |
enddo |
enddo |
187 |
enddo |
enddo |
188 |
|
|
189 |
! Fonction de courant pour la circulation méridienne moyenne |
! Fonction de courant pour la circulation m\'eridienne moyenne |
190 |
psi = 0. |
psi = 0. |
191 |
do l = llm, 1, -1 |
do l = llm, 1, -1 |
192 |
do j = 1, jjm |
do j = 1, jjm |
208 |
psi = psi * 1e-9 |
psi = psi * 1e-9 |
209 |
call histwrite(fileid, 'psi', itau, psi(:, :llm)) |
call histwrite(fileid, 'psi', itau, psi(:, :llm)) |
210 |
|
|
211 |
! Intégrale verticale |
! Int\'egrale verticale |
212 |
|
|
213 |
forall (iQ = 1: nQ, itr = 2: ntr) avq(:, itr, iQ) & |
forall (iQ = 1: nQ, itr = 2: ntr) avq(:, itr, iQ) & |
214 |
= sum(vq(:, :, itr, iQ) * zmasse, dim=2) / cv_2d(1, :) |
= sum(vq(:, :, itr, iQ) * zmasse, dim=2) / cv_2d(1, :) |