5 s ps,masse,pk,flux_u,flux_v,
teta,phi,ucov,vcov,trac)
18 #include "dimensions.h"
44 real masse(iip1,
jjp1,llm),pk(iip1,
jjp1,llm)
45 real flux_u(iip1,
jjp1,llm)
46 real flux_v(iip1,jjm,llm)
48 real phi(iip1,
jjp1,llm)
49 real ucov(iip1,
jjp1,llm)
50 real vcov(iip1,jjm,llm)
51 real trac(iip1,
jjp1,llm,ntrac)
58 real zz,zqy,zfactv(jjm,llm)
66 character*6,
save :: nom(nq)
67 character*6,
save :: unites(nq)
73 integer itemp,igeop,iecin,iang,iu,iovap,iun
77 save itemp,igeop,iecin,iang,iu,iovap,iun
86 data itemp,igeop,iecin,iang,iu,iovap,iun/1,2,3,4,5,6,7/
92 REAL vcont(iip1,jjm,llm),ucont(iip1,
jjp1,llm)
94 REAL massebx(iip1,
jjp1,llm),masseby(iip1,jjm,llm)
95 REAL vorpot(iip1,jjm,llm)
96 REAL w(iip1,
jjp1,llm),ecin(iip1,
jjp1,llm),convm(iip1,
jjp1,llm)
97 REAL bern(iip1,
jjp1,llm)
100 real q(iip1,
jjp1,llm,nq)
103 real ps_cum(iip1,
jjp1)
104 real masse_cum(iip1,
jjp1,llm)
105 real flux_u_cum(iip1,
jjp1,llm)
106 real flux_v_cum(iip1,jjm,llm)
107 real q_cum(iip1,
jjp1,llm,nq)
108 real flux_uq_cum(iip1,
jjp1,llm,nq)
109 real flux_vq_cum(iip1,jjm,llm,nq)
110 real flux_wq_cum(iip1,
jjp1,llm,nq)
111 real dq(iip1,
jjp1,llm,nq)
113 save ps_cum,masse_cum,flux_u_cum,flux_v_cum
114 save q_cum,flux_uq_cum,flux_vq_cum
123 character*10,
save :: znom(ntr,nq)
124 character*20,
save :: znoml(ntr,nq)
125 character*10,
save :: zunites(ntr,nq)
127 integer iave,itot,immc,itrs,istn
128 data iave,itot,immc,itrs,istn/1,2,3,4,5/
129 character*3 ctrs(ntr)
130 data ctrs/
' ',
'TOT',
'MMC',
'TRS',
'STN'/
132 real zvq(jjm,llm,ntr,nq),zvqtmp(jjm,llm)
133 real zavq(jjm,ntr,nq),psiq(jjm,llm+1,nq)
134 real zmasse(jjm,llm),zamasse(jjm)
136 real zv(jjm,llm),psi(jjm,llm+1)
147 integer thoriid, zvertiid
150 integer ndex3d(jjm*llm)
161 real rlong(jjm),rlatg(jjm)
182 if (abs(ncum*dt_app-dt_cum).gt.1.e-5*dt_app)
then
184 .
'Pb : le pas de cumule doit etre multiple du pas'
185 WRITE(
lunout,*)
'dt_app=',dt_app
186 WRITE(
lunout,*)
'dt_cum=',dt_cum
190 if (i_sortie.eq.1)
then
193 s ,0.,180./
pi,0.,0.,jjm,
rlatv,-90.,90.,180./
pi
195 s ,dt_cum,file,
'dyn_zon ')
207 unites(igeop)=
'm2/s2'
208 unites(iecin)=
'm2/s2'
211 unites(iovap)=
'kg/kg'
228 call
histbeg(infile, 1, rlong, jjm, rlatg,
230 . tau0,
zjulian, dt_cum, thoriid, fileid)
235 call
histvert(fileid,
'presnivs',
'Niveaux sigma',
'mb',
243 znoml(itr,iq)=nom(iq)
244 zunites(itr,iq)=unites(iq)
246 znom(itr,iq)=ctrs(itr)//
'v'//nom(iq)
247 znoml(itr,iq)=
'transport : v * '//nom(iq)//
' '//ctrs(itr)
248 zunites(itr,iq)=
'm/s * '//unites(iq)
258 .
WRITE(
lunout,*)
'var ',itr,iq
259 . ,znom(itr,iq),znoml(itr,iq),zunites(itr,iq)
260 call
histdef(fileid,znom(itr,iq),znoml(itr,iq),
261 . zunites(itr,iq),1,jjm,thoriid,llm,1,llm,zvertiid,
262 . 32,
'ave(X)',dt_cum,dt_cum)
266 call
histdef(fileid,
'psi'//nom(iq)
267 . ,
'stream fn. '//znoml(itot,iq),
268 . zunites(itot,iq),1,jjm,thoriid,llm,1,llm,zvertiid,
269 . 32,
'ave(X)',dt_cum,dt_cum)
275 call
histdef(fileid,
'masse',
'masse',
276 .
'kg', 1, jjm, thoriid, llm, 1, llm, zvertiid,
277 . 32,
'ave(X)', dt_cum, dt_cum)
279 .
'm/s', 1, jjm, thoriid, llm, 1, llm, zvertiid,
280 . 32,
'ave(X)', dt_cum, dt_cum)
283 call
histdef(fileid,
'psi',
'stream fn. MMC ',
'mega t/s',
284 . 1,jjm,thoriid,llm,1,llm,zvertiid,
285 . 32,
'ave(X)',dt_cum,dt_cum)
292 call
histdef(fileid,
'a'//znom(itr,iq),znoml(itr,iq),
293 . zunites(itr,iq),1,jjm,thoriid,1,1,1,-99,
294 . 32,
'ave(X)',dt_cum,dt_cum)
312 CALL
covcont(llm,ucov,vcov,ucont,vcont)
313 CALL
enercin(vcov,ucov,vcont,ucont,ecin)
318 unat(:,:,
l)=ucont(:,:,
l)*
cu(:,:)
321 q(:,:,:,itemp)=
teta(:,:,:)*pk(:,:,:)/
cpp
322 q(:,:,:,igeop)=phi(:,:,:)
323 q(:,:,:,iecin)=ecin(:,:,:)
324 q(:,:,:,iang)=
ang(:,:,:)
325 q(:,:,:,iu)=unat(:,:,:)
326 q(:,:,:,iovap)=trac(:,:,:,1)
345 .
WRITE(
lunout,*)
'dans bilan_dyn ',icum,
'->',icum+1
350 masse_cum=masse_cum+masse
351 flux_u_cum=flux_u_cum+flux_u
352 flux_v_cum=flux_v_cum+flux_v
354 q_cum(:,:,:,iq)=q_cum(:,:,:,iq)+
q(:,:,:,iq)*masse(:,:,:)
367 flux_uq_cum(
i,
j,
l,iq)=flux_uq_cum(
i,
j,
l,iq)
370 flux_uq_cum(iip1,
j,
l,iq)=flux_uq_cum(1,
j,
l,iq)
381 flux_vq_cum(
i,
j,
l,iq)=flux_vq_cum(
i,
j,
l,iq)
393 call
convflu(flux_uq_cum,flux_vq_cum,llm*nq,dq)
396 call
convmas(flux_u_cum,flux_v_cum,convm)
404 dq(
i,
j,
l ,iq)=dq(
i,
j,
l ,iq)-ww
405 dq(
i,
j,
l+1,iq)=dq(
i,
j,
l+1,iq)+ww
411 .
WRITE(
lunout,*)
'Apres les calculs fait a chaque pas'
415 if (icum.eq.ncum)
then
419 .
WRITE(
lunout,*)
'Pas d ecriture'
423 q_cum(:,:,:,iq)=q_cum(:,:,:,iq)/masse_cum(:,:,:)
427 masse_cum=masse_cum*zz
428 flux_u_cum=flux_u_cum*zz
429 flux_v_cum=flux_v_cum*zz
430 flux_uq_cum=flux_uq_cum*zz
431 flux_vq_cum=flux_vq_cum*zz
438 dq(:,:,:,iq)=dq(:,:,:,iq)/masse_cum(:,:,:)
449 call
massbar(masse_cum,massebx,masseby)
499 zvq(
j,
l,itot,iq)=zvq(
j,
l,itot,iq)
500 s +flux_vq_cum(
i,
j,
l,iq)
501 zqy= 0.5*(q_cum(
i,
j,
l,iq)*masse_cum(
i,
j,
l)+
502 s q_cum(
i,
j+1,
l,iq)*masse_cum(
i,
j+1,
l))
503 zvqtmp(
j,
l)=zvqtmp(
j,
l)+flux_v_cum(
i,
j,
l)*zqy
504 s /(0.5*(masse_cum(
i,
j,
l)+masse_cum(
i,
j+1,
l)))
505 zvq(
j,
l,iave,iq)=zvq(
j,
l,iave,iq)+zqy
510 zvq(
j,
l,itot,iq)=zvq(
j,
l,itot,iq)*zfactv(
j,
l)
511 zvqtmp(
j,
l)=zvqtmp(
j,
l)*zfactv(
j,
l)
512 zvq(
j,
l,immc,iq)=
zv(
j,
l)*zvq(
j,
l,iave,iq)*zfactv(
j,
l)
513 zvq(
j,
l,itrs,iq)=zvq(
j,
l,itot,iq)-zvqtmp(
j,
l)
514 zvq(
j,
l,istn,iq)=zvqtmp(
j,
l)-zvq(
j,
l,immc,iq)
520 psiq(
j,
l,iq)=psiq(
j,
l+1,iq)+zvq(
j,
l,itot,iq)
536 if (i_sortie.eq.1)
then
539 call histwrite(fileid,znom(itr,iq),itau,zvq(:,:,itr,iq)
542 call histwrite(fileid,
'psi'//nom(iq),itau,psiq(:,1:llm,iq)
546 call histwrite(fileid,
'masse',itau,
zmasse
548 call histwrite(fileid,
'v',itau,
zv
551 call histwrite(fileid,
'psi',itau,psi(:,1:llm),jjm*llm,ndex3d)
562 zamasse(:)=zamasse(:)+
zmasse(:,
l)
568 zavq(:,itr,iq)=zavq(:,itr,iq)+zvq(:,
l,itr,iq)*
zmasse(:,
l)
570 zavq(:,itr,iq)=zavq(:,itr,iq)/zamasse(:)
571 call histwrite(fileid,
'a'//znom(itr,iq),itau,zavq(:,itr,iq)