My Project
 All Classes Files Functions Variables Macros
cv3_vertmix.F
Go to the documentation of this file.
1  SUBROUTINE cv3_vertmix(len,nd,iflag,plim1,plim2,p,ph,t,q,u,v
2  : ,w,wi,nk,tmix,thmix,qmix,qsmix
3  : ,umix,vmix,plcl)
4 ***************************************************************
5 * *
6 * CV3_VERTMIX Brassage adiabatique d'une couche d'epaisseur *
7 * arbitraire. *
8 * *
9 * written by : Grandpeix Jean-Yves, 28/12/2001, 13.14.24 *
10 * modified by : Filiberti M-A 06/2005 vectorisation *
11 ***************************************************************
12 *
13  implicit none
14 C==============================================================
15 C
16 C vertmix : determine theta et r du melange obtenu en brassant
17 C adiabatiquement entre plim1 et plim2, avec une ponderation w.
18 C
19 C===============================================================
20 
21 #include "cvthermo.h"
22 #include "YOETHF.h"
23 #include "YOMCST.h"
24 #include "FCTTRE.h"
25 c input :
26  integer nd,len
27  integer nk(len),iflag(len)
28  real t(len,nd),q(len,nd),w(nd)
29  real u(len,nd),v(len,nd)
30  real p(len,nd),ph(len,nd+1)
31  real plim1(len),plim2(len)
32 c output :
33  real tmix(len),thmix(len),qmix(len),wi(len,nd)
34  real umix(len),vmix(len)
35  real qsmix(len)
36  real plcl(len)
37 c internal variables :
38  integer j1(len),j2(len),niflag7
39  real a,b
40  real ahm(len),dpw(len),coef(len)
41  real p1(len,nd),p2(len,nd)
42  real rdcp(len),a2(len),b2(len),pnk(len)
43  real rh(len),chi(len)
44  real cpn
45  real x,y,p0,p0m1,zdelta,zcor
46 
47  integer i,j
48 
49  do j = 1,nd
50  do i=1,len
51  if (plim1(i).le.ph(i,j)) j1(i) = j
52  if (plim2(i).ge.ph(i,j+1).and.plim2(i).lt.ph(i,j)) j2(i) = j
53  enddo
54  enddo
55 c
56  do j=1,nd
57  do i = 1,len
58  wi(i,j) = 0.
59  enddo
60  enddo
61  do i = 1,len
62  ahm(i)=0.
63  qmix(i)=0.
64  umix(i)=0.
65  vmix(i)=0.
66  dpw(i) =0.
67  a2(i)=0.0
68  b2(i) = 0.
69  pnk(i) = p(i,nk(i))
70  enddo
71 c
72  p0 = 1000.
73  p0m1 = 1./p0
74 c
75  do i=1,len
76  coef(i) = 1./(plim1(i)-plim2(i))
77  end do
78 c
79  do j=1,nd
80  do i=1,len
81  if (j.ge.j1(i).and.j.le.j2(i)) then
82  p1(i,j) = min(ph(i,j),plim1(i))
83  p2(i,j) = max(ph(i,j+1),plim2(i))
84 cCRtest:couplage thermiques: deja normalise
85 c wi(i,j) = w(j)
86 c print*,'wi',wi(i,j)
87  wi(i,j) = w(j)*(p1(i,j)-p2(i,j))*coef(i)
88  dpw(i) = dpw(i)+wi(i,j)
89  endif
90  end do
91  end do
92 cCR:print
93 c do i=1,len
94 c print*,'plim',plim1(i),plim2(i)
95 c enddo
96  do j=1,nd
97  do i=1,len
98  if (j.ge.j1(i).and.j.le.j2(i)) then
99  wi(i,j)=wi(i,j)/dpw(i)
100  ahm(i)=ahm(i)+(cpd*(1.-q(i,j))+q(i,j)*cpv)*t(i,j)*wi(i,j)
101  qmix(i)=qmix(i)+q(i,j)*wi(i,j)
102  umix(i)=umix(i)+u(i,j)*wi(i,j)
103  vmix(i)=vmix(i)+v(i,j)*wi(i,j)
104  endif
105  end do
106  end do
107 c
108  do i=1,len
109  rdcp(i)=(rrd*(1.-qmix(i))+qmix(i)*rrv)/
110  : (cpd*(1.-qmix(i))+qmix(i)*cpv)
111  end do
112 c
113 
114 c
115  do 20 j=1,nd
116  do 18 i=1,len
117  if (j.ge.j1(i).and.j.le.j2(i)) then
118 cc x=(.5*(p1(i,j)+p2(i,j))*p0m1)**rdcp(i)
119  y=(.5*(p1(i,j)+p2(i,j))/pnk(i))**rdcp(i)
120 cc a2(i)=a2(i)+(cpd*(1.-qmix(i))+qmix(i)*cpv)*x*wi(i,j)
121  b2(i)=b2(i)+(cpd*(1.-qmix(i))+qmix(i)*cpv)*y*wi(i,j)
122  endif
123  18 continue
124  20 continue
125 c
126  do i=1,len
127  tmix(i) = ahm(i)/b2(i)
128  thmix(i) =tmix(i)*(p0/pnk(i))**rdcp(i)
129 c print*,'thmix ahm',ahm(i),b2(i)
130 c print*,'thmix t',tmix(i),p0
131 c print*,'thmix p',pnk(i),rdcp(i)
132 c print*,'thmix',thmix(i)
133 cc thmix(i) = ahm(i)/a2(i)
134 cc tmix(i)= thmix(i)*(pnk(i)*p0m1)**rdcp(i)
135  zdelta=max(0.,sign(1.,rtt-tmix(i)))
136  qsmix(i)= r2es*foeew(tmix(i),zdelta)/(pnk(i)*100.)
137  qsmix(i)=min(0.5,qsmix(i))
138  zcor=1./(1.-retv*qsmix(i))
139  qsmix(i)=qsmix(i)*zcor
140  end do
141 c
142 !-------------------------------------------------------------------
143 ! --- Calculate lifted condensation level of air at parcel origin level
144 ! --- (Within 0.2% of formula of Bolton, MON. WEA. REV.,1980)
145 !-------------------------------------------------------------------
146 
147  a = 1669.0 ! convect3
148  b = 122.0 ! convect3
149 
150 
151  niflag7=0
152  do 260 i=1,len
153 
154  if (iflag(i).ne.7) then ! modif sb Jun7th 2002
155 c
156  rh(i)=qmix(i)/qsmix(i)
157  chi(i)=tmix(i)/(a-b*rh(i)-tmix(i)) ! convect3
158 c ATTENTION, la LIGNE DESSOUS A ETE RAJOUTEE ARBITRAIREMENT ET
159 c MASQUE UN PB POTENTIEL
160  chi(i)=max(chi(i),0.)
161  rh(i)=max(rh(i),0.)
162  plcl(i)=pnk(i)*(rh(i)**chi(i))
163  if(((plcl(i).lt.200.0).or.(plcl(i).ge.2000.0))
164  & .and.(iflag(i).eq.0))iflag(i)=8
165 
166  else
167 
168  niflag7=niflag7+1
169  plcl(i)=plim2(i)
170 c
171  endif ! iflag=7
172 
173 c print*,'NIFLAG7 =',niflag7
174 
175  260 continue
176 
177  return
178  end
179