source: LMDZ4/branches/LMDZ4_par_0/libf/phylmd/cvltr.F @ 5080

Last change on this file since 5080 was 634, checked in by Laurent Fairhead, 20 years ago

Modifications faites à la physique pour la rendre parallele YM
Une branche de travail LMDZ4_par_0 a été créée provisoirement afin de tester
les modifs pleinement avant leurs inclusions dans le tronc principal
LF

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