3 SUBROUTINE advtrac(pbaru,pbarv , p, masse,q,iapptrac,teta, flxw, pk)
17 include
"dimensions.h"
26 include
"description.h"
32 INTEGER,
INTENT(OUT) :: iapptrac
52 REAL (kind=kind(1.d0)) :: t_initial, t_final, tps_cpu
57 SAVE iadvtr, massem, pbaruc, pbarvc
74 integer,
save :: countcfl=0
78 real,
save :: cflxmax(
llm),cflymax(
llm),cflzmax(
llm)
88 pbaruc(ij,l) = pbaruc(ij,l) + pbaru(ij,l)
91 pbarvc(ij,l) = pbarvc(ij,l) + pbarv(ij,l)
117 CALL groupe( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
125 zdp(ij) = pbarug(ij-1,l) - pbarug(ij,l) &
126 - pbarvg(ij-iip1,l) + pbarvg(ij,l) &
127 + wg(ij,l+1) - wg(ij,l)
129 CALL scopy( jjm -1 ,zdp(iip1+iip1),iip1,zdp(
iip2),iip1 )
131 zdp(ij)= zdp(ij)*
dtvr/ massem(ij,l)
137 IF(max(abs(zdpmin),abs(zdpmax)).GT.0.5)
THEN
138 print*,
'WARNING DP/P l=',l,
' MIN:',zdpmin, &
149 if (countcfl == 0. )
then
161 if (pbarug(ij,l)>=0.)
then
162 cflx(ij,l)=pbarug(ij,l)*
dtvr/masse(ij,l)
164 cflx(ij,l)=-pbarug(ij,l)*
dtvr/masse(ij+1,l)
170 cflx(ij+iip1,l)=cflx(ij,l)
176 if (pbarvg(ij,l)>=0.)
then
177 cfly(ij,l)=pbarvg(ij,l)*
dtvr/masse(ij,l)
179 cfly(ij,l)=-pbarvg(ij,l)*
dtvr/masse(ij+iip1,l)
186 if (wg(ij,l)>=0.)
then
187 cflz(ij,l)=wg(ij,l)*
dtvr/masse(ij,l)
189 cflz(ij,l)=-wg(ij,l)*
dtvr/masse(ij,l-1)
195 cflxmax(l)=max(cflxmax(l),maxval(cflx(:,l)))
196 cflymax(l)=max(cflymax(l),maxval(cfly(:,l)))
197 cflzmax(l)=max(cflzmax(l),maxval(cflz(:,l)))
207 write(
lunout,*)
'L, CFL[xyz]max:', l, cflxmax(l), cflymax(l), &
220 call massbar(massem,massebx,masseby)
227 write(*,*)
'advtrac 227'
233 if(
iadv(iq) == 0) cycle
237 if(
iadv(iq).eq.10)
THEN
241 call vlsplt(q,2.,massem,wg,pbarug,pbarvg,
dtvr,iq)
247 else if(
iadv(iq).eq.14)
then
250 CALL vlspltqs( q, 2., massem, wg , &
251 pbarug,pbarvg,
dtvr,p,pk,teta,iq)
256 else if(
iadv(iq).eq.12)
then
260 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
264 call advn(q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,1)
266 else if(
iadv(iq).eq.13)
then
270 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
274 call advn(q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,2)
279 else if (
iadv(iq).eq.20)
then
280 call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0)
285 else if (
iadv(iq).eq.30)
then
289 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
292 call prather(q(1,1,iq),wg,massem,pbarug,pbarvg, &
298 else if (
iadv(iq).eq.11.OR.(
iadv(iq).GE.16.AND. &
299 iadv(iq).LE.18))
then
305 write(*,*)
'WARNING horizontal dt=',dtbon,
'dtvr=', &
312 aaa=wg(ij,l)*
dtvr/massem(ij,l)
313 cflmaxz=max(cflmaxz,aaa)
314 bbb=-wg(ij,l)*
dtvr/massem(ij,l-1)
315 cflmaxz=max(cflmaxz,bbb)
318 if (cflmaxz.GE.1)
then
319 write(*,*)
'WARNING vertical',
'CFLmaxz=', cflmaxz
326 call interpre(q(1,1,iq),qppm(1,1,iq),wg,fluxwppm,massem, &
327 apppm,bpppm,massebx,masseby,pbarug,pbarvg, &
328 unatppm,vnatppm,psppm)
334 if (
iadv(iq).eq.11)
then
336 call ppm3d(1,qppm(1,1,iq), &
338 unatppm,vnatppm,fluxwppm,dtbon,2,2,2,1, &
345 else if (
iadv(iq).eq.16)
then
347 call ppm3d(1,qppm(1,1,iq), &
349 unatppm,vnatppm,fluxwppm,dtbon,3,3,3,1, &
357 else if (
iadv(iq).eq.17)
then
359 call ppm3d(1,qppm(1,1,iq), &
361 unatppm,vnatppm,fluxwppm,dtbon,4,4,4,1, &
369 else if (
iadv(iq).eq.18)
then
371 call ppm3d(1,qppm(1,1,iq), &
373 unatppm,vnatppm,fluxwppm,dtbon,5,5,5,1, &
402 write(*,*)
'advtrac 402'
subroutine pentes_ini(q, w, masse, pbaru, pbarv, mode)
integer, save iapp_tracvl
!$Header llmm1 INTEGER ip1jmp1
subroutine interpost(q, qppm)
subroutine adaptdt(nadv, dtbon, n, pbaru, masse)
logical, save ok_iso_verif
!$Id Turb_fcg_gcssold get_uvd hqturb_gcssold endif!large scale llm day day1 day day1 *dt_toga endif!time annee_ref dt_toga u_toga vq_toga w_prof vq_prof llm day day1 day day1 *dt_dice endif!time annee_ref dt_dice swup_dice vg_dice omega_dice tg_prof vg_profd w_profd omega_profd!do llm!print llm l llm
subroutine advn(q, masse, w, pbaru, pbarv, pdt, mode)
subroutine scopy(n, sx, incx, sy, incy)
!$Header llmm1 INTEGER ip1jm
subroutine massbar(masse, massebx, masseby)
subroutine groupe(pext, pbaru, pbarv, pbarum, pbarvm, wm)
subroutine minmax(imax, xi, zmin, zmax)
subroutine ppm3d(IGD, Q, PS1, PS2, U, V, W, NDT, IORD, JORD, KORD, NC, IMR, JNP, j1, NLAY, AP, BP, PT, AE, fill, dum, Umax)
subroutine prather(q, w, masse, pbaru, pbarv, nt, dt)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
subroutine vlspltqs(q, pente_max, masse, w, pbaru, pbarv, pdt, p, pk, teta, iq)
!$Id mode_top_bound COMMON comconstr dtvr
subroutine check_isotopes_seq(q, ip1jmp1, err_msg)
c c zjulian c cym CALL iim cym klev iim
subroutine vlsplt(q, pente_max, masse, w, pbaru, pbarv, pdt, iq)
subroutine advtrac(pbaru, pbarv, p, masse, q, iapptrac, teta, flxw, pk)
integer, dimension(:), allocatable, save iadv
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout