/[lmdze]/trunk/dyn3d/bilan_dyn.f
ViewVC logotype

Diff of /trunk/dyn3d/bilan_dyn.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/dyn3d/bilan_dyn.f90 revision 76 by guez, Fri Nov 15 18:45:49 2013 UTC trunk/dyn3d/bilan_dyn.f revision 254 by guez, Mon Feb 5 10:39:38 2018 UTC
# Line 9  contains Line 9  contains
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)
# Line 36  contains Line 40  contains
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)
# Line 68  contains Line 72  contains
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
# Line 116  contains Line 120  contains
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))
# Line 131  contains Line 135  contains
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    
# Line 175  contains Line 179  contains
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)
# Line 183  contains Line 187  contains
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
# Line 205  contains Line 209  contains
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, :)

Legend:
Removed from v.76  
changed lines
  Added in v.254

  ViewVC Help
Powered by ViewVC 1.1.21