4 SUBROUTINE advn(q,masse,w,pbaru,pbarv,pdt,mode)
19 #include "dimensions.h"
40 integer ijlqmin,iqmin,jqmin,lqmin
51 real temps0,temps1,temps2,temps3
52 real ztemps1,ztemps2,ztemps3,
ssum
55 save temps1,temps2,temps3
65 data temps1,temps2,temps3/0.,0.,0./
75 mv(
ij,
l)=pbarv(
ij,
l) * zzpbar
113 call
advnx(zq,zqg,zqd,zm,
mu,mode)
115 call
advny(zq,zqs,zqn,zm,mv)
117 call
advnz(zq,zqh,zqb,zm,mw)
120 call
advny(zq,zqs,zqn,zm,mv)
122 call
advnx(zq,zqg,zqd,zm,
mu,mode)
128 temps1=temps1+ztemps1-ztemps2
129 print*,
'VLSPLT X:',temps1,
' Y:',temps2,
' Z:',temps3
151 #include "dimensions.h"
153 #include "iniprint.h"
193 zqu(
ij)=zqu(
ij)-dxqu(
ij+1)/12.
199 zqu(
ij)=zqu(
ij)+dxqu(
ij-1)/12.
216 extremum(
ij)=dxqu(
ij)*dxqu(
ij-1).le.0.
222 zqu(
ij)=min(max(zqmin(
ij),zqu(
ij)),zqmax(
ij))
225 if(extremum(
ij))
then
241 if(extremum(
ij).and..not.extremum(
ij-1))
249 if (extremum(
ij).and..not.extremum(
ij+1))
268 #include "dimensions.h"
270 #include "iniprint.h"
308 zqv(
ij,
l)=zqv(
ij,
l)+(dyqv(
ij+iip1)-dyqv(
ij-iip1))/12.
312 extremum(
ij)=dyqv(
ij)*dyqv(
ij-iip1).le.0.
330 zqv(
ij,
l)=min(max(zqmin(
ij),zqv(
ij,
l)),zqmax(
ij))
334 if(extremum(
ij))
then
364 #include "dimensions.h"
366 #include "iniprint.h"
415 extremum(
ij,
l)=dzqw(
ij,
l)*dzqw(
ij,
l+1).le.0.
422 zqw(
ij,llm)=
q(
ij,llm)
423 extremum(
ij,1)=.true.
424 extremum(
ij,llm)=.true.
443 if(extremum(
ij,
l))
then
473 SUBROUTINE advnx(q,qg,qd,masse,u_m,mode)
486 #include "dimensions.h"
490 #include "comconst.h"
491 #include "iniprint.h"
507 real new_m,zu_m,zdq,zz
511 real zm,zq,zsigm,zsigp,zqm,zqp,zu
533 if(abs(zdq).gt.prec)
then
535 zsigg(
ij,
l)=1.-zsigd(
ij,
l)
556 if (u_m(
ij,
l).ge.0.)
then
572 ladvplus(
ij,
l)=zu.gt.zm
574 if(zsig.eq.0.) zsigp=0.1
576 if (zsig.le.zsigp)
then
578 else if (mode.eq.1)
then
580 s sign(zm,u_m(
ij,
l))*(zsigp*zqp+(zsig-zsigp)*zqm)
583 if (zsig.le.zsigp)
then
584 u_mq(
ij,
l)=u_m(
ij,
l)*(zqp-0.5*zsig/zsigp*(zqp-zq))
586 zz=0.5*(zsig-zsigp)/zsigm
587 u_mq(
ij,
l)=sign(zm,u_m(
ij,
l))*( 0.5*(zq+zqp)*zsigp
588 s +(zsig-zsigp)*(zq+zz*(zqm-zq)) )
613 if(ladvplus(
ij,
l))
then
623 &
'Nombre de points pour lesquels on advect plus que le'
624 & ,
'contenu de la maille : ',n0
631 if(ladvplus(
ij,
l).and.mod(
ij,iip1).ne.0)
then
649 do while(zu_m.gt.masse(ijq,
l))
650 u_mq(
ij,
l)=u_mq(
ij,
l)+
q(ijq,
l)*masse(ijq,
l)
651 zu_m=zu_m-masse(ijq,
l)
657 zsig=zu_m/masse(ijq,
l)
658 if(zsig.le.zsigd(ijq,
l))
then
659 u_mq(
ij,
l)=u_mq(
ij,
l)+zu_m*(qd(ijq,
l)
660 s -0.5*zsig/zsigd(ijq,
l)*(qd(ijq,
l)-
q(ijq,
l)))
664 zz=0.5*(zsig-zsigd(ijq,
l))/zsigg(ijq,
l)
665 if(.not.(zz.gt.0..and.zz.le.0.5))
then
666 WRITE(
lunout,*)
'probleme2 au point ij=',
ij,
671 u_mq(
ij,
l)=u_mq(
ij,
l)+masse(ijq,
l)*(
672 s 0.5*(
q(ijq,
l)+qd(ijq,
l))*zsigd(ijq,
l)
673 s +(zsig-zsigd(ijq,
l))*(
q(ijq,
l)+zz*(qg(ijq,
l)-
q(ijq,
l))) )
679 do while(-zu_m.gt.masse(ijq,
l))
680 u_mq(
ij,
l)=u_mq(
ij,
l)-
q(ijq,
l)*masse(ijq,
l)
681 zu_m=zu_m+masse(ijq,
l)
687 zsig=-zu_m/masse(
ij+1,
l)
688 if(zsig.le.zsigg(ijq,
l))
then
689 u_mq(
ij,
l)=u_mq(
ij,
l)+zu_m*(qg(ijq,
l)
690 s -0.5*zsig/zsigg(ijq,
l)*(qg(ijq,
l)-
q(ijq,
l)))
694 zz=0.5*(zsig-zsigg(ijq,
l))/zsigd(ijq,
l)
695 if(.not.(zz.gt.0..and.zz.le.0.5))
then
696 WRITE(
lunout,*)
'probleme22 au point ij=',
ij
701 u_mq(
ij,
l)=u_mq(
ij,
l)-masse(ijq,
l)*(
702 s 0.5*(
q(ijq,
l)+qg(ijq,
l))*zsigg(ijq,
l)
703 s +(zsig-zsigg(ijq,
l))*
704 s(
q(ijq,
l)+zz*(qd(ijq,
l)-
q(ijq,
l))) )
728 & u_mq(
ij-1,
l)-u_mq(
ij,
l))
754 #include "dimensions.h"
757 #include "iniprint.h"
763 real v_m(
ip1jm,llm )
774 real convpn,convps,convmpn,convmps,massen,masses
775 real zm,zq,zsigm,zsigp,zqm,zqp
794 if(abs(zdq).gt.prec)
then
796 zsigs(
ij)=1.-zsign(
ij)
812 if (v_m(
ij,
l).ge.0.)
then
827 zsig=abs(v_m(
ij,
l))/zm
828 if(zsig.eq.0.) zsigp=0.1
829 if (zsig.le.zsigp)
then
830 v_mq(
ij,
l)=v_m(
ij,
l)*(zqp-0.5*zsig/zsigp*(zqp-zq))
832 zz=0.5*(zsig-zsigp)/zsigm
833 v_mq(
ij,
l)=sign(zm,v_m(
ij,
l))*( 0.5*(zq+zqp)*zsigp
834 s +(zsig-zsigp)*(zq+zz*(zqm-zq)) )
842 & +v_m(
ij,
l)-v_m(
ij-iip1,
l)
852 q(1,
l)=(
q(1,
l)*massen+convpn)/new_m
885 #include "dimensions.h"
888 #include "iniprint.h"
906 real zm,zq,zsigm,zsigp,zqm,zqp
926 if(abs(zdq).gt.prec)
then
928 zsigh(
ij,
l)=1.-zsigb(
ij,
l)
929 zsigb(
ij,
l)=min(max(zsigb(
ij,
l),0.),1.)
941 if (w_m(
ij,
l).ge.0.)
then
956 zsig=abs(w_m(
ij,
l))/zm
957 if(zsig.eq.0.) zsigp=0.1
958 if (zsig.le.zsigp)
then
959 w_mq(
ij,
l)=w_m(
ij,
l)*(zqp-0.5*zsig/zsigp*(zqp-zq))
961 zz=0.5*(zsig-zsigp)/zsigm
962 w_mq(
ij,
l)=sign(zm,w_m(
ij,
l))*( 0.5*(zq+zqp)*zsigp
963 s +(zsig-zsigp)*(zq+zz*(zqm-zq)) )