31 #include "dimensions.h"
35 #include "comdissip.h"
40 #include "description.h"
47 REAL massebx(ijb_u:ije_u,llm),masseby(ijb_v:ije_v,llm)
50 REAL pbarug(ijb_u:ije_u,llm),pbarvg(ijb_v:ije_v,llm)
51 REAL wg(ijb_u:ije_u,llm)
52 REAL q(ijb_u:ije_u,llm,nqtot),massem(ijb_u:ije_u,llm)
53 REAL p( ijb_u:ije_u,
llmp1 ),
teta(ijb_u:ije_u,llm)
54 REAL pk(ijb_u:ije_u,llm)
61 REAL (kind=kind(1.d0)) :: t_initial, t_final, tps_cpu
62 INTEGER,
SAVE :: iadvtr=0
72 REAL psppm(
iim,jjb_u:jje_u)
73 REAL unatppm(
iim,jjb_u:jje_u,llm),vnatppm(
iim,jjb_u:jje_u,llm)
74 REAL qppm(
iim*jjnb_u,llm,nqtot)
75 REAL fluxwppm(
iim,jjb_u:jje_u,llm)
80 integer ijb,ije,ijbu,ijbv,ijeu,ijev,
j
86 if (pole_nord) ijb=ij_begin+iip1
87 if (pole_sud) ije=ij_end-iip1
92 zdp(
ij) = pbarug(
ij-1,
l) - pbarug(
ij,
l)
93 s - pbarvg(
ij-iip1,
l) + pbarvg(
ij,
l)
100 do ij=ijb,ije-iip1+1,iip1
101 zdp(
ij)=zdp(
ij+iip1-1)
111 CALL
minmax( ije-ijb+1, zdp(ijb), zdpmin,zdpmax )
113 IF(max(abs(zdpmin),abs(zdpmax)).GT.0.5)
THEN
114 print*,
'WARNING DP/P l=',
l,
' MIN:',zdpmin,
157 * pbarug,pbarvg,
dtvr,p,
173 if(iadv(iq) == 0) cycle
177 if(iadv(iq).eq.10)
THEN
185 else if(iadv(iq).eq.14)
then
193 else if(iadv(iq).eq.12)
then
194 stop
'advtrac : schema non parallelise'
196 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
198 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=',
202 call
advn(
q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,1)
204 else if(iadv(iq).eq.13)
then
205 stop
'advtrac : schema non parallelise'
207 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
209 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=',
213 call
advn(
q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,2)
218 else if (iadv(iq).eq.20)
then
219 stop
'advtrac : schema non parallelise'
221 call
pentes_ini(
q(1,1,iq),wg,massem,pbarug,pbarvg,0)
226 else if (iadv(iq).eq.30)
then
227 stop
'advtrac : schema non parallelise'
229 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
231 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=',
234 call
prather(
q(1,1,iq),wg,massem,pbarug,pbarvg,
239 else if (iadv(iq).eq.11.OR.(iadv(iq).GE.16.AND.
240 s iadv(iq).LE.18))
then
242 stop
'advtrac : schema non parallelise'
246 call
adaptdt(iadv(iq),dtbon,
n,pbarug,massem)
248 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=',
256 cflmaxz=max(cflmaxz,aaa)
258 cflmaxz=max(cflmaxz,bbb)
261 if (cflmaxz.GE.1)
then
262 write(*,*)
'WARNING vertical',
'CFLmaxz=', cflmaxz
269 call interpre(
q(1,1,iq),qppm(1,1,iq),wg,fluxwppm,massem,
270 s apppm,bpppm,massebx,masseby,pbarug,pbarvg,
271 s unatppm,vnatppm,psppm)
277 if (iadv(iq).eq.11)
then
279 call
ppm3d(1,qppm(1,1,iq),
281 s unatppm,vnatppm,fluxwppm,dtbon,2,2,2,1,
282 s
iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000,
288 else if (iadv(iq).eq.16)
then
290 call
ppm3d(1,qppm(1,1,iq),
292 s unatppm,vnatppm,fluxwppm,dtbon,3,3,3,1,
293 s
iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000,
300 else if (iadv(iq).eq.17)
then
302 call
ppm3d(1,qppm(1,1,iq),
304 s unatppm,vnatppm,fluxwppm,dtbon,4,4,4,1,
305 s
iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000,
312 else if (iadv(iq).eq.18)
then
314 call
ppm3d(1,qppm(1,1,iq),
316 s unatppm,vnatppm,fluxwppm,dtbon,5,5,5,1,
317 s
iim,
jjp1,2,llm,apppm,bpppm,0.01,6400000,
344 if (planet_type==
"earth")
then