/[lmdze]/trunk/phylmd/cvltr.f
ViewVC logotype

Diff of /trunk/phylmd/cvltr.f

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

trunk/libf/phylmd/cvltr.f revision 3 by guez, Wed Feb 27 13:16:39 2008 UTC trunk/phylmd/cvltr.f revision 254 by guez, Mon Feb 5 10:39:38 2018 UTC
# Line 1  Line 1 
1  c  module cvltr_m
2  c $Header: /home/cvsroot/LMDZ4/libf/phylmd/cvltr.F,v 1.1 2005/04/15 12:36:17 lmdzadmin Exp $  
3  c    IMPLICIT NONE
4        SUBROUTINE cvltr(pdtime,da, phi, mp,paprs,pplay,x,upd,dnd,dx)  
5        use dimens_m  contains
6        use dimphy  
7        use YOMCST    SUBROUTINE cvltr(pdtime, da, phi, mp, paprs, x, upd, dnd, dx)
8        IMPLICIT NONE  
9  c=====================================================================      ! From LMDZ4/libf/phylmd/cvltr.F, version 1.1 2005/04/15 12:36:17
10  c Objet : convection des traceurs / KE  
11  c Auteurs: M-A Filiberti and J-Y Grandpeix      USE dimphy, ONLY: klev, klon
12  c=====================================================================      USE suphec_m, ONLY: rg
13  c  
14        include "YOECUMF.h"      ! Objet : convection des traceurs / Kerry Emanuel
15  c      ! Authors: M.-A. Filiberti and J.-Y. Grandpeix
16        REAL pdtime  
17        REAL, intent(in):: paprs(klon,klev+1) ! pression aux 1/2 couches (bas en haut)      REAL, intent(in):: pdtime
18        REAL pplay(klon,klev)  ! pression pour le milieu de chaque couche      real, intent(in):: da(klon, klev), phi(klon, klev, klev), mp(klon, klev)
19        REAL x(klon,klev)        ! q de traceur (bas en haut)      REAL, intent(in):: paprs(klon, klev + 1) ! pression aux 1/2 couches
20        REAL dx(klon,klev)     ! tendance de traceur  (bas en haut)      REAL, intent(in):: x(klon, klev) ! q de traceur (bas en haut)
21        real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)      REAL, intent(in):: upd(klon, klev) ! saturated updraft mass flux
22        REAL upd(klon,klev)      ! saturated updraft mass flux      REAL, intent(in):: dnd(klon, klev) ! saturated downdraft mass flux
23        REAL dnd(klon,klev)      ! saturated downdraft mass flux      REAL, intent(out):: dx(klon, klev) ! tendance de traceur (bas en haut)
24  c  
25  c--variables locales            ! Local:
26        real zed(klon,klev),zmd(klon,klev,klev)      real zed(klon, klev), zmd(klon, klev, klev)
27        real za(klon,klev,klev)      real za(klon, klev, klev)
28        real zmfd(klon,klev),zmfa(klon,klev)      real zmfd(klon, klev), zmfa(klon, klev)
29        real zmfp(klon,klev),zmfu(klon,klev)      real zmfp(klon, klev), zmfu(klon, klev)
30        integer i,k,j      integer i, k, j
31  c test conservation  
32  c      real conserv      !------------------------------------------------------------
33  c =========================================  
34  c calcul des tendances liees au downdraft      ! calcul des tendances liees au downdraft
35  c =========================================  
36        zed(:,:)=0.      zed = 0.
37        zmfd(:,:)=0.      zmfd = 0.
38        zmfa(:,:)=0.      zmfa = 0.
39        zmfu(:,:)=0.      zmfu = 0.
40        zmfp(:,:)=0.      zmfp = 0.
41        zmd(:,:,:)=0.      zmd = 0.
42        za(:,:,:)=0.      za = 0.
43  c entrainement      ! entrainement
44        do k=1,klev-1      do k = 1, klev - 1
45          do i=1,klon         do i = 1, klon
46            zed(i,k)=max(0.,mp(i,k)-mp(i,k+1))            zed(i, k) = max(0., mp(i, k) - mp(i, k + 1))
47          end do         end do
48        end do      end do
49  c  
50  c calcul de la matrice d echange      ! calcul de la matrice d echange
51  c matrice de distribution de la masse entrainee en k      ! matrice de distribution de la masse entrainee en k
52  c  
53        do k=1,klev      do k = 1, klev
54          do i=1,klon         do i = 1, klon
55            zmd(i,k,k)=zed(i,k)            zmd(i, k, k) = zed(i, k)
56          end do         end do
57        end do      end do
58        do k=2,klev      do k = 2, klev
59          do j=k-1,1,-1         do j = k - 1, 1, - 1
60            do i=1,klon            do i = 1, klon
61            if(mp(i,j+1).ne.0) then               if(mp(i, j + 1) /= 0) then
62            zmd(i,j,k)=zmd(i,j+1,k)*min(1.,mp(i,j)/mp(i,j+1))                  zmd(i, j, k) = zmd(i, j + 1, k) * min(1., mp(i, j)/mp(i, j + 1))
63            endif               endif
64            end do            end do
65          end do         end do
66        end do      end do
67        do k=1,klev      do k = 1, klev
68          do j=1,klev-1         do j = 1, klev - 1
69            do i=1,klon            do i = 1, klon
70            za(i,j,k)=max(0.,zmd(i,j+1,k)-zmd(i,j,k))               za(i, j, k) = max(0., zmd(i, j + 1, k) - zmd(i, j, k))
71            end do            end do
72          end do         end do
73        end do      end do
74  c  
75  c rajout du terme lie a l ascendance induite      ! rajout du terme lie a l'ascendance induite
76  c  
77          do j=2,klev      do j = 2, klev
78           do i=1,klon         do i = 1, klon
79            za(i,j,j-1)=za(i,j,j-1)+mp(i,j)            za(i, j, j - 1) = za(i, j, j - 1) + mp(i, j)
80           end do         end do
81          end do      end do
82  C  
83  c tendances      ! tendances
84  c              
85        do k=1,klev      do k = 1, klev
86          do j=1,klev         do j = 1, klev
87            do i=1,klon            do i = 1, klon
88            zmfd(i,j)=zmfd(i,j)+za(i,j,k)*(x(i,k)-x(i,j))               zmfd(i, j) = zmfd(i, j) + za(i, j, k) * (x(i, k) - x(i, j))
89            end do            end do
90          end do         end do
91        end do      end do
92  c  
93  c =========================================      ! calcul des tendances liees aux flux satures
94  c calcul des tendances liees aux flux satures  
95  c =========================================      do j = 1, klev
96        do j=1,klev         do i = 1, klon
97          do i=1,klon            zmfa(i, j) = da(i, j) * (x(i, 1) - x(i, j))
98            zmfa(i,j)=da(i,j)*(x(i,1)-x(i,j))         end do
99          end do      end do
100        end do      do k = 1, klev
101        do k=1,klev         do j = 1, klev
102          do j=1,klev            do i = 1, klon
103            do i=1,klon               zmfp(i, j) = zmfp(i, j) + phi(i, j, k) * (x(i, k) - x(i, j))
           zmfp(i,j)=zmfp(i,j)+phi(i,j,k)*(x(i,k)-x(i,j))  
