4 subroutine interpre(q,qppm,w,fluxwppm,masse,
5 s apppm,bpppm,massebx,masseby,pbaru,pbarv,
6 s unatppm,vnatppm,psppm)
12 #include "dimensions.h"
16 #include "comdissip.h"
22 #include "description.h"
24 c---------------------------------------------------
26 real apppm(
llm+1),bpppm(
llm+1)
28 c---------------------------------------------------
30 real massebx(iip1,
jjp1,
llm),masseby(iip1,jjm,
llm)
34 real pbarv(iip1,jjm,
llm)
38 c---------------------------------------------------
44 c----------------------------------------------------
48 c les coefficients ap et
bp sont passé en common
c Calcul de la pression au sol en mb optimisée pour
c la vectorialisation
do j=1,jjp1
do i=1,iip1
smass(i,j)=0.
enddo
enddo
do l=1,llm
do j=1,jjp1
do i=1,iip1
smass(i,j)=smass(i,j)+masse(i,j,l)
enddo
enddo
enddo
do j=1,jjp1
do i=1,iim
psppm(i,j)=smass(i,j)/aire(i,j)*g*0.01
end do
end do
c RECONSTRUCTION DES CHAMPS CONTRAVARIANTS
c Le programme ppm3d travaille avec les composantes
c de vitesse et pas les flux, on doit donc passer de l'un à l'autre
c Dans le même temps, on fait le changement d'orientation du vent en v
do l=1,llm
do j=1,jjm
do i=1,iip1
vnat(i,j,l)=-pbarv(i,j,l)/masseby(i,j,l)*cv(i,j)
enddo
enddo
do i=1,iim
vnat(i,jjp1,l)=0.
enddo
do j=1,jjp1
do i=1,iip1
unat(i,j,l)=pbaru(i,j,l)/massebx(i,j,l)*cu(i,j)
enddo
enddo
enddo
c CALCUL DU FLUX MASSIQUE VERTICAL
c Flux en l=1 (sol) nul
fluxw=0.
do l=1,llm
do j=1,jjp1
do i=1,iip1
fluxw(i,j,l)=w(i,j,l)*g*0.01/aire(i,j)
C print*,i,j,l,'fluxw(i,j,l)=',fluxw(i,j,l),
C c 'w(i,j,l)=',w(i,j,l)
enddo
enddo
enddo
c INVERSION DES NIVEAUX
c le programme ppm3d travaille avec une 3ème coordonnée inversée par rapport
c de celle du LMDZ: z=1<=>niveau max, z=llm+1<=>surface
c On passe donc des niveaux du LMDZ à ceux de Lin
do l=1,llm+1
apppm(l)=ap(llm+2-l)
bpppm(l)=bp(llm+2-l)
enddo
do l=1,llm
do j=1,jjp1
do i=1,iim
unatppm(i,j,l)=unat(i,j,llm-l+1)
vnatppm(i,j,l)=vnat(i,j,llm-l+1)
fluxwppm(i,j,l)=fluxw(i,j,llm-l+1)
qppm(i,j,l)=q(i,j,llm-l+1)
enddo
enddo
enddo
return
end
s en
common
49 c calcul
de la
pression au
sol en mb optimisé pour
c la vectorialisation
do j=1,jjp1
do i=1,iip1
smass(i,j)=0.
enddo
enddo
do l=1,llm
do j=1,jjp1
do i=1,iip1
smass(i,j)=smass(i,j)+masse(i,j,l)
enddo
enddo
enddo
do j=1,jjp1
do i=1,iim
psppm(i,j)=smass(i,j)/aire(i,j)*g*0.01
end do
end do
c RECONSTRUCTION DES CHAMPS CONTRAVARIANTS
c Le programme ppm3d travaille avec les composantes
c de vitesse et pas les flux, on doit donc passer de l'un à l'autre
c Dans le même temps, on fait le changement d'orientation du vent en v
do l=1,llm
do j=1,jjm
do i=1,iip1
vnat(i,j,l)=-pbarv(i,j,l)/masseby(i,j,l)*cv(i,j)
enddo
enddo
do i=1,iim
vnat(i,jjp1,l)=0.
enddo
do j=1,jjp1
do i=1,iip1
unat(i,j,l)=pbaru(i,j,l)/massebx(i,j,l)*cu(i,j)
enddo
enddo
enddo
c CALCUL DU FLUX MASSIQUE VERTICAL
c Flux en l=1 (sol) nul
fluxw=0.
do l=1,llm
do j=1,jjp1
do i=1,iip1
fluxw(i,j,l)=w(i,j,l)*g*0.01/aire(i,j)
C print*,i,j,l,'fluxw(i,j,l)=',fluxw(i,j,l),
C c 'w(i,j,l)=',w(i,j,l)
enddo
enddo
enddo
c INVERSION DES NIVEAUX
c le programme ppm3d travaille avec une 3ème coordonnée inversée par rapport
c de celle du LMDZ: z=1<=>niveau max, z=llm+1<=>surface
c On passe donc des niveaux du LMDZ à ceux de Lin
do l=1,llm+1
apppm(l)=ap(llm+2-l)
bpppm(l)=bp(llm+2-l)
enddo
do l=1,llm
do j=1,jjp1
do i=1,iim
unatppm(i,j,l)=unat(i,j,llm-l+1)
vnatppm(i,j,l)=vnat(i,j,llm-l+1)
fluxwppm(i,j,l)=fluxw(i,j,llm-l+1)
qppm(i,j,l)=q(i,j,llm-l+1)
enddo
enddo
enddo
return
end
e pour
61 smass(
i,
j)=smass(
i,
j)+masse(
i,
j,
l)
72 c reconstruction des champs contravariants
73 c le programme
ppm3d travaille avec les composantes
74 c
de vitesse et pas les flux, on doit donc passer
de l'un à l'autre
75 c dans le mê e temps, on fait le changement d'orientation du vent en v
do l=1,llm
do j=1,jjm
do i=1,iip1
vnat(i,j,l)=-pbarv(i,j,l)/masseby(i,j,l)*cv(i,j)
enddo
enddo
do i=1,iim
vnat(i,jjp1,l)=0.
enddo
do j=1,jjp1
do i=1,iip1
unat(i,j,l)=pbaru(i,j,l)/massebx(i,j,l)*cu(i,j)
enddo
enddo
enddo
c CALCUL DU FLUX MASSIQUE VERTICAL
c Flux en l=1 (sol) nul
fluxw=0.
do l=1,llm
do j=1,jjp1
do i=1,iip1
fluxw(i,j,l)=w(i,j,l)*g*0.01/aire(i,j)
C print*,i,j,l,'fluxw(i,j,l)=',fluxw(i,j,l),
C c 'w(i,j,l)=',w(i,j,l)
enddo
enddo
enddo
c INVERSION DES NIVEAUX
c le programme ppm3d travaille avec une 3ème coordonnée inversée par rapport
c de celle du LMDZ: z=1<=>niveau max, z=llm+1<=>surface
c On passe donc des niveaux du LMDZ à ceux de Lin
do l=1,llm+1
apppm(l)=ap(llm+2-l)
bpppm(l)=bp(llm+2-l)
enddo
do l=1,llm
do j=1,jjp1
do i=1,iim
unatppm(i,j,l)=unat(i,j,llm-l+1)
vnatppm(i,j,l)=vnat(i,j,llm-l+1)
fluxwppm(i,j,l)=fluxw(i,j,llm-l+1)
qppm(i,j,l)=q(i,j,llm-l+1)
enddo
enddo
enddo
return
end
me temps, on fait le changement d
'orientation du vent en v
79 vnat(i,j,l)=-pbarv(i,j,l)/masseby(i,j,l)*cv(i,j)
87 unat(i,j,l)=pbaru(i,j,l)/massebx(i,j,l)*cu(i,j)
92 c CALCUL DU FLUX MASSIQUE VERTICAL
93 c Flux en l=1 (sol) nul
98 fluxw(i,j,l)=w(i,j,l)*g*0.01/aire(i,j)
99 C print*,i,j,l,'fluxw(
i,
j,
l)=
',fluxw(i,j,l),
100 C c 'w(
i,
j,
l)=
',w(i,j,l)
105 c INVERSION DES NIVEAUX
106 c le programme ppm3d travaille avec une 3ème coordonnée inversée par rapport
107 c de celle du LMDZ: z=1<=>niveau max, z=llm+1<=>surface
108 c On passe donc des niveaux du LMDZ à ceux de Lin
118 unatppm(i,j,l)=unat(i,j,llm-l+1)
119 vnatppm(i,j,l)=vnat(i,j,llm-l+1)
120 fluxwppm(i,j,l)=fluxw(i,j,llm-l+1)
121 qppm(i,j,l)=q(i,j,llm-l+1)
!$Id mode_top_bound COMMON comconstr g
c c $Id c c calculs statistiques distribution nuage ftion du regime dynamique c c Ce calcul doit etre fait a partir de valeurs mensuelles CALL nbregdyn DO kmaxm1 DO l
!$Id ok_orolf LOGICAL ok_limitvrai LOGICAL ok_all_xml INTEGER iflag_ener_conserv REAL solaire RCFC12 RCFC12_act CFC12_ppt!IM ajout CFMIP2 CMIP5 LOGICAL ok_4xCO2atm RCFC12_per CFC12_ppt_per!OM correction du bilan d eau global!OM Correction sur precip KE REAL cvl_corr!OM Fonte calotte dans bilan eau LOGICAL ok_lic_melt!IM simulateur ISCCP INTEGER overlap!IM seuils cdrh REAL cdhmax!IM param stabilite s terres et en dehors REAL f_ri_cd_min!IM MAFo pmagic evap0!Frottement au sol(Cdrag) Real f_cdrag_ter
!$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
!$Header!CDK comgeom COMMON comgeom aire
!$Id klon initialisation mois suivants day_rain itap ENDIF!Calcul fin de nday_rain calcul nday_rain itap DO i
subroutine pression(ngrid, ap, bp, ps, p)
!$Id klon klev DO klon!IM klev DO klon klon nbp_lat DO nbp_lon ij
!$Id Turb_fcg!implicit none!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc!cette routine permet d obtenir hq et ainsi de!pouvoir calculer la convergence et le cisaillement dans la physiq!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc INTEGER klev REAL j
subroutine ppm3d(IGD, Q, PS1, PS2, U, V, W, NDT, IORD, JORD, KORD, NC, IMR, JNP, j1, NLAY, AP, BP, PT, AE, fill, dum, Umax)
c c zjulian c cym CALL iim cym klev iim