5 s ps,masse,pk,flux_u,flux_v,teta,phi,ucov,vcov,trac)
21 #include "dimensions.h"
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
164 INTEGER,
DIMENSION(1) :: ddid
165 INTEGER,
DIMENSION(1) :: dsg
166 INTEGER,
DIMENSION(1) :: dsl
167 INTEGER,
DIMENSION(1) :: dpf
168 INTEGER,
DIMENSION(1) :: dpl
169 INTEGER,
DIMENSION(1) :: dhs
170 INTEGER,
DIMENSION(1) :: dhe
172 INTEGER :: bilan_dyn_domain_id
228 if (abs(ncum*dt_app-dt_cum).gt.1.e-5*dt_app)
then
230 .
'Pb : le pas de cumule doit etre multiple du pas'
231 WRITE(
lunout,*)
'dt_app=',dt_app
232 WRITE(
lunout,*)
'dt_cum=',dt_cum
246 unites(igeop)=
'm2/s2'
247 unites(iecin)=
'm2/s2'
250 unites(iovap)=
'kg/kg'
261 CALL ymds2ju(zan, 1, dayref, 0.0, zjulian)
284 .
'box',bilan_dyn_domain_id)
287 . 1, rlong(jjb:jje), jjn, rlatg(jjb:jje),
289 . tau0, zjulian, dt_cum, thoriid, fileid,
290 . bilan_dyn_domain_id)
295 call histvert(fileid,
'presnivs',
'Niveaux sigma',
'mb',
303 znoml(itr,iq)=nom(iq)
304 zunites(itr,iq)=unites(iq)
306 znom(itr,iq)=ctrs(itr)//
'v'//nom(iq)
307 znoml(itr,iq)=
'transport : v * '//nom(iq)//
' '//ctrs(itr)
308 zunites(itr,iq)=
'm/s * '//unites(iq)
318 .
WRITE(
lunout,*)
'var ',itr,iq
319 . ,znom(itr,iq),znoml(itr,iq),zunites(itr,iq)
320 call histdef(fileid,znom(itr,iq),znoml(itr,iq),
321 . zunites(itr,iq),1,jjn,thoriid,
llm,1,
llm,zvertiid,
322 . 32,
'ave(X)',dt_cum,dt_cum)
326 call histdef(fileid,
'psi'//nom(iq)
327 . ,
'stream fn. '//znoml(itot,iq),
328 . zunites(itot,iq),1,jjn,thoriid,
llm,1,
llm,zvertiid,
329 . 32,
'ave(X)',dt_cum,dt_cum)
335 call histdef(fileid,
'masse',
'masse',
336 .
'kg', 1, jjn, thoriid,
llm, 1,
llm, zvertiid,
337 . 32,
'ave(X)', dt_cum, dt_cum)
338 call histdef(fileid,
'v',
'v',
339 .
'm/s', 1, jjn, thoriid,
llm, 1,
llm, zvertiid,
340 . 32,
'ave(X)', dt_cum, dt_cum)
343 call histdef(fileid,
'psi',
'stream fn. MMC ',
'mega t/s',
344 . 1,jjn,thoriid,
llm,1,
llm,zvertiid,
345 . 32,
'ave(X)',dt_cum,dt_cum)
352 call histdef(fileid,
'a'//znom(itr,iq),znoml(itr,iq),
353 . zunites(itr,iq),1,jjn,thoriid,1,1,1,-99,
354 . 32,
'ave(X)',dt_cum,dt_cum)
388 ang(:,jjb:jje,l)=ucov(:,jjb:jje,l)+
constang(:,jjb:jje)
389 unat(:,jjb:jje,l)=ucont(:,jjb:jje,l)*
cu(:,jjb:jje)
395 q(:,jjb:jje,l,itemp)=teta(:,jjb:jje,l)*pk(:,jjb:jje,l)/
cpp
396 q(:,jjb:jje,l,igeop)=phi(:,jjb:jje,l)
397 q(:,jjb:jje,l,iecin)=ecin(:,jjb:jje,l)
398 q(:,jjb:jje,l,iang)=ang(:,jjb:jje,l)
399 q(:,jjb:jje,l,iu)=unat(:,jjb:jje,l)
400 q(:,jjb:jje,l,iovap)=trac(:,jjb:jje,l,1)
401 q(:,jjb:jje,l,iun)=1.
420 masse_cum(:,jjb:jje,l)=0.
421 flux_u_cum(:,jjb:jje,l)=0.
422 q_cum(:,jjb:jje,l,:)=0.
423 flux_uq_cum(:,jjb:jje,l,:)=0.
425 flux_v_cum(:,jjb:jje,l)=0.
426 flux_vq_cum(:,jjb:jje,l,:)=0.
432 .
WRITE(
lunout,*)
'dans bilan_dyn ',icum,
'->',icum+1
440 ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)+ps(:,jjb:jje)
446 masse_cum(:,jjb:jje,l)=masse_cum(:,jjb:jje,l)+masse(:,jjb:jje,l)
447 flux_u_cum(:,jjb:jje,l)=flux_u_cum(:,jjb:jje,l)
448 . +flux_u(:,jjb:jje,l)
456 flux_v_cum(:,jjb:jje,l)=flux_v_cum(:,jjb:jje,l)
457 . +flux_v(:,jjb:jje,l)
467 q_cum(:,jjb:jje,l,iq)=q_cum(:,jjb:jje,l,iq)
468 . +q(:,jjb:jje,l,iq)*masse(:,jjb:jje,l)
484 flux_uq_cum(i,j,l,iq)=flux_uq_cum(i,j,l,iq)
485 s +flux_u(i,j,l)*0.5*(q(i,j,l,iq)+q(i+1,j,l,iq))
487 flux_uq_cum(iip1,j,l,iq)=flux_uq_cum(1,j,l,iq)
511 flux_vq_cum(i,j,l,iq)=flux_vq_cum(i,j,l,iq)
512 s +flux_v(i,j,l)*0.5*(q(i,j,l,iq)+q(i,j+1,l,iq))
564 ww=-0.5*w(i,j,l+1)*(q(i,j,l,iq)+q(i,j,l+1,iq))
565 dq(i,j,l ,iq)=dq(i,j,l ,iq)-ww
566 dq(i,j,l+1,iq)=dq(i,j,l+1,iq)+ww
573 ww=-0.5*w(i,j,l)*(q(i,j,l-1,iq)+q(i,j,l,iq))
574 dq(i,j,l,iq)=dq(i,j,l,iq)+ww
582 .
WRITE(
lunout,*)
'Apres les calculs fait a chaque pas'
586 if (icum.eq.ncum)
then
590 .
WRITE(
lunout,*)
'Pas d ecriture'
599 q_cum(:,jjb:jje,l,iq)=q_cum(:,jjb:jje,l,iq)
600 . /masse_cum(:,jjb:jje,l)
608 ps_cum(:,jjb:jje)=ps_cum(:,jjb:jje)*zz
613 masse_cum(:,jjb:jje,l)=masse_cum(:,jjb:jje,l)*zz
614 flux_u_cum(:,jjb:jje,l)=flux_u_cum(:,jjb:jje,l)*zz
615 flux_uq_cum(:,jjb:jje,l,:)=flux_uq_cum(:,jjb:jje,l,:)*zz
616 dq(:,jjb:jje,l,:)=dq(:,jjb:jje,l,:)*zz
624 flux_v_cum(:,jjb:jje,l)=flux_v_cum(:,jjb:jje,l)*zz
625 flux_vq_cum(:,jjb:jje,l,:)=flux_vq_cum(:,jjb:jje,l,:)*zz
638 dq(:,jjb:jje,l,iq)=dq(:,jjb:jje,l,iq)/masse_cum(:,jjb:jje,l)
679 zmasse(j,l)=zmasse(j,l)+masseby(i,j,l)
680 zv(j,l)=zv(j,l)+flux_v_cum(i,j,l)
682 zfactv(j,l)=
cv(1,j)/zmasse(j,l)
731 zvq(j,l,itot,iq)=zvq(j,l,itot,iq)
732 s +flux_vq_cum(i,j,l,iq)
733 zqy= 0.5*(q_cum(i,j,l,iq)*masse_cum(i,j,l)+
734 s q_cum(i,j+1,l,iq)*masse_cum(i,j+1,l))
735 zvqtmp(j,l)=zvqtmp(j,l)+flux_v_cum(i,j,l)*zqy
736 s /(0.5*(masse_cum(i,j,l)+masse_cum(i,j+1,l)))
737 zvq(j,l,iave,iq)=zvq(j,l,iave,iq)+zqy
741 zvq(j,l,iave,iq)=zvq(j,l,iave,iq)/zmasse(j,l)
742 zvq(j,l,itot,iq)=zvq(j,l,itot,iq)*zfactv(j,l)
743 zvqtmp(j,l)=zvqtmp(j,l)*zfactv(j,l)
744 zvq(j,l,immc,iq)=zv(j,l)*zvq(j,l,iave,iq)*zfactv(j,l)
745 zvq(j,l,itrs,iq)=zvq(j,l,itot,iq)-zvqtmp(j,l)
746 zvq(j,l,istn,iq)=zvqtmp(j,l)-zvq(j,l,immc,iq)
755 psiq(j,l,iq)=psiq(j,l+1,iq)+zvq(j,l,itot,iq)
768 psi(j,l)=psi(j,l+1)+zv(j,l)
769 zv(j,l)=zv(j,l)*zfactv(j,l)
778 if (i_sortie.eq.1)
then
786 call histwrite(fileid,znom(itr,iq),itau,
787 s zvq(jjb:jje,:,itr,iq)
790 call histwrite(fileid,
'psi'//nom(iq),
791 s itau,psiq(jjb:jje,1:
llm,iq)
795 call histwrite(fileid,
'masse',itau,zmasse(jjb:jje,1:
llm)
797 call histwrite(fileid,
'v',itau,zv(jjb:jje,1:
llm)
799 psi(jjb:jje,:)=psi(jjb:jje,:)*1.e-9
800 call histwrite(fileid,
'psi',itau,psi(jjb:jje,1:
llm),
812 zamasse(jjb:jje)=zamasse(jjb:jje)+zmasse(jjb:jje,l)
819 zavq(jjb:jje,itr,iq)=zavq(jjb:jje,itr,iq)
820 s +zvq(jjb:jje,l,itr,iq)
823 zavq(jjb:jje,itr,iq)=zavq(jjb:jje,itr,iq)/zamasse(jjb:jje)
824 call histwrite(fileid,
'a'//znom(itr,iq),itau,
825 s zavq(jjb:jje,itr,iq),jjn*
llm,ndex3d)
!$Id zjulian!correction pour l heure initiale!jyg!jyg CALL ymds2ju(annee_ref, 1, day_ref, hour, zjulian)!jyg CALL histbeg_phy("histrac"
subroutine bilan_dyn_loc(ntrac, dt_app, dt_cum, ps, masse, pk, flux_u, flux_v, teta, phi, ucov, vcov, trac)
!$Header!CDK comgeom COMMON comgeom constang
subroutine convmas_loc(pbaru, pbarv, convm)
!$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 vitvert_loc(convm, w)
!$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
!$Id mode_top_bound COMMON comconstr cpp
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
subroutine register_hallo_u(Field, ll, RUp, Rdown, SUp, SDown, a_request)
!$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)
subroutine convflu_loc(xflu, yflu, nbniv, convfl)
!$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 covcont_loc(klevel, ucov, vcov, ucont, vcont)
subroutine enercin_loc(vcov, ucov, vcont, ucont, ecin)
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 massbar_loc(masse, massebx, masseby)
subroutine register_hallo_v(Field, ll, RUp, Rdown, SUp, SDown, a_request)
subroutine waitrequest(a_Request)
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout