4 SUBROUTINE vlspltqs_p ( q,pente_max,masse,w,pbaru,pbarv,pdt,
30 #include "dimensions.h"
56 REAL temps1,temps2,temps3
60 SAVE temps1,temps2,temps3
63 DATA qmin,qmax/0.,1.e33/
65 DATA temps1,temps2,temps3/0.,0.,0./
69 REAL rtt,retv,r2es,r3les,r3ies,r4les,r4ies,play
70 REAL ptarg,pdelarg,foeew,zdelta
78 foeew( ptarg,pdelarg ) = exp(
79 * (r3les*(1.-pdelarg)+r3ies*pdelarg) * (ptarg-rtt)
80 * / (ptarg-(r4les*(1.-pdelarg)+r4ies*pdelarg)) )
94 call settag(myrequest1,100)
95 call settag(myrequest2,101)
105 tempe(ij) = teta(ij,l) * pk(ij,l) /
cpp
108 zdelta = max( 0., sign(1., rtt - tempe(ij)) )
109 play = 0.5*(p(ij,l)+p(ij,l+1))
110 qsat(ij,l) = min(0.5, r2es* foeew(tempe(ij),zdelta) / play )
111 qsat(ij,l) = qsat(ij,l) / ( 1. - retv * qsat(ij,l) )
128 mu(ij,l)=pbaru(ij,l) * zzpbar
139 mv(ij,l)=pbarv(ij,l) * zzpbar
148 mw(ij,l)=w(ij,l) * zzw
161 zq(ijb:ije,1:
llm)=q(ijb:ije,1:
llm)
162 zm(ijb:ije,1:
llm)=masse(ijb:ije,1:
llm)
174 call vlxqs_p(zq,pente_max,zm,mu,qsat,
181 call vlyqs_p(zq,pente_max,zm,mv,qsat)
198 call vlyqs_p(zq,pente_max,zm,mv,qsat)
214 DO ij=ijb,ije-iip1+1,iip1
224 SUBROUTINE vlxqs_p(q,pente_max,masse,u_m,qsat,ijb_x,ije_x)
236 #include "dimensions.h"
240 #include "comconst.h"
253 INTEGER ij,l,j,i,iju,ijq,indu(
ip1jmp1),niju
265 INTEGER ijb,ije,ijb_x,ije_x
279 IF (pente_max.gt.-1.e-5)
THEN
290 dxqu(ij)=q(ij+1,l)-q(ij,l)
294 DO ij=ijb+iip1-1,ije,iip1
295 dxqu(ij)=dxqu(ij-
iim)
300 adxqu(ij)=abs(dxqu(ij))
306 dxqmax(ij,l)=pente_max*
307 , min(adxqu(ij-1),adxqu(ij))
314 DO ij=ijb+iip1-1,ije,iip1
315 dxqmax(ij-
iim,l)=dxqmax(ij,l)
321 , cvmgp(dxqu(ij-1)+dxqu(ij),0.,dxqu(ij-1)*dxqu(ij))
323 IF(dxqu(ij-1)*dxqu(ij).gt.0)
THEN
324 dxq(ij,l)=dxqu(ij-1)+dxqu(ij)
330 dxq(ij,l)=0.5*dxq(ij,l)
332 , sign(min(abs(dxq(ij,l)),dxqmax(ij,l)),dxq(ij,l))
345 dxqu(ij)=q(ij+1,l)-q(ij,l)
347 DO ij=ijb+iip1-1,ije,iip1
348 dxqu(ij)=dxqu(ij-
iim)
352 zz(ij)=dxqu(ij-1)*dxqu(ij)
355 dxq(ij,l)=zz(ij)/(dxqu(ij-1)+dxqu(ij))
370 DO ij=ijb+iip1-1,ije,iip1
371 dxq(ij-
iim,l)=dxq(ij,l)
404 zdum(ij,l)=cvmgp(1.-u_m(ij,l)/masse(ij,l),
405 , 1.+u_m(ij,l)/masse(ij+1,l),
407 zdum(ij,l)=0.5*zdum(ij,l)
409 , q(ij,l)+zdum(ij,l)*dxq(ij,l),
410 , q(ij+1,l)-zdum(ij,l)*dxq(ij+1,l),
412 u_mq(ij,l)=u_m(ij,l)*u_mq(ij,l)
424 IF (u_m(ij,l).gt.0.)
THEN
425 zdum(ij,l)=1.-u_m(ij,l)/masse(ij,l)
426 u_mq(ij,l)=u_m(ij,l)*
427 $ min(q(ij,l)+0.5*zdum(ij,l)*dxq(ij,l),qsat(ij+1,l))
429 zdum(ij,l)=1.+u_m(ij,l)/masse(ij+1,l)
430 u_mq(ij,l)=u_m(ij,l)*
431 $ min(q(ij+1,l)-0.5*zdum(ij,l)*dxq(ij+1,l),qsat(ij,l))
444 IF(zdum(ij,l).lt.0)
THEN
454 DO ij=ijb+iip1-1,ije,iip1
455 iadvplus(ij,l)=iadvplus(ij-
iim,l)
475 nl(l)=nl(l)+iadvplus(ij,l)
492 IF(iadvplus(ij,l).eq.1.and.mod(ij,iip1).ne.0)
THEN
510 do while(zu_m.gt.masse(ijq,l))
511 u_mq(ij,l)=u_mq(ij,l)+q(ijq,l)*masse(ijq,l)
512 zu_m=zu_m-masse(ijq,l)
517 u_mq(ij,l)=u_mq(ij,l)+zu_m*
518 & (q(ijq,l)+0.5*(1.-zu_m/masse(ijq,l))*dxq(ijq,l))
523 do while(-zu_m.gt.masse(ijq,l))
524 u_mq(ij,l)=u_mq(ij,l)-q(ijq,l)*masse(ijq,l)
525 zu_m=zu_m+masse(ijq,l)
530 u_mq(ij,l)=u_mq(ij,l)+zu_m*(q(ijq,l)-
531 & 0.5*(1.+zu_m/masse(ijq,l))*dxq(ijq,l))
544 DO ij=ijb+iip1-1,ije,iip1
545 u_mq(ij,l)=u_mq(ij-
iim,l)
554 new_m=masse(ij,l)+u_m(ij-1,l)-u_m(ij,l)
555 q(ij,l)=(q(ij,l)*masse(ij,l)+
556 & u_mq(ij-1,l)-u_mq(ij,l))
561 DO ij=ijb+iip1-1,ije,iip1
563 masse(ij-
iim,l)=masse(ij,l)
573 SUBROUTINE vlyqs_p(q,pente_max,masse,masse_adv_v,qsat)
588 #include "dimensions.h"
592 #include "comconst.h"
608 REAL airej2,airejjm,airescb(
iim),airesch(
iim)
613 REAL qpns,qpsn,dyn1,dys1,dyn2,dys2,newmasse,fn,fs
618 REAL convpn,convps,convmpn,convmps
619 REAL sinlon(iip1),sinlondlon(iip1)
620 REAL coslon(iip1),coslondlon(iip1)
621 SAVE sinlon,coslon,sinlondlon,coslondlon
633 print*,
'Shema Amont nouveau appele dans Vanleer '
636 coslon(i)=cos(
rlonv(i))
637 sinlon(i)=sin(
rlonv(i))
641 coslon(1)=coslon(iip1)
642 coslondlon(1)=coslondlon(iip1)
643 sinlon(1)=sinlon(iip1)
644 sinlondlon(1)=sinlondlon(iip1)
664 airescb(i) =
aire(i+ iip1) * q(i+ iip1,l)
666 qpns = ssum(
iim, airescb ,1 ) / airej2
673 qpsn = ssum(
iim, airesch ,1 ) / airejjm
685 dyqv(ij)=q(ij,l)-q(ij+iip1,l)
686 adyqv(ij)=abs(dyqv(ij))
698 dyq(ij,l)=.5*(dyqv(ij-iip1)+dyqv(ij))
699 dyqmax(ij)=min(adyqv(ij-iip1),adyqv(ij))
700 dyqmax(ij)=pente_max*dyqmax(ij)
707 dyq(ij,l)=qpns-q(ij+iip1,l)
714 dyn1=dyn1+sinlondlon(ij)*dyq(ij,l)
715 dyn2=dyn2+coslondlon(ij)*dyq(ij,l)
718 dyq(ij,l)=dyn1*sinlon(ij)+dyn2*coslon(ij)
724 IF(pente_max*adyqv(ij).lt.abs(dyq(ij,l)))
THEN
725 fn=min(pente_max*adyqv(ij)/abs(dyq(ij,l)),fn)
730 dyq(ij,l)=fn*dyq(ij,l)
745 dys1=dys1+sinlondlon(ij)*dyq(
ip1jm+ij,l)
746 dys2=dys2+coslondlon(ij)*dyq(
ip1jm+ij,l)
750 dyq(
ip1jm+ij,l)=dys1*sinlon(ij)+dys2*coslon(ij)
756 IF(pente_max*adyqv(ij+
ip1jm-iip1).lt.abs(dyq(ij+
ip1jm,l)))
THEN
757 fs=min(pente_max*adyqv(ij+
ip1jm-iip1)/abs(dyq(ij+
ip1jm,l)),fs)
842 IF(dyqv(ij)*dyqv(ij-iip1).gt.0.)
THEN
843 dyq(ij,l)=sign(min(abs(dyq(ij,l)),dyqmax(ij)),dyq(ij,l))
860 IF( masse_adv_v(ij,l).GT.0. )
THEN
861 qbyv(ij,l)= min( qsat(ij+iip1,l), q(ij+iip1,l ) +
862 , dyq(ij+iip1,l)*0.5*(1.-masse_adv_v(ij,l)/masse(ij+iip1,l)))
864 qbyv(ij,l)= min( qsat(ij,l), q(ij,l) - dyq(ij,l) *
865 , 0.5*(1.+masse_adv_v(ij,l)/masse(ij,l)) )
867 qbyv(ij,l) = masse_adv_v(ij,l)*qbyv(ij,l)
881 & +masse_adv_v(ij,l)-masse_adv_v(ij-iip1,l)
882 q(ij,l)=(q(ij,l)*masse(ij,l)+qbyv(ij,l)-qbyv(ij-iip1,l))
891 convmpn=ssum(
iim,masse_adv_v(1,l),1)/
apoln
893 newmasse=masse(ij,l)+convmpn*
aire(ij)
894 q(ij,l)=(q(ij,l)*masse(ij,l)+convpn*
aire(ij))/
906 newmasse=masse(ij,l)+convmps*
aire(ij)
907 q(ij,l)=(q(ij,l)*masse(ij,l)+convps*
aire(ij))/
!$Header llmm1 INTEGER ip1jmp1
!$Header!CDK comgeom COMMON comgeom apols
subroutine register_hallo(Field, ij, ll, RUp, Rdown, SUp, SDown, a_request)
subroutine vlspltqs_p(q, pente_max, masse, w, pbaru, pbarv, pdt, p, pk, teta)
!$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
!$Header llmm1 INTEGER ip1jm
subroutine vlxqs_p(q, pente_max, masse, u_m, qsat, ijb_x, ije_x)
!$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
!$Id mode_top_bound COMMON comconstr cpp
integer, parameter vthallo
subroutine vlyqs_p(q, pente_max, masse, masse_adv_v, qsat)
!$Header!CDK comgeom COMMON comgeom rlonu
subroutine sendrequest(a_Request)
!$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 waitrecvrequest(a_Request)
subroutine vlz_p(q, pente_max, masse, w, ijb_x, ije_x)
subroutine waitsendrequest(a_Request)
c c zjulian c cym CALL iim cym klev iim
subroutine settag(a_request, tag)
!$Header!CDK comgeom COMMON comgeom rlonv