5 s ps,masse,pk,flux_u,flux_v,
teta,phi,ucov,vcov,trac)
21 #include "dimensions.h"
47 real masse(iip1,
jjp1,llm),pk(iip1,
jjp1,llm)
48 real flux_u(iip1,
jjp1,llm)
49 real flux_v(iip1,jjm,llm)
51 real phi(iip1,
jjp1,llm)
52 real ucov(iip1,
jjp1,llm)
53 real vcov(iip1,jjm,llm)
54 real trac(iip1,
jjp1,llm,ntrac)
61 real zz,zqy,zfactv(jjm,llm)
69 character*6,
save :: nom(nq)
70 character*6,
save :: unites(nq)
76 integer itemp,igeop,iecin,iang,iu,iovap,iun
80 save itemp,igeop,iecin,iang,iu,iovap,iun
89 data itemp,igeop,iecin,iang,iu,iovap,iun/1,2,3,4,5,6,7/
95 REAL vcont(iip1,jjm,llm),ucont(iip1,
jjp1,llm)
97 REAL massebx(iip1,
jjp1,llm),masseby(iip1,jjm,llm)
98 REAL vorpot(iip1,jjm,llm)
99 REAL w(iip1,
jjp1,llm),ecin(iip1,
jjp1,llm),convm(iip1,
jjp1,llm)
100 REAL bern(iip1,
jjp1,llm)
103 real q(iip1,
jjp1,llm,nq)
106 real ps_cum(iip1,
jjp1)
107 real masse_cum(iip1,
jjp1,llm)
108 real flux_u_cum(iip1,
jjp1,llm)
109 real flux_v_cum(iip1,jjm,llm)
110 real q_cum(iip1,
jjp1,llm,nq)
111 real flux_uq_cum(iip1,
jjp1,llm,nq)
112 real flux_vq_cum(iip1,jjm,llm,nq)
113 real flux_wq_cum(iip1,
jjp1,llm,nq)
114 real dq(iip1,
jjp1,llm,nq)
116 save ps_cum,masse_cum,flux_u_cum,flux_v_cum
117 save q_cum,flux_uq_cum,flux_vq_cum
126 character*10,
save :: znom(ntr,nq)
127 character*20,
save :: znoml(ntr,nq)
128 character*10,
save :: zunites(ntr,nq)
130 integer iave,itot,immc,itrs,istn
131 data iave,itot,immc,itrs,istn/1,2,3,4,5/
132 character*3 ctrs(ntr)
133 data ctrs/
' ',
'TOT',
'MMC',
'TRS',
'STN'/
135 real zvq(jjm,llm,ntr,nq),zvqtmp(jjm,llm)
136 real zavq(jjm,ntr,nq),psiq(jjm,llm+1,nq)
137 real zmasse(jjm,llm),zamasse(jjm)
139 real zv(jjm,llm),psi(jjm,llm+1)
150 integer thoriid, zvertiid
153 integer ndex3d(jjm*llm)
164 real rlong(jjm),rlatg(jjm)
165 integer :: jjb,jje,jjn,ijb,ije
170 INTEGER,
DIMENSION(1) :: ddid
171 INTEGER,
DIMENSION(1) :: dsg
172 INTEGER,
DIMENSION(1) :: dsl
173 INTEGER,
DIMENSION(1) :: dpf
174 INTEGER,
DIMENSION(1) :: dpl
175 INTEGER,
DIMENSION(1) :: dhs
176 INTEGER,
DIMENSION(1) :: dhe
178 INTEGER :: bilan_dyn_domain_id
198 if (abs(ncum*dt_app-dt_cum).gt.1.e-5*dt_app)
then
200 .
'Pb : le pas de cumule doit etre multiple du pas'
201 WRITE(
lunout,*)
'dt_app=',dt_app
202 WRITE(
lunout,*)
'dt_cum=',dt_cum
206 if (i_sortie.eq.1)
then
208 if (mpi_rank==0)
then
210 s ,0.,180./
pi,0.,0.,jjm,
rlatv,-90.,90.,180./
pi
212 s ,dt_cum,file,
'dyn_zon ')
225 unites(igeop)=
'm2/s2'
226 unites(iecin)=
'm2/s2'
229 unites(iovap)=
'kg/kg'
262 call flio_dom_set(mpi_size,mpi_rank,ddid,dsg,dsl,dpf,dpl,dhs,dhe,
263 .
'box',bilan_dyn_domain_id)
266 . 1, rlong(jjb:jje), jjn, rlatg(jjb:jje),
268 . tau0,
zjulian, dt_cum, thoriid, fileid,
269 . bilan_dyn_domain_id)
274 call
histvert(fileid,
'presnivs',
'Niveaux sigma',
'mb',
282 znoml(itr,iq)=nom(iq)
283 zunites(itr,iq)=unites(iq)
285 znom(itr,iq)=ctrs(itr)//
'v'//nom(iq)
286 znoml(itr,iq)=
'transport : v * '//nom(iq)//
' '//ctrs(itr)
287 zunites(itr,iq)=
'm/s * '//unites(iq)
297 .
WRITE(
lunout,*)
'var ',itr,iq
298 . ,znom(itr,iq),znoml(itr,iq),zunites(itr,iq)
299 call
histdef(fileid,znom(itr,iq),znoml(itr,iq),
300 . zunites(itr,iq),1,jjn,thoriid,llm,1,llm,zvertiid,
301 . 32,
'ave(X)',dt_cum,dt_cum)
305 call
histdef(fileid,
'psi'//nom(iq)
306 . ,
'stream fn. '//znoml(itot,iq),
307 . zunites(itot,iq),1,jjn,thoriid,llm,1,llm,zvertiid,
308 . 32,
'ave(X)',dt_cum,dt_cum)
314 call
histdef(fileid,
'masse',
'masse',
315 .
'kg', 1, jjn, thoriid, llm, 1, llm, zvertiid,
316 . 32,
'ave(X)', dt_cum, dt_cum)
318 .
'm/s', 1, jjn, thoriid, llm, 1, llm, zvertiid,
319 . 32,
'ave(X)', dt_cum, dt_cum)
322 call
histdef(fileid,
'psi',
'stream fn. MMC ',
'mega t/s',
323 . 1,jjn,thoriid,llm,1,llm,zvertiid,
324 . 32,
'ave(X)',dt_cum,dt_cum)
331 call
histdef(fileid,
'a'//znom(itr,iq),znoml(itr,iq),
332 . zunites(itr,iq),1,jjn,thoriid,1,1,1,-99,
333 . 32,
'ave(X)',dt_cum,dt_cum)
360 CALL
covcont_p(llm,ucov,vcov,ucont,vcont)
361 CALL
enercin_p(vcov,ucov,vcont,ucont,ecin)
366 unat(:,jjb:jje,
l)=ucont(:,jjb:jje,
l)*
cu(:,jjb:jje)
369 q(:,jjb:jje,:,itemp)=
teta(:,jjb:jje,:)*pk(:,jjb:jje,:)/
cpp
370 q(:,jjb:jje,:,igeop)=phi(:,jjb:jje,:)
371 q(:,jjb:jje,:,iecin)=ecin(:,jjb:jje,:)
372 q(:,jjb:jje,:,iang)=
ang(:,jjb:jje,:)
373 q(:,jjb:jje,:,iu)=unat(:,jjb:jje,:)
374 q(:,jjb:jje,:,iovap)=trac(:,jjb:jje,:,1)
375 q(:,jjb:jje,:,iun)=1.
387 masse_cum(:,jjb:jje,:)=0.
388 flux_u_cum(:,jjb:jje,:)=0.
389 q_cum(:,jjb:jje,:,:)=0.
390 flux_uq_cum(:,jjb:jje,:,:)=0.
391 if (pole_sud) jje=jj_end-1
392 flux_v_cum(:,jjb:jje,:)=0.
393 flux_vq_cum(:,jjb:jje,:,:)=0.
397 .
WRITE(
lunout,*)
'dans bilan_dyn ',icum,
'->',icum+1
404 ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)+ps(:,jjb:jje)
405 masse_cum(:,jjb:jje,:)=masse_cum(:,jjb:jje,:)+masse(:,jjb:jje,:)
406 flux_u_cum(:,jjb:jje,:)=flux_u_cum(:,jjb:jje,:)
407 . +flux_u(:,jjb:jje,:)
408 if (pole_sud) jje=jj_end-1
409 flux_v_cum(:,jjb:jje,:)=flux_v_cum(:,jjb:jje,:)
410 . +flux_v(:,jjb:jje,:)
416 q_cum(:,jjb:jje,:,iq)=q_cum(:,jjb:jje,:,iq)
417 . +
q(:,jjb:jje,:,iq)*masse(:,jjb:jje,:)
430 flux_uq_cum(
i,
j,
l,iq)=flux_uq_cum(
i,
j,
l,iq)
433 flux_uq_cum(iip1,
j,
l,iq)=flux_uq_cum(1,
j,
l,iq)
441 call
register_hallo(
q(1,1,1,iq),
ip1jmp1,llm,0,1,1,0,req)
448 if (pole_sud) jje=jj_end-1
454 flux_vq_cum(
i,
j,
l,iq)=flux_vq_cum(
i,
j,
l,iq)
471 call
convflu_p(flux_uq_cum,flux_vq_cum,llm*nq,dq)
479 call
convmas_p(flux_u_cum,flux_v_cum,convm)
490 dq(
i,
j,
l ,iq)=dq(
i,
j,
l ,iq)-ww
491 dq(
i,
j,
l+1,iq)=dq(
i,
j,
l+1,iq)+ww
497 .
WRITE(
lunout,*)
'Apres les calculs fait a chaque pas'
501 if (icum.eq.ncum)
then
505 .
WRITE(
lunout,*)
'Pas d ecriture'
509 q_cum(:,jjb:jje,:,iq)=q_cum(:,jjb:jje,:,iq)
510 . /masse_cum(:,jjb:jje,:)
517 ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)*zz
518 masse_cum(:,jjb:jje,:)=masse_cum(:,jjb:jje,:)*zz
519 flux_u_cum(:,jjb:jje,:)=flux_u_cum(:,jjb:jje,:)*zz
520 flux_uq_cum(:,jjb:jje,:,:)=flux_uq_cum(:,jjb:jje,:,:)*zz
521 dq(:,jjb:jje,:,:)=dq(:,jjb:jje,:,:)*zz
523 IF (pole_sud) jje=jj_end-1
524 flux_v_cum(:,jjb:jje,:)=flux_v_cum(:,jjb:jje,:)*zz
525 flux_vq_cum(:,jjb:jje,:,:)=flux_vq_cum(:,jjb:jje,:,:)*zz
534 dq(:,jjb:jje,:,iq)=dq(:,jjb:jje,:,iq)/masse_cum(:,jjb:jje,:)
545 if (pole_sud) jje=jj_end-1
552 call
register_hallo(q_cum(1,1,1,iq),
ip1jmp1,llm,0,1,1,0,req)
558 call
massbar_p(masse_cum,massebx,masseby)
562 if (pole_sud) jje=jj_end-1
606 if (pole_sud) jje=jj_end-1
617 zvq(
j,
l,itot,iq)=zvq(
j,
l,itot,iq)
618 s +flux_vq_cum(
i,
j,
l,iq)
619 zqy= 0.5*(q_cum(
i,
j,
l,iq)*masse_cum(
i,
j,
l)+
620 s q_cum(
i,
j+1,
l,iq)*masse_cum(
i,
j+1,
l))
621 zvqtmp(
j,
l)=zvqtmp(
j,
l)+flux_v_cum(
i,
j,
l)*zqy
622 s /(0.5*(masse_cum(
i,
j,
l)+masse_cum(
i,
j+1,
l)))
623 zvq(
j,
l,iave,iq)=zvq(
j,
l,iave,iq)+zqy
628 zvq(
j,
l,itot,iq)=zvq(
j,
l,itot,iq)*zfactv(
j,
l)
629 zvqtmp(
j,
l)=zvqtmp(
j,
l)*zfactv(
j,
l)
630 zvq(
j,
l,immc,iq)=
zv(
j,
l)*zvq(
j,
l,iave,iq)*zfactv(
j,
l)
631 zvq(
j,
l,itrs,iq)=zvq(
j,
l,itot,iq)-zvqtmp(
j,
l)
632 zvq(
j,
l,istn,iq)=zvqtmp(
j,
l)-zvq(
j,
l,immc,iq)
638 psiq(
j,
l,iq)=psiq(
j,
l+1,iq)+zvq(
j,
l,itot,iq)
654 if (i_sortie.eq.1)
then
658 if (pole_sud) jje=jj_end-1
659 if (pole_sud) jjn=
jj_nb-1
663 call histwrite(fileid,znom(itr,iq),itau,
664 s zvq(jjb:jje,:,itr,iq)
667 call histwrite(fileid,
'psi'//nom(iq),
668 s itau,psiq(jjb:jje,1:llm,iq)
672 call histwrite(fileid,
'masse',itau,
zmasse(jjb:jje,1:llm)
674 call histwrite(fileid,
'v',itau,
zv(jjb:jje,1:llm)
676 psi(jjb:jje,:)=psi(jjb:jje,:)*1.e-9
677 call histwrite(fileid,
'psi',itau,psi(jjb:jje,1:llm),
689 zamasse(jjb:jje)=zamasse(jjb:jje)+
zmasse(jjb:jje,
l)
696 zavq(jjb:jje,itr,iq)=zavq(jjb:jje,itr,iq)
697 s +zvq(jjb:jje,
l,itr,iq)
700 zavq(jjb:jje,itr,iq)=zavq(jjb:jje,itr,iq)/zamasse(jjb:jje)
701 call histwrite(fileid,
'a'//znom(itr,iq),itau,
702 s zavq(jjb:jje,itr,iq),jjn*llm,ndex3d)