source: LMDZ6/trunk/libf/phylmd/cvltrorig.f90 @ 5274

Last change on this file since 5274 was 5274, checked in by abarral, 31 hours ago

Replace yomcst.h by existing module

  • 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: 5.0 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_phy, ONLY : nbtr
7  USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
8          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
9          , R_ecc, R_peri, R_incl                                      &
10          , RA, RG, R1SA                                         &
11          , RSIGMA                                                     &
12          , R, RMD, RMV, RD, RV, RCPD                    &
13          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
14          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
15          , RCW, RCS                                                 &
16          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
17          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
18          , RALPD, RBETD, RGAMD
19IMPLICIT NONE
20!=====================================================================
21! Objet : convection des traceurs / KE
22! Auteurs: M-A Filiberti and J-Y Grandpeix
23!=====================================================================
24
25  include "YOECUMF.h"
26
27! Entree
28  REAL,INTENT(IN)                           :: pdtime
29  INTEGER, INTENT(IN)                       :: it
30  REAL,DIMENSION(klon,klev),INTENT(IN)      :: da
31  REAL,DIMENSION(klon,klev,klev),INTENT(IN) :: phi
32  REAL,DIMENSION(klon,klev),INTENT(IN)      :: mp
33  REAL,DIMENSION(klon,klev+1),INTENT(IN)    :: paprs ! pression aux 1/2 couches (bas en haut)
34  REAL,DIMENSION(klon,klev),INTENT(IN)      :: pplay ! pression pour le milieu de chaque couche
35  REAL,DIMENSION(klon,klev,nbtr),INTENT(IN)      :: x     ! q de traceur (bas en haut)
36  REAL,DIMENSION(klon,klev),INTENT(IN)      :: upd   ! saturated updraft mass flux
37  REAL,DIMENSION(klon,klev),INTENT(IN)      :: dnd   ! saturated downdraft mass flux
38
39! Sortie
40  REAL,DIMENSION(klon,klev,nbtr),INTENT(OUT) :: dx ! tendance de traceur  (bas en haut)
41
42! Variables locales     
43! REAL,DIMENSION(klon,klev)       :: zed
44  REAL,DIMENSION(klon,klev,klev)  :: zmd
45  REAL,DIMENSION(klon,klev,klev)  :: za
46  REAL,DIMENSION(klon,klev)       :: zmfd,zmfa
47  REAL,DIMENSION(klon,klev)       :: zmfp,zmfu
48  REAL,DIMENSION(klon,klev)       :: deltap
49  INTEGER                         :: i,k,j
50  REAL                            :: pdtimeRG
51!!  real conserv
52
53! =========================================
54! calcul des tendances liees au downdraft
55! =========================================
56!cdir collapse
57  DO j=1,klev
58  DO i=1,klon
59!   zed(i,j)=0.
60    zmfd(i,j)=0.
61    zmfa(i,j)=0.
62    zmfu(i,j)=0.
63    zmfp(i,j)=0.
64  END DO
65  END DO
66!cdir collapse
67  DO k=1,klev
68  DO j=1,klev
69  DO i=1,klon
70    zmd(i,j,k)=0.
71    za (i,j,k)=0.
72  END DO
73  END DO
74  END DO
75! entrainement
76! DO k=1,klev-1
77!    DO i=1,klon
78!       zed(i,k)=max(0.,mp(i,k)-mp(i,k+1))
79!    END DO
80! END DO
81
82! calcul de la matrice d echange
83! matrice de distribution de la masse entrainee en k
84
85  DO k=1,klev-1
86     DO i=1,klon
87        zmd(i,k,k)=max(0.,mp(i,k)-mp(i,k+1))
88     END DO
89  END DO
90  DO k=2,klev
91     DO j=k-1,1,-1
92        DO i=1,klon
93           if(mp(i,j+1).ne.0) then
94              zmd(i,j,k)=zmd(i,j+1,k)*min(1.,mp(i,j)/mp(i,j+1))
95           ENDif
96        END DO
97     END DO
98  END DO
99  DO k=1,klev
100     DO j=1,klev-1
101        DO i=1,klon
102           za(i,j,k)=max(0.,zmd(i,j+1,k)-zmd(i,j,k))
103        END DO
104     END DO
105  END DO
106!
107! rajout du terme lie a l ascendance induite
108!
109  DO j=2,klev
110     DO i=1,klon
111        za(i,j,j-1)=za(i,j,j-1)+mp(i,j)
112     END DO
113  END DO
114!
115! tendances
116!           
117  DO k=1,klev
118     DO j=1,klev
119        DO i=1,klon
120           zmfd(i,j)=zmfd(i,j)+za(i,j,k)*(x(i,k,it)-x(i,j,it))
121        END DO
122     END DO
123  END DO
124!
125! =========================================
126! calcul des tendances liees aux flux satures
127! =========================================
128  DO j=1,klev
129     DO i=1,klon
130        zmfa(i,j)=da(i,j)*(x(i,1,it)-x(i,j,it))
131     END DO
132  END DO
133  DO k=1,klev
134     DO j=1,klev
135        DO i=1,klon
136           zmfp(i,j)=zmfp(i,j)+phi(i,j,k)*(x(i,k,it)-x(i,j,it))
137        END DO
138     END DO
139  END DO
140  DO j=1,klev-1
141     DO i=1,klon
142        zmfu(i,j)=max(0.,upd(i,j+1)+dnd(i,j+1))*(x(i,j+1,it)-x(i,j,it))
143     END DO
144  END DO
145  DO j=2,klev
146     DO i=1,klon
147        zmfu(i,j)=zmfu(i,j)+min(0.,upd(i,j)+dnd(i,j))*(x(i,j,it)-x(i,j-1,it))
148     END DO
149  END DO
150
151! =========================================
152! calcul final des tendances
153! =========================================
154  DO k=1, klev
155     DO i=1, klon
156        deltap(i,k)=paprs(i,k)-paprs(i,k+1)
157     ENDDO
158  ENDDO
159  pdtimeRG=pdtime*RG
160!cdir collapse
161  DO k=1, klev
162     DO i=1, klon
163        dx(i,k,it)=(zmfd(i,k)+zmfu(i,k)       &
164                +zmfa(i,k)+zmfp(i,k))*pdtimeRG/deltap(i,k)
165     ENDDO
166  ENDDO
167
168! test de conservation du traceur
169!      conserv=0.
170!      DO k=1, klev
171!        DO i=1, klon
172!         conserv=conserv+dx(i,k,it)*   &
173!          deltap(i,k)/RG
174!        ENDDO
175!      ENDDO
176!      print *,'it',it,'cvltrorig conserv',conserv
177     
178END SUBROUTINE cvltrorig
Note: See TracBrowser for help on using the repository browser.