source: LMDZ4/trunk/libf/phylmd/cvltr.F @ 648

Last change on this file since 648 was 619, checked in by lmdzadmin, 20 years ago

Rajout convection Kerry Emanuel pour traceurs- MAF+JYG

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.7 KB
Line 
1c
2c $Header$
3c
4      SUBROUTINE cvltr(pdtime,da, phi, mp,paprs,pplay,x,upd,dnd,dx)
5      IMPLICIT NONE
6c=====================================================================
7c Objet : convection des traceurs / KE
8c Auteurs: M-A Filiberti and J-Y Grandpeix
9c=====================================================================
10c
11#include "dimensions.h"
12#include "dimphy.h"
13#include "YOMCST.h"
14#include "YOECUMF.h"
15c
16      REAL pdtime
17      REAL paprs(klon,klev+1) ! pression aux 1/2 couches (bas en haut)
18      REAL pplay(klon,klev)  ! pression pour le milieu de chaque couche
19      REAL x(klon,klev)        ! q de traceur (bas en haut)
20      REAL dx(klon,klev)     ! tendance de traceur  (bas en haut)
21      real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
22      REAL upd(klon,klev)      ! saturated updraft mass flux
23      REAL dnd(klon,klev)      ! saturated downdraft mass flux
24c
25c--variables locales     
26      real zed(klon,klev),zmd(klon,klev,klev)
27      real za(klon,klev,klev)
28      real zmfd(klon,klev),zmfa(klon,klev)
29      real zmfp(klon,klev),zmfu(klon,klev)
30      integer i,k,j
31c test conservation
32c      real conserv
33c =========================================
34c calcul des tendances liees au downdraft
35c =========================================
36      zed(:,:)=0.
37      zmfd(:,:)=0.
38      zmfa(:,:)=0.
39      zmfu(:,:)=0.
40      zmfp(:,:)=0.
41      zmd(:,:,:)=0.
42      za(:,:,:)=0.
43c entrainement
44      do k=1,klev-1
45        do i=1,klon
46          zed(i,k)=max(0.,mp(i,k)-mp(i,k+1))
47        end do
48      end do
49c
50c calcul de la matrice d echange
51c matrice de distribution de la masse entrainee en k
52c
53      do k=1,klev
54        do i=1,klon
55          zmd(i,k,k)=zed(i,k)
56        end do
57      end do
58      do k=2,klev
59        do j=k-1,1,-1
60          do i=1,klon
61          if(mp(i,j+1).ne.0) then
62          zmd(i,j,k)=zmd(i,j+1,k)*min(1.,mp(i,j)/mp(i,j+1))
63          endif
64          end do
65        end do
66      end do
67      do k=1,klev
68        do j=1,klev-1
69          do i=1,klon
70          za(i,j,k)=max(0.,zmd(i,j+1,k)-zmd(i,j,k))
71          end do
72        end do
73      end do
74c
75c rajout du terme lie a l ascendance induite
76c
77        do j=2,klev
78         do i=1,klon
79          za(i,j,j-1)=za(i,j,j-1)+mp(i,j)
80         end do
81        end do
82C
83c tendances
84c           
85      do k=1,klev
86        do j=1,klev
87          do i=1,klon
88          zmfd(i,j)=zmfd(i,j)+za(i,j,k)*(x(i,k)-x(i,j))
89          end do
90        end do
91      end do
92c
93c =========================================
94c calcul des tendances liees aux flux satures
95c =========================================
96      do j=1,klev
97        do i=1,klon
98          zmfa(i,j)=da(i,j)*(x(i,1)-x(i,j))
99        end do
100      end do
101      do k=1,klev
102        do j=1,klev
103          do i=1,klon
104          zmfp(i,j)=zmfp(i,j)+phi(i,j,k)*(x(i,k)-x(i,j))
105          end do
106        end do
107      end do
108      do j=1,klev-1
109        do i=1,klon
110          zmfu(i,j)=max(0.,upd(i,j+1)+dnd(i,j+1))*(x(i,j+1)-x(i,j))
111        end do
112      end do
113      do j=2,klev
114        do i=1,klon
115          zmfu(i,j)=zmfu(i,j)
116     .             +min(0.,upd(i,j)+dnd(i,j))*(x(i,j)-x(i,j-1))
117        end do
118      end do
119
120c =========================================
121c--calcul final des tendances
122c =========================================
123      do k=1, klev
124        do i=1, klon
125          dx(i,k)=(zmfd(i,k)+zmfu(i,k)
126     .      +zmfa(i,k)+zmfp(i,k))*pdtime
127     .      *RG/(paprs(i,k)-paprs(i,k+1))
128c          print*,'dx',k,dx(i,k)
129        enddo
130      enddo
131c
132c test de conservation du traceur
133c      conserv=0.
134c      do k=1, klev
135c        do i=1, klon
136c         conserv=conserv+dx(i,k)*
137c     .     (paprs(i,k)-paprs(i,k+1))/RG
138C
139c        enddo
140c      enddo
141c      print *,'conserv',conserv
142     
143      return
144      end
Note: See TracBrowser for help on using the repository browser.