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

Last change on this file since 5301 was 5289, checked in by abarral, 4 days ago

Turn YOECUMF.h into a module
Fix USE in fxy_new_mod_h.f90

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