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

Contents of /trunk/Sources/phylmd/cvltr.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 134 - (show annotations)
Wed Apr 29 15:47:56 2015 UTC (9 years ago) by guez
File size: 3916 byte(s)
Sources inside, compilation outside.
1 module cvltr_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE cvltr(pdtime,da, phi, mp,paprs,x,upd,dnd,dx)
8
9 ! From LMDZ4/libf/phylmd/cvltr.F,v 1.1 2005/04/15 12:36:17
10
11 USE dimphy, ONLY: klev, klon
12 USE suphec_m, ONLY: rg
13
14 !=====================================================================
15 ! Objet : convection des traceurs / KE
16 ! Auteurs: M-A Filiberti and J-Y Grandpeix
17 !=====================================================================
18 !
19 !
20 REAL, intent(in):: pdtime
21 REAL, intent(in):: paprs(klon,klev+1) ! pression aux 1/2 couches (bas en haut)
22 REAL, intent(in):: x(klon,klev) ! q de traceur (bas en haut)
23 REAL dx(klon,klev) ! tendance de traceur (bas en haut)
24 real, intent(in):: da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
25 REAL, intent(in):: upd(klon,klev) ! saturated updraft mass flux
26 REAL, intent(in):: dnd(klon,klev) ! saturated downdraft mass flux
27 !
28 !--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
34 ! test conservation
35 ! real conserv
36 ! =========================================
37 ! calcul des tendances liees au downdraft
38 ! =========================================
39 zed(:,:)=0.
40 zmfd(:,:)=0.
41 zmfa(:,:)=0.
42 zmfu(:,:)=0.
43 zmfp(:,:)=0.
44 zmd(:,:,:)=0.
45 za(:,:,:)=0.
46 ! 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
52 !
53 ! calcul de la matrice d echange
54 ! matrice de distribution de la masse entrainee en k
55 !
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
77 !
78 ! rajout du terme lie a l ascendance induite
79 !
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
85 !
86 ! tendances
87 !
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
95 !
96 ! =========================================
97 ! calcul des tendances liees aux flux satures
98 ! =========================================
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
123 ! =========================================
124 !--calcul final des tendances
125 ! =========================================
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))
131 ! print*,'dx',k,dx(i,k)
132 enddo
133 enddo
134 !
135 ! test de conservation du traceur
136 ! conserv=0.
137 ! do k=1, klev
138 ! do i=1, klon
139 ! conserv=conserv+dx(i,k)*
140 ! . (paprs(i,k)-paprs(i,k+1))/RG
141 !
142 ! enddo
143 ! enddo
144 ! print *,'conserv',conserv
145
146 end SUBROUTINE cvltr
147
148 end module cvltr_m

  ViewVC Help
Powered by ViewVC 1.1.21