source: LMDZ5/trunk/libf/phylmd/cvltrorig.F90 @ 2109

Last change on this file since 2109 was 1907, checked in by lguez, 11 years ago

Added a copyright property to every file of the distribution, except
for the fcm files (which have their own copyright). Use svn propget on
a file to see the copyright. For instance:

$ svn propget copyright libf/phylmd/physiq.F90
Name of program: LMDZ
Creation date: 1984
Version: LMDZ5
License: CeCILL version 2
Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
See the license file in the root directory

Also added the files defining the CeCILL version 2 license, in French
and English, at the top of the LMDZ tree.

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 4.2 KB
Line 
1!
2! $Id $
3!
4SUBROUTINE cvltrorig(it,pdtime,da, phi, mp,paprs,pplay,x,upd,dnd,dx)
5  USE dimphy
6  USE infotrac, ONLY : nbtr
7  IMPLICIT NONE
8!=====================================================================
9! Objet : convection des traceurs / KE
10! Auteurs: M-A Filiberti and J-Y Grandpeix
11!=====================================================================
12  include "YOMCST.h"
13  include "YOECUMF.h"
14
15! Entree
16  REAL,INTENT(IN)                           :: pdtime
17  INTEGER, INTENT(IN)                       :: it
18  REAL,DIMENSION(klon,klev),INTENT(IN)      :: da
19  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi
20  REAL,DIMENSION(klon,klev),INTENT(IN)      :: mp
21  REAL,DIMENSION(klon,klev+1),INTENT(IN)    :: paprs ! pression aux 1/2 couches (bas en haut)
22  REAL,DIMENSION(klon,klev),INTENT(IN)      :: pplay ! pression pour le milieu de chaque couche
23  REAL,DIMENSION(klon,klev,nbtr),INTENT(IN)      :: x     ! q de traceur (bas en haut)
24  REAL,DIMENSION(klon,klev),INTENT(IN)      :: upd   ! saturated updraft mass flux
25  REAL,DIMENSION(klon,klev),INTENT(IN)      :: dnd   ! saturated downdraft mass flux
26
27! Sortie
28  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT) :: dx ! tendance de traceur  (bas en haut)
29
30! Variables locales     
31! REAL,DIMENSION(klon,klev)       :: zed
32  REAL,DIMENSION(klon,klev,klev)  :: zmd
33  REAL,DIMENSION(klon,klev,klev)  :: za
34  REAL,DIMENSION(klon,klev)       :: zmfd,zmfa
35  REAL,DIMENSION(klon,klev)       :: zmfp,zmfu
36  REAL,DIMENSION(klon,klev)       :: deltap
37  INTEGER                         :: i,k,j
38  REAL                            :: pdtimeRG
39!!  real conserv
40
41! =========================================
42! calcul des tendances liees au downdraft
43! =========================================
44!cdir collapse
45  DO j=1,klev
46  DO i=1,klon
47!   zed(i,j)=0.
48    zmfd(i,j)=0.
49    zmfa(i,j)=0.
50    zmfu(i,j)=0.
51    zmfp(i,j)=0.
52  END DO
53  END DO
54!cdir collapse
55  DO k=1,klev
56  DO j=1,klev
57  DO i=1,klon
58    zmd(i,j,k)=0.
59    za (i,j,k)=0.
60  END DO
61  END DO
62  END DO
63! entrainement
64! DO k=1,klev-1
65!    DO i=1,klon
66!       zed(i,k)=max(0.,mp(i,k)-mp(i,k+1))
67!    END DO
68! END DO
69
70! calcul de la matrice d echange
71! matrice de distribution de la masse entrainee en k
72
73  DO k=1,klev-1
74     DO i=1,klon
75        zmd(i,k,k)=max(0.,mp(i,k)-mp(i,k+1))
76     END DO
77  END DO
78  DO k=2,klev
79     DO j=k-1,1,-1
80        DO i=1,klon
81           if(mp(i,j+1).ne.0) then
82              zmd(i,j,k)=zmd(i,j+1,k)*min(1.,mp(i,j)/mp(i,j+1))
83           ENDif
84        END DO
85     END DO
86  END DO
87  DO k=1,klev
88     DO j=1,klev-1
89        DO i=1,klon
90           za(i,j,k)=max(0.,zmd(i,j+1,k)-zmd(i,j,k))
91        END DO
92     END DO
93  END DO
94!
95! rajout du terme lie a l ascendance induite
96!
97  DO j=2,klev
98     DO i=1,klon
99        za(i,j,j-1)=za(i,j,j-1)+mp(i,j)
100     END DO
101  END DO
102!
103! tendances
104!           
105  DO k=1,klev
106     DO j=1,klev
107        DO i=1,klon
108           zmfd(i,j)=zmfd(i,j)+za(i,j,k)*(x(i,k,it)-x(i,j,it))
109        END DO
110     END DO
111  END DO
112!
113! =========================================
114! calcul des tendances liees aux flux satures
115! =========================================
116  DO j=1,klev
117     DO i=1,klon
118        zmfa(i,j)=da(i,j)*(x(i,1,it)-x(i,j,it))
119     END DO
120  END DO
121  DO k=1,klev
122     DO j=1,klev
123        DO i=1,klon
124           zmfp(i,j)=zmfp(i,j)+phi(i,j,k)*(x(i,k,it)-x(i,j,it))
125        END DO
126     END DO
127  END DO
128  DO j=1,klev-1
129     DO i=1,klon
130        zmfu(i,j)=max(0.,upd(i,j+1)+dnd(i,j+1))*(x(i,j+1,it)-x(i,j,it))
131     END DO
132  END DO
133  DO j=2,klev
134     DO i=1,klon
135        zmfu(i,j)=zmfu(i,j)+min(0.,upd(i,j)+dnd(i,j))*(x(i,j,it)-x(i,j-1,it))
136     END DO
137  END DO
138
139! =========================================
140! calcul final des tendances
141! =========================================
142  DO k=1, klev
143     DO i=1, klon
144        deltap(i,k)=paprs(i,k)-paprs(i,k+1)
145     ENDDO
146  ENDDO
147  pdtimeRG=pdtime*RG
148!cdir collapse
149  DO k=1, klev
150     DO i=1, klon
151        dx(i,k,it)=(zmfd(i,k)+zmfu(i,k)       &
152                +zmfa(i,k)+zmfp(i,k))*pdtimeRG/deltap(i,k)
153     ENDDO
154  ENDDO
155
156! test de conservation du traceur
157!      conserv=0.
158!      DO k=1, klev
159!        DO i=1, klon
160!         conserv=conserv+dx(i,k,it)*   &
161!          deltap(i,k)/RG
162!        ENDDO
163!      ENDDO
164!      print *,'it',it,'cvltrorig conserv',conserv
165     
166END SUBROUTINE cvltrorig
Note: See TracBrowser for help on using the repository browser.