3 SUBROUTINE advtrac_p(pbaru,pbarv , p, masse,q,iapptrac,teta, flxw, pk)
22 include
"dimensions.h"
31 include
"description.h"
54 REAL (kind=kind(1.d0)) :: t_initial, t_final, tps_cpu
58 SAVE iadvtr, massem, pbaruc, pbarvc
75 REAL,
SAVE :: finmasse(
ip1jmp1,llm)
76 integer ijb,ije,ijb_u,ijb_v,ije_u,ije_v,
j
77 type(request) :: request_vanleer
79 REAL,
SAVE :: teta_tmp(
ip1jmp1,llm)
80 REAL,
SAVE :: pk_tmp(
ip1jmp1,llm)
87 if (pole_nord) ijb_v=ij_begin
88 if (pole_sud) ije_v=ij_end-iip1
95 pbaruc(ijb_u:ije_u,
l)=0.
96 pbarvc(ijb_v:ije_v,
l)=0.
105 pbaruc(
ij,
l) = pbaruc(
ij,
l) + pbaru(
ij,
l)
108 pbarvc(
ij,
l) = pbarvc(
ij,
l) + pbarv(
ij,
l)
122 massem(ijb:ije,
l)=masse(ijb:ije,
l)
138 IF ( iadvtr.EQ.iapp_tracvl )
THEN
154 CALL
groupe_p( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
160 p_tmp(ijb:ije,
l)=p(ijb:ije,
l)
166 pk_tmp(ijb:ije,
l)=pk(ijb:ije,
l)
167 teta_tmp(ijb:ije,
l)=
teta(ijb:ije,
l)
176 jj_nb_vanleer,0,0,request_vanleer)
178 jj_nb_vanleer,1,0,request_vanleer)
180 jj_nb_vanleer,0,0,request_vanleer)
182 jj_nb_vanleer,0,0,request_vanleer)
184 jj_nb_vanleer,1,1,request_vanleer)
186 jj_nb_vanleer,1,1,request_vanleer)
188 jj_nb_vanleer,1,1,request_vanleer)
191 jj_nb_vanleer,0,0,request_vanleer)
203 call
vtb(vtadvection)
211 flxw(ijb:ije,1:llm)=wg(ijb:ije,1:llm)/
REAL(iapp_tracvl)
216 if (pole_nord) ijb=ij_begin+iip1
217 if (pole_sud) ije=ij_end-iip1
222 zdp(
ij) = pbarug(
ij-1,
l) - pbarug(
ij,
l) &
223 - pbarvg(
ij-iip1,
l) + pbarvg(
ij,
l) &
230 do ij=ijb,ije-iip1+1,iip1
231 zdp(
ij)=zdp(
ij+iip1-1)
241 CALL
minmax( ije-ijb+1, zdp(ijb), zdpmin,zdpmax )
243 IF(max(abs(zdpmin),abs(zdpmax)).GT.0.5)
THEN
244 print*,
'WARNING DP/P l=',
l,
' MIN:',zdpmin, &
265 pbarug,pbarvg,
dtvr,p_tmp,pk_tmp,teta_tmp )
274 if(iadv(iq) == 0) cycle
278 if(iadv(iq).eq.10)
THEN
286 else if(iadv(iq).eq.14)
then
290 pbarug,pbarvg,
dtvr,p_tmp,pk_tmp,teta_tmp )
294 else if(iadv(iq).eq.12)
then
295 stop
'advtrac : schema non parallelise'
297 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
299 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
303 call
advn(
q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,1)
305 else if(iadv(iq).eq.13)
then
306 stop
'advtrac : schema non parallelise'
308 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
310 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
314 call
advn(
q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,2)
319 else if (iadv(iq).eq.20)
then
320 stop
'advtrac : schema non parallelise'
322 call
pentes_ini(
q(1,1,iq),wg,massem,pbarug,pbarvg,0)
327 else if (iadv(iq).eq.30)
then
328 stop
'advtrac : schema non parallelise'
330 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
332 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
335 call
prather(
q(1,1,iq),wg,massem,pbarug,pbarvg, &
340 else if (iadv(iq).eq.11.OR.(iadv(iq).GE.16.AND. &
341 iadv(iq).LE.18))
then
343 stop
'advtrac : schema non parallelise'
347 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
349 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
357 cflmaxz=max(cflmaxz,aaa)
359 cflmaxz=max(cflmaxz,bbb)
362 if (cflmaxz.GE.1)
then
363 write(*,*)
'WARNING vertical',
'CFLmaxz=', cflmaxz
370 call interpre(
q(1,1,iq),qppm(1,1,iq),wg,fluxwppm,massem, &
371 apppm,bpppm,massebx,masseby,pbarug,pbarvg, &
372 unatppm,vnatppm,psppm)
378 if (iadv(iq).eq.11)
then
380 call
ppm3d(1,qppm(1,1,iq), &
382 unatppm,vnatppm,fluxwppm,dtbon,2,2,2,1, &
383 iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000, &
389 else if (iadv(iq).eq.16)
then
391 call
ppm3d(1,qppm(1,1,iq), &
393 unatppm,vnatppm,fluxwppm,dtbon,3,3,3,1, &
394 iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000, &
401 else if (iadv(iq).eq.17)
then
403 call
ppm3d(1,qppm(1,1,iq), &
405 unatppm,vnatppm,fluxwppm,dtbon,4,4,4,1, &
406 iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000, &
413 else if (iadv(iq).eq.18)
then
415 call
ppm3d(1,qppm(1,1,iq), &
417 unatppm,vnatppm,fluxwppm,dtbon,5,5,5,1, &
418 iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000, &
448 if (planet_type==
"earth")
then
469 call
vte(vtadvection)
476 jj_nb_caldyn,0,0,request_vanleer)
480 jj_nb_caldyn,0,0,request_vanleer)