104            end do            end do
105          end do         end do
106        end do      end do
107        do j=1,klev-1      do j = 1, klev - 1
108          do i=1,klon         do i = 1, klon
109            zmfu(i,j)=max(0.,upd(i,j+1)+dnd(i,j+1))*(x(i,j+1)-x(i,j))            zmfu(i, j) = max(0., upd(i, j + 1) + dnd(i, j + 1)) &
110          end do                 * (x(i, j + 1) - x(i, j))
111        end do         end do
112        do j=2,klev      end do
113          do i=1,klon      do j = 2, klev
114            zmfu(i,j)=zmfu(i,j)         do i = 1, klon
115       .             +min(0.,upd(i,j)+dnd(i,j))*(x(i,j)-x(i,j-1))            zmfu(i, j) = zmfu(i, j) &
116          end do                 + min(0., upd(i, j) + dnd(i, j)) * (x(i, j) - x(i, j - 1))
117        end do         end do
118        end do
119  c =========================================  
120  c--calcul final des tendances      ! calcul final des tendances
121  c =========================================  
122        do k=1, klev      do k = 1, klev
123          do i=1, klon         do i = 1, klon
124            dx(i,k)=(zmfd(i,k)+zmfu(i,k)            dx(i, k) = (zmfd(i, k) + zmfu(i, k) &
125       .      +zmfa(i,k)+zmfp(i,k))*pdtime                 + zmfa(i, k) + zmfp(i, k)) * pdtime &
126       .      *RG/(paprs(i,k)-paprs(i,k+1))                 * RG/(paprs(i, k) - paprs(i, k + 1))
127  c          print*,'dx',k,dx(i,k)         enddo
128          enddo      enddo
129        enddo  
130  c    end SUBROUTINE cvltr
131  c test de conservation du traceur  
132  c      conserv=0.  end module cvltr_m
 c      do k=1, klev  
 c        do i=1, klon  
 c         conserv=conserv+dx(i,k)*  
 c     .     (paprs(i,k)-paprs(i,k+1))/RG  
 C  
 c        enddo  
 c      enddo  
 c      print *,'conserv',conserv  
       
       return  
       end  

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

  ViewVC Help
Powered by ViewVC 1.1.21