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 enercin_m, only: enercin |
22 |
USE histwrite_m, ONLY: histwrite |
USE histwrite_m, ONLY: histwrite |
23 |
use init_dynzon_m, only: ncum, fileid, znom, ntr, nq, nom |
use init_dynzon_m, only: ncum, fileid, znom, ntr, nq, nom |
24 |
|
use massbar_m, only: massbar |
25 |
USE paramet_m, ONLY: iip1, jjp1 |
USE paramet_m, ONLY: iip1, jjp1 |
26 |
|
|
27 |
real, intent(in):: ps(iip1, jjp1) |
real, intent(in):: ps(iip1, jjp1) |
40 |
integer:: itau = 0 |
integer:: itau = 0 |
41 |
real qy, factv(jjm, llm) |
real qy, factv(jjm, llm) |
42 |
|
|
43 |
! Variables dynamiques intermédiaires |
! Variables dynamiques interm\'ediaires |
44 |
REAL vcont(iip1, jjm, llm), ucont(iip1, jjp1, llm) |
REAL vcont(iip1, jjm, llm), ucont(iip1, jjp1, llm) |
45 |
REAL ang(iip1, jjp1, llm), unat(iip1, jjp1, llm) |
REAL ang(iip1, jjp1, llm), unat(iip1, jjp1, llm) |
46 |
REAL massebx(iip1, jjp1, llm), masseby(iip1, jjm, llm) |
REAL massebx(iip1, jjp1, llm), masseby(iip1, jjm, llm) |
47 |
REAL ecin(iip1, jjp1, llm) |
REAL ecin(iip1, jjp1, llm) |
48 |
|
|
49 |
! Champ contenant les scalaires advectés |
! Champ contenant les scalaires advect\'es |
50 |
real Q(iip1, jjp1, llm, nQ) |
real Q(iip1, jjp1, llm, nQ) |
51 |
|
|
52 |
! Champs cumulés |
! Champs cumul\'es |
53 |
real, save:: ps_cum(iip1, jjp1) |
real, save:: ps_cum(iip1, jjp1) |
54 |
real, save:: masse_cum(iip1, jjp1, llm) |
real, save:: masse_cum(iip1, jjp1, llm) |
55 |
real, save:: flux_u_cum(iip1, jjp1, llm) |
real, save:: flux_u_cum(iip1, jjp1, llm) |
72 |
|
|
73 |
! Calcul des champs dynamiques |
! Calcul des champs dynamiques |
74 |
|
|
75 |
! Énergie cinétique |
! \'Energie cin\'etique |
76 |
ucont = 0 |
ucont = 0 |
77 |
CALL covcont(llm, ucov, vcov, ucont, vcont) |
CALL covcont(llm, ucov, vcov, ucont, vcont) |
78 |
CALL enercin(vcov, ucov, vcont, ucont, ecin) |
CALL enercin(vcov, ucov, vcont, ucont, ecin) |
79 |
|
|
80 |
! moment cinétique |
! moment cin\'etique |
81 |
forall (l = 1: llm) |
forall (l = 1: llm) |
82 |
ang(:, :, l) = ucov(:, :, l) + constang_2d |
ang(:, :, l) = ucov(:, :, l) + constang_2d |
83 |
unat(:, :, l) = ucont(:, :, l) * cu_2d |
unat(:, :, l) = ucont(:, :, l) * cu_2d |
120 |
+ flux_u(i, :, :) * 0.5 * (Q(i, :, :, iQ) + Q(i + 1, :, :, iQ)) |
+ flux_u(i, :, :) * 0.5 * (Q(i, :, :, iQ) + Q(i + 1, :, :, iQ)) |
121 |
flux_uQ_cum(iip1, :, :, :) = flux_uQ_cum(1, :, :, :) |
flux_uQ_cum(iip1, :, :, :) = flux_uQ_cum(1, :, :, :) |
122 |
|
|
123 |
! Flux méridien |
! Flux m\'eridien |
124 |
forall (iQ = 1: nQ, j = 1: jjm) flux_vQ_cum(:, j, :, iQ) & |
forall (iQ = 1: nQ, j = 1: jjm) flux_vQ_cum(:, j, :, iQ) & |
125 |
= flux_vQ_cum(:, j, :, iQ) & |
= flux_vQ_cum(:, j, :, iQ) & |
126 |
+ flux_v(:, j, :) * 0.5 * (Q(:, j, :, iQ) + Q(:, j + 1, :, iQ)) |
+ flux_v(:, j, :) * 0.5 * (Q(:, j, :, iQ) + Q(:, j + 1, :, iQ)) |
135 |
flux_uQ_cum = flux_uQ_cum / ncum |
flux_uQ_cum = flux_uQ_cum / ncum |
136 |
flux_vQ_cum = flux_vQ_cum / ncum |
flux_vQ_cum = flux_vQ_cum / ncum |
137 |
|
|
138 |
! Transport méridien |
! Transport m\'eridien |
139 |
|
|
140 |
! Cumul zonal des masses des mailles |
! Cumul zonal des masses des mailles |
141 |
|
|
179 |
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) |
180 |
enddo |
enddo |
181 |
enddo |
enddo |
182 |
! Fonction de courant méridienne pour la quantité Q |
! Fonction de courant m\'eridienne pour la quantit\'e Q |
183 |
do l = llm, 1, -1 |
do l = llm, 1, -1 |
184 |
do j = 1, jjm |
do j = 1, jjm |
185 |
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) |
187 |
enddo |
enddo |
188 |
enddo |
enddo |
189 |
|
|
190 |
! Fonction de courant pour la circulation méridienne moyenne |
! Fonction de courant pour la circulation m\'eridienne moyenne |
191 |
psi = 0. |
psi = 0. |
192 |
do l = llm, 1, -1 |
do l = llm, 1, -1 |
193 |
do j = 1, jjm |
do j = 1, jjm |
209 |
psi = psi * 1e-9 |
psi = psi * 1e-9 |
210 |
call histwrite(fileid, 'psi', itau, psi(:, :llm)) |
call histwrite(fileid, 'psi', itau, psi(:, :llm)) |
211 |
|
|
212 |
! Intégrale verticale |
! Int\'egrale verticale |
213 |
|
|
214 |
forall (iQ = 1: nQ, itr = 2: ntr) avq(:, itr, iQ) & |
forall (iQ = 1: nQ, itr = 2: ntr) avq(:, itr, iQ) & |
215 |
= sum(vq(:, :, itr, iQ) * zmasse, dim=2) / cv_2d(1, :) |
= sum(vq(:, :, itr, iQ) * zmasse, dim=2) / cv_2d(1, :) |