3 SUBROUTINE advtrac(pbaru,pbarv , p, masse,q,iapptrac,teta, flxw, pk)
17 include
"dimensions.h"
26 include
"description.h"
50 REAL (kind=kind(1.d0)) :: t_initial, t_final, tps_cpu
55 SAVE iadvtr, massem, pbaruc, pbarvc
72 integer,
save :: countcfl=0
76 real,
save :: cflxmax(llm),cflymax(llm),cflzmax(llm)
106 IF ( iadvtr.EQ.iapp_tracvl )
THEN
115 CALL
groupe( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
118 flxw = wg /
REAL(iapp_tracvl)
123 zdp(
ij) = pbarug(
ij-1,
l) - pbarug(
ij,
l) &
124 - pbarvg(
ij-iip1,
l) + pbarvg(
ij,
l) &
127 CALL
scopy( jjm -1 ,zdp(iip1+iip1),iip1,zdp(
iip2),iip1 )
135 IF(max(abs(zdpmin),abs(zdpmax)).GT.0.5)
THEN
136 print*,
'WARNING DP/P l=',
l,
' MIN:',zdpmin, &
147 if (countcfl == 0. )
then
153 countcfl=countcfl+iapp_tracvl
159 if (pbarug(
ij,
l)>=0.)
then
168 cflx(
ij+iip1,
l)=cflx(
ij,
l)
174 if (pbarvg(
ij,
l)>=0.)
then
184 if (wg(
ij,
l)>=0.)
then
193 cflxmax(
l)=max(cflxmax(
l),maxval(cflx(:,
l)))
194 cflymax(
l)=max(cflymax(
l),maxval(cfly(:,
l)))
195 cflzmax(
l)=max(cflzmax(
l),maxval(cflz(:,
l)))
203 if (countcfl==day_step)
then
205 write(
lunout,*)
'L, CFLmax ' &
206 ,
l,maxval(cflx(:,
l)),maxval(cfly(:,
l)),maxval(cflz(:,
l))
218 call
massbar(massem,massebx,masseby)
225 if(iadv(iq) == 0) cycle
229 if(iadv(iq).eq.10)
THEN
230 call
vlsplt(
q(1,1,iq),2.,massem,wg,pbarug,pbarvg,
dtvr)
236 else if(iadv(iq).eq.14)
then
238 CALL
vlspltqs(
q(1,1,1), 2., massem, wg , &
243 else if(iadv(iq).eq.12)
then
245 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
247 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
251 call
advn(
q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,1)
253 else if(iadv(iq).eq.13)
then
255 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
257 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
261 call
advn(
q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,2)
266 else if (iadv(iq).eq.20)
then
267 call
pentes_ini(
q(1,1,iq),wg,massem,pbarug,pbarvg,0)
272 else if (iadv(iq).eq.30)
then
274 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
276 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
279 call
prather(
q(1,1,iq),wg,massem,pbarug,pbarvg, &
285 else if (iadv(iq).eq.11.OR.(iadv(iq).GE.16.AND. &
286 iadv(iq).LE.18))
then
290 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
292 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
300 cflmaxz=max(cflmaxz,aaa)
302 cflmaxz=max(cflmaxz,bbb)
305 if (cflmaxz.GE.1)
then
306 write(*,*)
'WARNING vertical',
'CFLmaxz=', cflmaxz
313 call interpre(
q(1,1,iq),qppm(1,1,iq),wg,fluxwppm,massem, &
314 apppm,bpppm,massebx,masseby,pbarug,pbarvg, &
315 unatppm,vnatppm,psppm)
321 if (iadv(iq).eq.11)
then
323 call
ppm3d(1,qppm(1,1,iq), &
325 unatppm,vnatppm,fluxwppm,dtbon,2,2,2,1, &
326 iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000, &
332 else if (iadv(iq).eq.16)
then
334 call
ppm3d(1,qppm(1,1,iq), &
336 unatppm,vnatppm,fluxwppm,dtbon,3,3,3,1, &
337 iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000, &
344 else if (iadv(iq).eq.17)
then
346 call
ppm3d(1,qppm(1,1,iq), &
348 unatppm,vnatppm,fluxwppm,dtbon,4,4,4,1, &
349 iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000, &
356 else if (iadv(iq).eq.18)
then
358 call
ppm3d(1,qppm(1,1,iq), &
360 unatppm,vnatppm,fluxwppm,dtbon,5,5,5,1, &
361 iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000, &