1 SUBROUTINE vlxqs_loc(q,pente_max,masse,u_m,qsat,ijb_x,ije_x,iq)
14 #include "dimensions.h"
32 INTEGER ij,l,j,i,iju,ijq,indu(
ijnb_u),niju
47 INTEGER ijb,ije,ijb_x,ije_x
63 IF (pente_max.gt.-1.e-5)
THEN
74 dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq)
78 DO ij=ijb+iip1-1,ije,iip1
84 adxqu(ij)=abs(dxqu(ij))
90 dxqmax(ij,l)=pente_max*
91 , min(adxqu(ij-1),adxqu(ij))
98 DO ij=ijb+iip1-1,ije,iip1
99 dxqmax(ij-
iim,l)=dxqmax(ij,l)
105 , cvmgp(dxqu(ij-1)+dxqu(ij),0.,dxqu(ij-1)*dxqu(ij))
107 IF(dxqu(ij-1)*dxqu(ij).gt.0)
THEN
108 dxq(ij,l)=dxqu(ij-1)+dxqu(ij)
114 dxq(ij,l)=0.5*dxq(ij,l)
116 , sign(min(abs(dxq(ij,l)),dxqmax(ij,l)),dxq(ij,l))
129 dxqu(ij)=q(ij+1,l,iq)-q(ij,l,iq)
131 DO ij=ijb+iip1-1,ije,iip1
132 dxqu(ij)=dxqu(ij-
iim)
136 zz(ij)=dxqu(ij-1)*dxqu(ij)
139 dxq(ij,l)=zz(ij)/(dxqu(ij-1)+dxqu(ij))
154 DO ij=ijb+iip1-1,ije,iip1
155 dxq(ij-
iim,l)=dxq(ij,l)
188 zdum(ij,l)=cvmgp(1.-u_m(ij,l)/masse(ij,l,iq),
189 , 1.+u_m(ij,l)/masse(ij+1,l,iq),
191 zdum(ij,l)=0.5*zdum(ij,l)
193 , q(ij,l,iq)+zdum(ij,l)*dxq(ij,l),
194 , q(ij+1,l,iq)-zdum(ij,l)*dxq(ij+1,l),
196 u_mq(ij,l)=u_m(ij,l)*u_mq(ij,l)
208 IF (u_m(ij,l).gt.0.)
THEN
209 zdum(ij,l)=1.-u_m(ij,l)/masse(ij,l,iq)
210 u_mq(ij,l)=u_m(ij,l)*
211 $ min(q(ij,l,iq)+0.5*zdum(ij,l)*dxq(ij,l),qsat(ij+1,l))
213 zdum(ij,l)=1.+u_m(ij,l)/masse(ij+1,l,iq)
214 u_mq(ij,l)=u_m(ij,l)*
215 $ min(q(ij+1,l,iq)-0.5*zdum(ij,l)*dxq(ij+1,l),qsat(ij,l))
228 IF(zdum(ij,l).lt.0)
THEN
238 DO ij=ijb+iip1-1,ije,iip1
239 iadvplus(ij,l)=iadvplus(ij-
iim,l)
259 nl(l)=nl(l)+iadvplus(ij,l)
276 IF(iadvplus(ij,l).eq.1.and.mod(ij,iip1).ne.0)
THEN
294 do while(zu_m.gt.masse(ijq,l,iq))
295 u_mq(ij,l)=u_mq(ij,l)+q(ijq,l,iq)
297 zu_m=zu_m-masse(ijq,l,iq)
302 u_mq(ij,l)=u_mq(ij,l)+zu_m*(q(ijq,l,iq)
303 & +0.5*(1.-zu_m/masse(ijq,l,iq))*dxq(ijq,l))
308 do while(-zu_m.gt.masse(ijq,l,iq))
309 u_mq(ij,l)=u_mq(ij,l)-q(ijq,l,iq)
311 zu_m=zu_m+masse(ijq,l,iq)
316 u_mq(ij,l)=u_mq(ij,l)+zu_m*(q(ijq,l,iq)-
317 & 0.5*(1.+zu_m/masse(ijq,l,iq))*dxq(ijq,l))
330 DO ij=ijb+iip1-1,ije,iip1
331 u_mq(ij,l)=u_mq(ij-
iim,l)
347 masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
348 ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
356 call vlx_loc(ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2)
367 new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l)
368 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+
369 & u_mq(ij-1,l)-u_mq(ij,l))
374 DO ij=ijb+iip1-1,ije,iip1
375 q(ij-
iim,l,iq)=q(ij,l,iq)
376 masse(ij-
iim,l,iq)=masse(ij,l,iq)
390 q(ij,l,iq2)=q(ij,l,iq)*ratio(ij,l,iq2)
392 DO ij=ijb+iip1-1,ije,iip1
393 q(ij-
iim,l,iq2)=q(ij,l,iq2)
408 SUBROUTINE vlyqs_loc(q,pente_max,masse,masse_adv_v,qsat,iq)
424 #include "dimensions.h"
428 #include "comconst.h"
445 REAL airej2,airejjm,airescb(
iim),airesch(
iim)
450 REAL qpns,qpsn,dyn1,dys1,dyn2,dys2,newmasse,fn,fs
455 REAL convpn,convps,convmpn,convmps
456 REAL sinlon(iip1),sinlondlon(iip1)
457 REAL coslon(iip1),coslondlon(iip1)
458 SAVE sinlon,coslon,sinlondlon,coslondlon
478 if ((ij.ge.ijb).and.(ij.le.ije))
then
484 print*,
'Shema Amont nouveau appele dans Vanleer '
485 print*,
'vlyqs_loc, iq=',iq
488 coslon(i)=cos(
rlonv(i))
489 sinlon(i)=sin(
rlonv(i))
493 coslon(1)=coslon(iip1)
494 coslondlon(1)=coslondlon(iip1)
495 sinlon(1)=sinlon(iip1)
496 sinlondlon(1)=sinlondlon(iip1)
516 airescb(i) =
aire(i+ iip1) * q(i+ iip1,l,iq)
518 qpns = ssum(
iim, airescb ,1 ) / airej2
525 qpsn = ssum(
iim, airesch ,1 ) / airejjm
537 dyqv(ij)=q(ij,l,iq)-q(ij+iip1,l,iq)
538 adyqv(ij)=abs(dyqv(ij))
550 dyq(ij,l)=.5*(dyqv(ij-iip1)+dyqv(ij))
551 dyqmax(ij)=min(adyqv(ij-iip1),adyqv(ij))
552 dyqmax(ij)=pente_max*dyqmax(ij)
559 dyq(ij,l)=qpns-q(ij+iip1,l,iq)
566 dyn1=dyn1+sinlondlon(ij)*dyq(ij,l)
567 dyn2=dyn2+coslondlon(ij)*dyq(ij,l)
570 dyq(ij,l)=dyn1*sinlon(ij)+dyn2*coslon(ij)
576 IF(pente_max*adyqv(ij).lt.abs(dyq(ij,l)))
THEN
577 fn=min(pente_max*adyqv(ij)/abs(dyq(ij,l)),fn)
582 dyq(ij,l)=fn*dyq(ij,l)
597 dys1=dys1+sinlondlon(ij)*dyq(
ip1jm+ij,l)
598 dys2=dys2+coslondlon(ij)*dyq(
ip1jm+ij,l)
602 dyq(
ip1jm+ij,l)=dys1*sinlon(ij)+dys2*coslon(ij)
608 IF(pente_max*adyqv(ij+
ip1jm-iip1).lt.abs(dyq(ij+
ip1jm,l)))
THEN
609 fs=min(pente_max*adyqv(ij+
ip1jm-iip1)/abs(dyq(ij+
ip1jm,l)),fs)
694 IF(dyqv(ij)*dyqv(ij-iip1).gt.0.)
THEN
695 dyq(ij,l)=sign(min(abs(dyq(ij,l)),dyqmax(ij)),dyq(ij,l))
712 IF( masse_adv_v(ij,l).GT.0. )
THEN
713 qbyv(ij,l,iq)= min( qsat(ij+iip1,l), q(ij+iip1,l,iq ) +
714 , dyq(ij+iip1,l)*0.5*(1.-masse_adv_v(ij,l)
715 , /masse(ij+iip1,l,iq)))
717 qbyv(ij,l,iq)= min( qsat(ij,l), q(ij,l,iq) - dyq(ij,l) *
718 , 0.5*(1.+masse_adv_v(ij,l)/masse(ij,l,iq)) )
720 qbyv(ij,l,iq) = masse_adv_v(ij,l)*qbyv(ij,l,iq)
740 masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
741 ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
748 call vly_loc(ratio,pente_max,masse,qbyv,iq2)
763 newmasse=masse(ij,l,iq)
764 & +masse_adv_v(ij,l)-masse_adv_v(ij-iip1,l)
765 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+qbyv(ij,l,iq)
766 & -qbyv(ij-iip1,l,iq))/newmasse
767 masse(ij,l,iq)=newmasse
773 convpn=ssum(
iim,qbyv(1,l,iq),1)/
apoln
774 convmpn=ssum(
iim,masse_adv_v(1,l),1)/
apoln
776 newmasse=masse(ij,l,iq)+convmpn*
aire(ij)
777 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+convpn*
aire(ij))/
779 masse(ij,l,iq)=newmasse
789 newmasse=masse(ij,l,iq)+convmps*
aire(ij)
790 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+convps*
aire(ij))/
792 masse(ij,l,iq)=newmasse
835 q(ij,l,iq2)=q(ij,l,iq)*ratio(ij,l,iq2)
!$Header llmm1 INTEGER ip1jmp1
subroutine vlxqs_loc(q, pente_max, masse, u_m, qsat, ijb_x, ije_x, iq)
integer, dimension(:), allocatable, save nqdesc
!$Header!CDK comgeom COMMON comgeom apols
recursive subroutine vlx_loc(q, pente_max, masse, u_m, ijb_x, ije_x, iq)
subroutine vlyqs_loc(q, pente_max, masse, masse_adv_v, qsat, iq)
!$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
!$Id mode_top_bound COMMON comconstr && pi
!$Header!CDK comgeom COMMON comgeom aire
integer, dimension(:,:), allocatable, save iqfils
!$Header llmm1 INTEGER ip1jm
!$Header!CDK comgeom COMMON comgeom apoln
!$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 false
!$Header!CDK comgeom COMMON comgeom rlonu
recursive subroutine vly_loc(q, pente_max, masse, masse_adv_v, iq)
!$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
integer, dimension(:), allocatable, save nqfils
c c zjulian c cym CALL iim cym klev iim
!$Header!CDK comgeom COMMON comgeom rlonv