5 s ps,masse,pk,flux_u,flux_v,
teta,phi,ucov,vcov,trac)
21 #include "dimensions.h"
46 real ps(iip1,jjb_u:jje_u)
47 real masse(iip1,jjb_u:jje_u,llm),pk(iip1,jjb_u:jje_u,llm)
48 real flux_u(iip1,jjb_u:jje_u,llm)
49 real flux_v(iip1,jjb_v:jje_v,llm)
50 real teta(iip1,jjb_u:jje_u,llm)
51 real phi(iip1,jjb_u:jje_u,llm)
52 real ucov(iip1,jjb_u:jje_u,llm)
53 real vcov(iip1,jjb_v:jje_v,llm)
54 real trac(iip1,jjb_u:jje_u,llm,ntrac)
59 integer,
SAVE :: icum,ncum
61 LOGICAL,
SAVE :: first=.true.
65 REAl,
SAVE,
ALLOCATABLE :: zfactv(:,:)
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,
ALLOCATABLE :: vcont(:,:,:),ucont(:,:,:)
91 REAL,
SAVE,
ALLOCATABLE ::
ang(:,:,:),unat(:,:,:)
92 REAL,
SAVE,
ALLOCATABLE :: massebx(:,:,:),masseby(:,:,:)
93 REAL,
SAVE,
ALLOCATABLE :: vorpot(:,:,:)
94 REAL,
SAVE,
ALLOCATABLE :: w(:,:,:),ecin(:,:,:),convm(:,:,:)
95 REAL,
SAVE,
ALLOCATABLE :: bern(:,:,:)
98 real,
SAVE,
ALLOCATABLE ::
q(:,:,:,:)
101 real,
SAVE,
ALLOCATABLE :: ps_cum(:,:)
102 real,
SAVE,
ALLOCATABLE :: masse_cum(:,:,:)
103 real,
SAVE,
ALLOCATABLE :: flux_u_cum(:,:,:)
104 real,
SAVE,
ALLOCATABLE :: flux_v_cum(:,:,:)
105 real,
SAVE,
ALLOCATABLE :: q_cum(:,:,:,:)
106 real,
SAVE,
ALLOCATABLE :: flux_uq_cum(:,:,:,:)
107 real,
SAVE,
ALLOCATABLE :: flux_vq_cum(:,:,:,:)
108 real,
SAVE,
ALLOCATABLE :: flux_wq_cum(:,:,:,:)
109 real,
SAVE,
ALLOCATABLE :: dq(:,:,:,:)
119 character*10,
save :: znom(ntr,nq)
120 character*20,
save :: znoml(ntr,nq)
121 character*10,
save :: zunites(ntr,nq)
123 INTEGER,
PARAMETER :: iave=1,itot=2,immc=3,itrs=4,istn=5
125 character*3 ctrs(ntr)
126 data ctrs/
' ',
'TOT',
'MMC',
'TRS',
'STN'/
128 real,
SAVE,
ALLOCATABLE :: zvq(:,:,:,:),zvqtmp(:,:)
129 real,
SAVE,
ALLOCATABLE :: zavq(:,:,:),psiq(:,:,:)
130 real,
SAVE,
ALLOCATABLE ::
zmasse(:,:),zamasse(:)
132 real,
SAVE,
ALLOCATABLE ::
zv(:,:),psi(:,:)
143 integer thoriid, zvertiid
146 INTEGER,
SAVE,
ALLOCATABLE :: ndex3d(:)
157 real,
SAVE,
ALLOCATABLE :: rlong(:),rlatg(:)
158 integer :: jjb,jje,jjn,ijb,ije
163 INTEGER,
DIMENSION(1) :: ddid
164 INTEGER,
DIMENSION(1) :: dsg
165 INTEGER,
DIMENSION(1) :: dsl
166 INTEGER,
DIMENSION(1) :: dpf
167 INTEGER,
DIMENSION(1) :: dpl
168 INTEGER,
DIMENSION(1) :: dhs
169 INTEGER,
DIMENSION(1) :: dhe
171 INTEGER :: bilan_dyn_domain_id
185 ALLOCATE(zfactv(jjb_v:jje_v,llm))
186 ALLOCATE(vcont(iip1,jjb_v:jje_v,llm))
187 ALLOCATE(ucont(iip1,jjb_u:jje_u,llm))
188 ALLOCATE(
ang(iip1,jjb_u:jje_u,llm))
189 ALLOCATE(unat(iip1,jjb_u:jje_u,llm))
190 ALLOCATE(massebx(iip1,jjb_u:jje_u,llm))
191 ALLOCATE(masseby(iip1,jjb_v:jje_v,llm))
192 ALLOCATE(vorpot(iip1,jjb_v:jje_v,llm))
193 ALLOCATE(w(iip1,jjb_u:jje_u,llm))
194 ALLOCATE(ecin(iip1,jjb_u:jje_u,llm))
195 ALLOCATE(convm(iip1,jjb_u:jje_u,llm))
196 ALLOCATE(bern(iip1,jjb_u:jje_u,llm))
197 ALLOCATE(
q(iip1,jjb_u:jje_u,llm,nq))
198 ALLOCATE(ps_cum(iip1,jjb_u:jje_u))
199 ALLOCATE(masse_cum(iip1,jjb_u:jje_u,llm))
200 ALLOCATE(flux_u_cum(iip1,jjb_u:jje_u,llm))
201 ALLOCATE(flux_v_cum(iip1,jjb_v:jje_v,llm))
202 ALLOCATE(q_cum(iip1,jjb_u:jje_u,llm,nq))
203 ALLOCATE(flux_uq_cum(iip1,jjb_u:jje_u,llm,nq))
204 ALLOCATE(flux_vq_cum(iip1,jjb_v:jje_v,llm,nq))
205 ALLOCATE(flux_wq_cum(iip1,jjb_u:jje_u,llm,nq))
206 ALLOCATE(dq(iip1,jjb_u:jje_u,llm,nq))
207 ALLOCATE(zvq(jjb_v:jje_v,llm,ntr,nq))
208 ALLOCATE(zvqtmp(jjb_v:jje_v,llm))
209 ALLOCATE(zavq(jjb_v:jje_v,ntr,nq))
210 ALLOCATE(psiq(jjb_v:jje_v,llm+1,nq))
211 ALLOCATE(
zmasse(jjb_v:jje_v,llm))
212 ALLOCATE(zamasse(jjb_v:jje_v))
213 ALLOCATE(
zv(jjb_v:jje_v,llm))
214 ALLOCATE(psi(jjb_v:jje_v,llm+1))
215 ALLOCATE(ndex3d(jjb_v:jje_v*llm))
217 ALLOCATE(rlong(jjb_v:jje_v))
218 ALLOCATE(rlatg(jjb_v:jje_v))
227 if (abs(ncum*dt_app-dt_cum).gt.1.e-5*dt_app)
then
229 .
'Pb : le pas de cumule doit etre multiple du pas'
230 WRITE(
lunout,*)
'dt_app=',dt_app
231 WRITE(
lunout,*)
'dt_cum=',dt_cum
245 unites(igeop)=
'm2/s2'
246 unites(iecin)=
'm2/s2'
249 unites(iovap)=
'kg/kg'
282 call flio_dom_set(mpi_size,mpi_rank,ddid,dsg,dsl,dpf,dpl,dhs,dhe,
283 .
'box',bilan_dyn_domain_id)
286 . 1, rlong(jjb:jje), jjn, rlatg(jjb:jje),
288 . tau0,
zjulian, dt_cum, thoriid, fileid,
289 . bilan_dyn_domain_id)
294 call
histvert(fileid,
'presnivs',
'Niveaux sigma',
'mb',
302 znoml(itr,iq)=nom(iq)
303 zunites(itr,iq)=unites(iq)
305 znom(itr,iq)=ctrs(itr)//
'v'//nom(iq)
306 znoml(itr,iq)=
'transport : v * '//nom(iq)//
' '//ctrs(itr)
307 zunites(itr,iq)=
'm/s * '//unites(iq)
317 .
WRITE(
lunout,*)
'var ',itr,iq
318 . ,znom(itr,iq),znoml(itr,iq),zunites(itr,iq)
319 call
histdef(fileid,znom(itr,iq),znoml(itr,iq),
320 . zunites(itr,iq),1,jjn,thoriid,llm,1,llm,zvertiid,
321 . 32,
'ave(X)',dt_cum,dt_cum)
325 call
histdef(fileid,
'psi'//nom(iq)
326 . ,
'stream fn. '//znoml(itot,iq),
327 . zunites(itot,iq),1,jjn,thoriid,llm,1,llm,zvertiid,
328 . 32,
'ave(X)',dt_cum,dt_cum)
334 call
histdef(fileid,
'masse',
'masse',
335 .
'kg', 1, jjn, thoriid, llm, 1, llm, zvertiid,
336 . 32,
'ave(X)', dt_cum, dt_cum)
338 .
'm/s', 1, jjn, thoriid, llm, 1, llm, zvertiid,
339 . 32,
'ave(X)', dt_cum, dt_cum)
342 call
histdef(fileid,
'psi',
'stream fn. MMC ',
'mega t/s',
343 . 1,jjn,thoriid,llm,1,llm,zvertiid,
344 . 32,
'ave(X)',dt_cum,dt_cum)
351 call
histdef(fileid,
'a'//znom(itr,iq),znoml(itr,iq),
352 . zunites(itr,iq),1,jjn,thoriid,1,1,1,-99,
353 . 32,
'ave(X)',dt_cum,dt_cum)
388 unat(:,jjb:jje,
l)=ucont(:,jjb:jje,
l)*
cu(:,jjb:jje)
394 q(:,jjb:jje,
l,itemp)=
teta(:,jjb:jje,
l)*pk(:,jjb:jje,
l)/
cpp
395 q(:,jjb:jje,
l,igeop)=phi(:,jjb:jje,
l)
396 q(:,jjb:jje,
l,iecin)=ecin(:,jjb:jje,
l)
397 q(:,jjb:jje,
l,iang)=
ang(:,jjb:jje,
l)
398 q(:,jjb:jje,
l,iu)=unat(:,jjb:jje,
l)
399 q(:,jjb:jje,
l,iovap)=trac(:,jjb:jje,
l,1)
400 q(:,jjb:jje,
l,iun)=1.
419 masse_cum(:,jjb:jje,
l)=0.
420 flux_u_cum(:,jjb:jje,
l)=0.
421 q_cum(:,jjb:jje,:,
l)=0.
422 flux_uq_cum(:,jjb:jje,
l,:)=0.
423 if (pole_sud) jje=jj_end-1
424 flux_v_cum(:,jjb:jje,
l)=0.
425 flux_vq_cum(:,jjb:jje,
l,:)=0.
431 .
WRITE(
lunout,*)
'dans bilan_dyn ',icum,
'->',icum+1
439 ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)+ps(:,jjb:jje)
445 masse_cum(:,jjb:jje,:)=masse_cum(:,jjb:jje,:)+masse(:,jjb:jje,:)
446 flux_u_cum(:,jjb:jje,:)=flux_u_cum(:,jjb:jje,:)
447 . +flux_u(:,jjb:jje,:)
451 if (pole_sud) jje=jj_end-1
455 flux_v_cum(:,jjb:jje,:)=flux_v_cum(:,jjb:jje,:)
456 . +flux_v(:,jjb:jje,:)
466 q_cum(:,jjb:jje,:,iq)=q_cum(:,jjb:jje,:,iq)
467 . +
q(:,jjb:jje,:,iq)*masse(:,jjb:jje,:)
483 flux_uq_cum(
i,
j,
l,iq)=flux_uq_cum(
i,
j,
l,iq)
486 flux_uq_cum(iip1,
j,
l,iq)=flux_uq_cum(1,
j,
l,iq)
503 if (pole_sud) jje=jj_end-1
510 flux_vq_cum(
i,
j,
l,iq)=flux_vq_cum(
i,
j,
l,iq)
529 call
convflu_loc(flux_uq_cum,flux_vq_cum,llm*nq,dq)
564 dq(
i,
j,
l ,iq)=dq(
i,
j,
l ,iq)-ww
565 dq(
i,
j,
l+1,iq)=dq(
i,
j,
l+1,iq)+ww
573 dq(
i,
j,
l,iq)=dq(
i,
j,
l,iq)+ww
581 .
WRITE(
lunout,*)
'Apres les calculs fait a chaque pas'
585 if (icum.eq.ncum)
then
589 .
WRITE(
lunout,*)
'Pas d ecriture'
598 q_cum(:,jjb:jje,
l,iq)=q_cum(:,jjb:jje,
l,iq)
599 . /masse_cum(:,jjb:jje,
l)
607 ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)*zz
612 masse_cum(:,jjb:jje,
l)=masse_cum(:,jjb:jje,
l)*zz
613 flux_u_cum(:,jjb:jje,
l)=flux_u_cum(:,jjb:jje,
l)*zz
614 flux_uq_cum(:,jjb:jje,
l,:)=flux_uq_cum(:,jjb:jje,
l,:)*zz
615 dq(:,jjb:jje,
l,:)=dq(:,jjb:jje,
l,:)*zz
620 IF (pole_sud) jje=jj_end-1
623 flux_v_cum(:,jjb:jje,
l)=flux_v_cum(:,jjb:jje,
l)*zz
624 flux_vq_cum(:,jjb:jje,
l,:)=flux_vq_cum(:,jjb:jje,
l,:)*zz
637 dq(:,jjb:jje,
l,iq)=dq(:,jjb:jje,
l,iq)/masse_cum(:,jjb:jje,
l)
650 if (pole_sud) jje=jj_end-1
672 if (pole_sud) jje=jj_end-1
718 if (pole_sud) jje=jj_end-1
730 zvq(
j,
l,itot,iq)=zvq(
j,
l,itot,iq)
731 s +flux_vq_cum(
i,
j,
l,iq)
732 zqy= 0.5*(q_cum(
i,
j,
l,iq)*masse_cum(
i,
j,
l)+
733 s q_cum(
i,
j+1,
l,iq)*masse_cum(
i,
j+1,
l))
734 zvqtmp(
j,
l)=zvqtmp(
j,
l)+flux_v_cum(
i,
j,
l)*zqy
735 s /(0.5*(masse_cum(
i,
j,
l)+masse_cum(
i,
j+1,
l)))
736 zvq(
j,
l,iave,iq)=zvq(
j,
l,iave,iq)+zqy
741 zvq(
j,
l,itot,iq)=zvq(
j,
l,itot,iq)*zfactv(
j,
l)
742 zvqtmp(
j,
l)=zvqtmp(
j,
l)*zfactv(
j,
l)
743 zvq(
j,
l,immc,iq)=
zv(
j,
l)*zvq(
j,
l,iave,iq)*zfactv(
j,
l)
744 zvq(
j,
l,itrs,iq)=zvq(
j,
l,itot,iq)-zvqtmp(
j,
l)
745 zvq(
j,
l,istn,iq)=zvqtmp(
j,
l)-zvq(
j,
l,immc,iq)
754 psiq(
j,
l,iq)=psiq(
j,
l+1,iq)+zvq(
j,
l,itot,iq)
777 if (i_sortie.eq.1)
then
781 if (pole_sud) jje=jj_end-1
782 if (pole_sud) jjn=
jj_nb-1
785 call histwrite(fileid,znom(itr,iq),itau,
786 s zvq(jjb:jje,:,itr,iq)
789 call histwrite(fileid,
'psi'//nom(iq),
790 s itau,psiq(jjb:jje,1:llm,iq)
794 call histwrite(fileid,
'masse',itau,
zmasse(jjb:jje,1:llm)
796 call histwrite(fileid,
'v',itau,
zv(jjb:jje,1:llm)
798 psi(jjb:jje,:)=psi(jjb:jje,:)*1.e-9
799 call histwrite(fileid,
'psi',itau,psi(jjb:jje,1:llm),
811 zamasse(jjb:jje)=zamasse(jjb:jje)+
zmasse(jjb:jje,
l)
818 zavq(jjb:jje,itr,iq)=zavq(jjb:jje,itr,iq)
819 s +zvq(jjb:jje,
l,itr,iq)
822 zavq(jjb:jje,itr,iq)=zavq(jjb:jje,itr,iq)/zamasse(jjb:jje)
823 call histwrite(fileid,
'a'//znom(itr,iq),itau,
824 s zavq(jjb:jje,itr,iq),jjn*llm,ndex3d)