5 s ps,masse,pk,flux_u,flux_v,teta,phi,ucov,vcov,trac)
18 #include "dimensions.h"
46 real flux_v(iip1,jjm,
llm)
50 real vcov(iip1,jjm,
llm)
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/
94 REAL massebx(iip1,
jjp1,
llm),masseby(iip1,jjm,
llm)
95 REAL vorpot(iip1,jjm,
llm)
103 real ps_cum(iip1,
jjp1)
106 real flux_v_cum(iip1,jjm,
llm)
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)
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'
222 CALL ymds2ju(zan, 1, dayref, 0.0, zjulian)
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)
278 call histdef(fileid,
'v',
'v',
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)
313 CALL enercin(vcov,ucov,vcont,ucont,ecin)
317 ang(:,:,l)=ucov(:,:,l)+
constang(:,:)
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)
368 s +flux_u(i,j,l)*0.5*(q(i,j,l,iq)+q(i+1,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)
382 s +flux_v(i,j,l)*0.5*(q(i,j,l,iq)+q(i,j+1,l,iq))
393 call convflu(flux_uq_cum,flux_vq_cum,
llm*nq,dq)
396 call convmas(flux_u_cum,flux_v_cum,convm)
403 ww=-0.5*w(i,j,l+1)*(q(i,j,l,iq)+q(i,j,l+1,iq))
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)
453 zmasse(j,l)=zmasse(j,l)+masseby(i,j,l)
454 zv(j,l)=zv(j,l)+flux_v_cum(i,j,l)
456 zfactv(j,l)=
cv(1,j)/zmasse(j,l)
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
509 zvq(j,l,iave,iq)=zvq(j,l,iave,iq)/zmasse(j,l)
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)
529 psi(j,l)=psi(j,l+1)+zv(j,l)
530 zv(j,l)=zv(j,l)*zfactv(j,l)
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)
!$Id zjulian!correction pour l heure initiale!jyg!jyg CALL ymds2ju(annee_ref, 1, day_ref, hour, zjulian)!jyg CALL histbeg_phy("histrac"
subroutine covcont(klevel, ucov, vcov, ucont, vcont)
!$Header!CDK comgeom COMMON comgeom constang
!$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
subroutine convflu(xflu, yflu, nbniv, convfl)
subroutine convmas(pbaru, pbarv, convm)
subroutine massbar(masse, massebx, masseby)
!$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 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 inigrads(if, im, x, fx, xmin, xmax, jm, y, ymin, ymax, fy, lm, z, fz, dt, file, titlel)
!$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
!$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 vitvert(convm, w)
c c zjulian c cym CALL iim cym klev iim
!$Header!CDK comgeom COMMON comgeom cv
subroutine enercin(vcov, ucov, vcont, ucont, ecin)
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 bilan_dyn(ntrac, dt_app, dt_cum, ps, masse, pk, flux_u, flux_v, teta, phi, ucov, vcov, trac)
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout