5 s ps,masse,pk,flux_u,flux_v,teta,phi,ucov,vcov,trac)
21 #include "dimensions.h"
49 real flux_v(iip1,jjm,
llm)
53 real vcov(iip1,jjm,
llm)
59 integer,
save :: icum,ncum
61 logical,
SAVE :: first=.
true.
65 real,
save :: zfactv(jjm,
llm)
67 integer,
parameter :: nQ=7
72 character(len=6),
save :: nom(nq)
73 character(len=6),
save :: unites(nq)
75 character(len=10) file
79 integer,
PARAMETER :: itemp=1,igeop=2,iecin=3,iang=4,iu=5
80 INTEGER,
PARAMETER :: iovap=6,iun=7
81 integer,
PARAMETER :: i_sortie=1
84 integer,
SAVE :: itau=0.
90 REAL,
save :: vcont(iip1,jjm,
llm),ucont(iip1,
jjp1,
llm)
92 REAL,
save :: massebx(iip1,
jjp1,
llm),masseby(iip1,jjm,
llm)
93 REAL,
save :: vorpot(iip1,jjm,
llm)
95 REAL,
save ::convm(iip1,
jjp1,
llm)
96 REAL,
save :: bern(iip1,
jjp1,
llm)
99 real,
save :: Q(iip1,
jjp1,
llm,nq)
102 real,
save :: ps_cum(iip1,
jjp1)
103 real,
save :: masse_cum(iip1,
jjp1,
llm)
104 real,
save :: flux_u_cum(iip1,
jjp1,
llm)
105 real,
save :: flux_v_cum(iip1,jjm,
llm)
106 real,
save :: Q_cum(iip1,
jjp1,
llm,nq)
107 real,
save :: flux_uQ_cum(iip1,
jjp1,
llm,nq)
108 real,
save :: flux_vQ_cum(iip1,jjm,
llm,nq)
109 real,
save :: flux_wQ_cum(iip1,
jjp1,
llm,nq)
110 real,
save :: dQ(iip1,
jjp1,
llm,nq)
120 character*10,
save :: znom(ntr,nq)
121 character*20,
save :: znoml(ntr,nq)
122 character*10,
save :: zunites(ntr,nq)
124 INTEGER,
PARAMETER :: iave=1,itot=2,immc=3,itrs=4,istn=5
126 character*3 ctrs(ntr)
127 data ctrs/
' ',
'TOT',
'MMC',
'TRS',
'STN'/
129 real,
save :: zvQ(jjm,
llm,ntr,nq),zvQtmp(jjm,
llm)
130 real,
save :: zavQ(jjm,ntr,nq),psiQ(jjm,
llm+1,nq)
131 real,
save :: zmasse(jjm,
llm),zamasse(jjm)
133 real,
save :: zv(jjm,
llm),psi(jjm,
llm+1)
144 integer thoriid, zvertiid
147 integer,
save :: ndex3d(jjm*
llm)
158 real,
save :: rlong(jjm),rlatg(jjm)
159 integer :: jjb,jje,jjn,ijb,ije
165 INTEGER,
DIMENSION(1) :: ddid
166 INTEGER,
DIMENSION(1) :: dsg
167 INTEGER,
DIMENSION(1) :: dsl
168 INTEGER,
DIMENSION(1) :: dpf
169 INTEGER,
DIMENSION(1) :: dpl
170 INTEGER,
DIMENSION(1) :: dhs
171 INTEGER,
DIMENSION(1) :: dhe
173 INTEGER :: bilan_dyn_domain_id
193 if (abs(ncum*dt_app-dt_cum).gt.1.e-5*dt_app)
then
195 .
'Pb : le pas de cumule doit etre multiple du pas'
196 WRITE(
lunout,*)
'dt_app=',dt_app
197 WRITE(
lunout,*)
'dt_cum=',dt_cum
200 write(
lunout,*)
"bilan_dyn_p: ncum=",ncum
223 unites(igeop)=
'm2/s2'
224 unites(iecin)=
'm2/s2'
227 unites(iovap)=
'kg/kg'
238 CALL ymds2ju(zan, 1, dayref, 0.0, zjulian)
261 .
'box',bilan_dyn_domain_id)
264 . 1, rlong(jjb:jje), jjn, rlatg(jjb:jje),
266 . tau0, zjulian, dt_cum, thoriid, fileid,
267 . bilan_dyn_domain_id)
272 call histvert(fileid,
'presnivs',
'Niveaux sigma',
'mb',
280 znoml(itr,iq)=nom(iq)
281 zunites(itr,iq)=unites(iq)
283 znom(itr,iq)=ctrs(itr)//
'v'//nom(iq)
284 znoml(itr,iq)=
'transport : v * '//nom(iq)//
' '//ctrs(itr)
285 zunites(itr,iq)=
'm/s * '//unites(iq)
295 .
WRITE(
lunout,*)
'var ',itr,iq
296 . ,znom(itr,iq),znoml(itr,iq),zunites(itr,iq)
297 call histdef(fileid,znom(itr,iq),znoml(itr,iq),
298 . zunites(itr,iq),1,jjn,thoriid,
llm,1,
llm,zvertiid,
299 . 32,
'ave(X)',dt_cum,dt_cum)
303 call histdef(fileid,
'psi'//nom(iq)
304 . ,
'stream fn. '//znoml(itot,iq),
305 . zunites(itot,iq),1,jjn,thoriid,
llm,1,
llm,zvertiid,
306 . 32,
'ave(X)',dt_cum,dt_cum)
312 call histdef(fileid,
'masse',
'masse',
313 .
'kg', 1, jjn, thoriid,
llm, 1,
llm, zvertiid,
314 . 32,
'ave(X)', dt_cum, dt_cum)
315 call histdef(fileid,
'v',
'v',
316 .
'm/s', 1, jjn, thoriid,
llm, 1,
llm, zvertiid,
317 . 32,
'ave(X)', dt_cum, dt_cum)
320 call histdef(fileid,
'psi',
'stream fn. MMC ',
'mega t/s',
321 . 1,jjn,thoriid,
llm,1,
llm,zvertiid,
322 . 32,
'ave(X)',dt_cum,dt_cum)
329 call histdef(fileid,
'a'//znom(itr,iq),znoml(itr,iq),
330 . zunites(itr,iq),1,jjn,thoriid,1,1,1,-99,
331 . 32,
'ave(X)',dt_cum,dt_cum)
362 CALL enercin_p(vcov,ucov,vcont,ucont,ecin)
367 ang(:,jjb:jje,l)=ucov(:,jjb:jje,l)+
constang(:,jjb:jje)
368 unat(:,jjb:jje,l)=ucont(:,jjb:jje,l)*
cu(:,jjb:jje)
374 q(:,jjb:jje,l,itemp)=teta(:,jjb:jje,l)*pk(:,jjb:jje,l)/
cpp
375 q(:,jjb:jje,l,igeop)=phi(:,jjb:jje,l)
376 q(:,jjb:jje,l,iecin)=ecin(:,jjb:jje,l)
377 q(:,jjb:jje,l,iang)=ang(:,jjb:jje,l)
378 q(:,jjb:jje,l,iu)=unat(:,jjb:jje,l)
379 q(:,jjb:jje,l,iovap)=trac(:,jjb:jje,l,1)
380 q(:,jjb:jje,l,iun)=1.
399 masse_cum(:,jjb:jje,l)=0.
400 flux_u_cum(:,jjb:jje,l)=0.
401 q_cum(:,jjb:jje,l,:)=0.
402 flux_uq_cum(:,jjb:jje,l,:)=0.
404 flux_v_cum(:,jjb:jje,l)=0.
405 flux_vq_cum(:,jjb:jje,l,:)=0.
411 .
WRITE(
lunout,*)
'dans bilan_dyn ',icum,
'->',icum+1
419 ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)+ps(:,jjb:jje)
425 masse_cum(:,jjb:jje,l)=masse_cum(:,jjb:jje,l)+masse(:,jjb:jje,l)
426 flux_u_cum(:,jjb:jje,l)=flux_u_cum(:,jjb:jje,l)
427 . +flux_u(:,jjb:jje,l)
435 flux_v_cum(:,jjb:jje,l)=flux_v_cum(:,jjb:jje,l)
436 . +flux_v(:,jjb:jje,l)
446 q_cum(:,jjb:jje,l,iq)=q_cum(:,jjb:jje,l,iq)
447 . +q(:,jjb:jje,l,iq)*masse(:,jjb:jje,l)
463 flux_uq_cum(i,j,l,iq)=flux_uq_cum(i,j,l,iq)
464 s +flux_u(i,j,l)*0.5*(q(i,j,l,iq)+q(i+1,j,l,iq))
466 flux_uq_cum(iip1,j,l,iq)=flux_uq_cum(1,j,l,iq)
475 call register_hallo(q(1,1,1,iq),
ip1jmp1,
llm,0,1,1,0,req)
491 flux_vq_cum(i,j,l,iq)=flux_vq_cum(i,j,l,iq)
492 s +flux_v(i,j,l)*0.5*(q(i,j,l,iq)+q(i,j+1,l,iq))
521 call convmas_p(flux_u_cum,flux_v_cum,convm)
534 ww=-0.5*w(i,j,l+1)*(q(i,j,l,iq)+q(i,j,l+1,iq))
535 dq(i,j,l ,iq)=dq(i,j,l ,iq)-ww
536 dq(i,j,l+1,iq)=dq(i,j,l+1,iq)+ww
543 ww=-0.5*w(i,j,l)*(q(i,j,l-1,iq)+q(i,j,l,iq))
544 dq(i,j,l,iq)=dq(i,j,l,iq)+ww
552 .
WRITE(
lunout,*)
'Apres les calculs fait a chaque pas'
556 if (icum.eq.ncum)
then
560 .
WRITE(
lunout,*)
'Pas d ecriture'
569 q_cum(:,jjb:jje,l,iq)=q_cum(:,jjb:jje,l,iq)
570 . /masse_cum(:,jjb:jje,l)
578 ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)*zz
583 masse_cum(:,jjb:jje,l)=masse_cum(:,jjb:jje,l)*zz
584 flux_u_cum(:,jjb:jje,l)=flux_u_cum(:,jjb:jje,l)*zz
585 flux_uq_cum(:,jjb:jje,l,:)=flux_uq_cum(:,jjb:jje,l,:)*zz
586 dq(:,jjb:jje,l,:)=dq(:,jjb:jje,l,:)*zz
594 flux_v_cum(:,jjb:jje,l)=flux_v_cum(:,jjb:jje,l)*zz
595 flux_vq_cum(:,jjb:jje,l,:)=flux_vq_cum(:,jjb:jje,l,:)*zz
608 dq(:,jjb:jje,l,iq)=dq(:,jjb:jje,l,iq)/masse_cum(:,jjb:jje,l)
632 call register_hallo(q_cum(1,1,1,iq),
ip1jmp1,
llm,0,1,1,0,req)
640 call massbar_p(masse_cum,massebx,masseby)
650 zmasse(j,l)=zmasse(j,l)+masseby(i,j,l)
651 zv(j,l)=zv(j,l)+flux_v_cum(i,j,l)
653 zfactv(j,l)=
cv(1,j)/zmasse(j,l)
702 zvq(j,l,itot,iq)=zvq(j,l,itot,iq)
703 s +flux_vq_cum(i,j,l,iq)
704 zqy= 0.5*(q_cum(i,j,l,iq)*masse_cum(i,j,l)+
705 s q_cum(i,j+1,l,iq)*masse_cum(i,j+1,l))
706 zvqtmp(j,l)=zvqtmp(j,l)+flux_v_cum(i,j,l)*zqy
707 s /(0.5*(masse_cum(i,j,l)+masse_cum(i,j+1,l)))
708 zvq(j,l,iave,iq)=zvq(j,l,iave,iq)+zqy
712 zvq(j,l,iave,iq)=zvq(j,l,iave,iq)/zmasse(j,l)
713 zvq(j,l,itot,iq)=zvq(j,l,itot,iq)*zfactv(j,l)
714 zvqtmp(j,l)=zvqtmp(j,l)*zfactv(j,l)
715 zvq(j,l,immc,iq)=zv(j,l)*zvq(j,l,iave,iq)*zfactv(j,l)
716 zvq(j,l,itrs,iq)=zvq(j,l,itot,iq)-zvqtmp(j,l)
717 zvq(j,l,istn,iq)=zvqtmp(j,l)-zvq(j,l,immc,iq)
726 psiq(j,l,iq)=psiq(j,l+1,iq)+zvq(j,l,itot,iq)
739 psi(j,l)=psi(j,l+1)+zv(j,l)
740 zv(j,l)=zv(j,l)*zfactv(j,l)
749 if (i_sortie.eq.1)
then
758 call histwrite(fileid,znom(itr,iq),itau,
759 s zvq(jjb:jje,:,itr,iq)
762 call histwrite(fileid,
'psi'//nom(iq),
763 s itau,psiq(jjb:jje,1:
llm,iq)
766 call histwrite(fileid,
'masse',itau,zmasse(jjb:jje,1:
llm)
768 call histwrite(fileid,
'v',itau,zv(jjb:jje,1:
llm)
770 psi(jjb:jje,:)=psi(jjb:jje,:)*1.e-9
771 call histwrite(fileid,
'psi',itau,psi(jjb:jje,1:
llm),
783 zamasse(jjb:jje)=zamasse(jjb:jje)+zmasse(jjb:jje,l)
790 zavq(jjb:jje,itr,iq)=zavq(jjb:jje,itr,iq)
791 s +zvq(jjb:jje,l,itr,iq)
794 zavq(jjb:jje,itr,iq)=zavq(jjb:jje,itr,iq)/zamasse(jjb:jje)
795 call histwrite(fileid,
'a'//znom(itr,iq),itau,
796 s zavq(jjb:jje,itr,iq),jjn*
llm,ndex3d)
!$Header llmm1 INTEGER ip1jmp1
!$Id zjulian!correction pour l heure initiale!jyg!jyg CALL ymds2ju(annee_ref, 1, day_ref, hour, zjulian)!jyg CALL histbeg_phy("histrac"
subroutine register_hallo(Field, ij, ll, RUp, Rdown, SUp, SDown, a_request)
!$Header!CDK comgeom COMMON comgeom constang
subroutine convflu_p(xflu, yflu, nbniv, convfl)
!$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 llmm1 INTEGER ip1jm
!$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
subroutine enercin_p(vcov, ucov, vcont, ucont, ecin)
!$Id zjulian!correction pour l heure initiale!jyg!jyg CALL nid_tra CALL histvert(nid_tra,"presnivs","Vertical levels","Pa", klev, presnivs, nvert,"down") zsto
subroutine massbar_p(masse, massebx, masseby)
!$Id mode_top_bound COMMON comconstr cpp
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$Header!CDK comgeom COMMON comgeom rlatv
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
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real coeffs real dtmax real cu real betad real damp real delta COMMON cvparam nlm tlcrit sigd coeffs cu
subroutine bilan_dyn_p(ntrac, dt_app, dt_cum, ps, masse, pk, flux_u, flux_v, teta, phi, ucov, vcov, trac)
subroutine covcont_p(klevel, ucov, vcov, ucont, vcont)
subroutine vitvert_p(convm, w)
c c zjulian c cym CALL iim cym klev iim
!$Header!CDK comgeom COMMON comgeom cv
c c zjulian c cym CALL iim cym klev iim cym jjmp1 cym On stoke le fichier bilKP instantanne s jmax_ins print On stoke le fichier bilKP instantanne s s cym cym nid_bilKPins ENDIF c cIM BEG c cIM cf AM BEG region cym CALL histbeg("histbilKP_ins", iim, zx_lon(:, 1), cym.jjmp1, zx_lat(1,:), cym.imin_ins, imax_ins-imin_ins+1, cym.jmin_ins, jmax_ins-jmin_ins+1, cym.itau_phy, zjulian, dtime, cym.nhori, nid_bilKPins) CALL histbeg_phy("histbilKP_ins"
subroutine convmas_p(pbaru, pbarv, convm)
subroutine waitrequest(a_Request)
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout