89 #include "dimensions.h"
103 LOGICAL,
INTENT(IN) :: lafin
104 REAL,
INTENT(IN):: jD_cur, jH_cur
105 REAL,
INTENT(IN) :: pvcov(iip1,jjm,
llm)
106 REAL,
INTENT(IN) :: pucov(iip1,
jjp1,
llm)
107 REAL,
INTENT(IN) :: pteta(iip1,
jjp1,
llm)
108 REAL,
INTENT(IN) :: pmasse(iip1,
jjp1,
llm)
110 REAL,
INTENT(IN) :: pphis(iip1,
jjp1)
111 REAL,
INTENT(IN) :: pphi(iip1,
jjp1,
llm)
113 REAL,
INTENT(IN) :: pdvcov(iip1,jjm,
llm)
114 REAL,
INTENT(IN) :: pducov(iip1,
jjp1,
llm)
115 REAL,
INTENT(IN) :: pdteta(iip1,
jjp1,
llm)
120 REAL,
INTENT(IN) :: pps(iip1,
jjp1)
122 REAL,
INTENT(IN) :: ppk(iip1,
jjp1,
llm)
123 REAL,
INTENT(IN) :: flxw(iip1,
jjp1,
llm)
126 REAL,
INTENT(OUT) :: pdvfi(iip1,jjm,
llm)
127 REAL,
INTENT(OUT) :: pdufi(iip1,
jjp1,
llm)
128 REAL,
INTENT(OUT) :: pdhfi(iip1,
jjp1,
llm)
130 REAL,
INTENT(OUT) :: pdpsfi(iip1,
jjp1)
136 INTEGER i,j,l,ig0,ig,iq,iiq
138 REAL zplev(ngridmx,
llm+1),zplay(ngridmx,
llm)
139 REAL zphi(ngridmx,
llm),zphis(ngridmx)
141 REAL zrot(iip1,jjm,
llm)
142 REAL zufi(ngridmx,
llm), zvfi(ngridmx,
llm), zrfi(ngridmx,
llm)
145 REAL pcvgu(ngridmx,
llm), pcvgv(ngridmx,
llm)
146 REAL pcvgt(ngridmx,
llm), pcvgq(ngridmx,
llm,2)
148 REAL zdufi(ngridmx,
llm),zdvfi(ngridmx,
llm)
152 REAL zdufic(ngridmx,
llm),zdvfic(ngridmx,
llm)
154 REAL jH_cur_split,zdt_split
155 LOGICAL debut_split,lafin_split
159 REAL zsinbis(
iim),zcosbis(
iim),z1bis(
iim)
162 REAL flxwfi(ngridmx,
llm)
167 LOGICAL,
SAVE :: firstcal=.
true., debut=.
true.
181 IF (ngridmx.NE.2+(jjm-1)*
iim)
THEN
182 write(
lunout,*)
'STOP dans calfis'
184 &
'La dimension ngridmx doit etre egale a 2 + (jjm-1)*iim'
185 write(
lunout,*)
' ngridmx jjm iim '
207 CALL scopy(
iim,pps(1,j),1,zpsrf(ig0), 1 )
211 zpsrf(ngridmx) = pps(1,
jjp1)
226 zplev( 1,l ) = pp(1,1,l)
230 zplev( ig0,l ) = pp(i,j,l)
234 zplev( ngridmx,l ) = pp(1,
jjp1,l)
244 pksurcp = ppk(1,1,l) /
cpp
245 zplay(1,l) =
preff * pksurcp ** unskap
246 ztfi(1,l) = pteta(1,1,l) * pksurcp
247 pcvgt(1,l) = pdteta(1,1,l) * pksurcp / pmasse(1,1,l)
252 pksurcp = ppk(i,j,l) /
cpp
253 zplay(ig0,l) =
preff * pksurcp ** unskap
254 ztfi(ig0,l) = pteta(i,j,l) * pksurcp
255 pcvgt(ig0,l) = pdteta(i,j,l) * pksurcp / pmasse(i,j,l)
261 zplay(ig0,l) =
preff * pksurcp ** unskap
262 ztfi(ig0,l) = pteta(1,
jjp1,l) * pksurcp
263 pcvgt(ig0,l) = pdteta(1,
jjp1,l) * pksurcp/ pmasse(1,
jjp1,l)
273 zqfi(1,l,iq) = pq(1,1,l,iiq)
277 zqfi(ig0,l,iq) = pq(i,j,l,iiq)
281 zqfi(ig0,l,iq) = pq(1,
jjp1,l,iiq)
290 pcvgq(1,l,iq)= pdq(1,1,l,iq) / pmasse(1,1,l)
294 pcvgq(ig0,l,iq) = pdq(i,j,l,iq) / pmasse(i,j,l)
298 pcvgq(ig0,l,iq)= pdq(1,
jjp1,l,iq) / pmasse(1,
jjp1,l)
311 zphi(ig,l)=zphi(ig,l)-zphis(ig)
339 $ ( pucov(
iim,j,l)/
cu(
iim,j) + pucov(1,j,l)/
cu(1,j) )
340 pcvgu(ig0+1,l)= 0.5 *
341 $ ( pducov(
iim,j,l)/
cu(
iim,j) + pducov(1,j,l)/
cu(1,j) )
344 $ ( pucov(i-1,j,l)/
cu(i-1,j) + pucov(i,j,l)/
cu(i,j) )
345 pcvgu(ig0+i,l)= 0.5 *
346 $ ( pducov(i-1,j,l)/
cu(i-1,j) + pducov(i,j,l)/
cu(i,j) )
359 zrot(i,j,l) = (pvcov(i+1,j,l) - pvcov(i,j,l)
360 $ + pucov(i,j+1,l) - pucov(i,j,l))
361 $ / (
cu(i,j)+
cu(i,j+1))
362 $ / (
cv(i+1,j)+
cv(i,j)) *4
375 $ ( pvcov(i,j-1,l)/
cv(i,j-1) + pvcov(i,j,l)/
cv(i,j) )
376 pcvgv(ig0+i,l)= 0.5 *
377 $ ( pdvcov(i,j-1,l)/
cv(i,j-1) + pdvcov(i,j,l)/
cv(i,j) )
379 zrfi(ig0 + 1,l)= 0.25 *(zrot(
iim,j-1,l)+zrot(
iim,j,l)
380 & +zrot(1,j-1,l)+zrot(1,j,l))
382 zrfi(ig0 + i,l)= 0.25 *(zrot(i-1,j-1,l)+zrot(i-1,j,l)
383 $ +zrot(i,j-1,l)+zrot(i,j,l))
404 zcos(i) = cos(
rlonv(i))*z1(i)
405 zcosbis(i)= cos(
rlonv(i))*z1bis(i)
406 zsin(i) = sin(
rlonv(i))*z1(i)
407 zsinbis(i)= sin(
rlonv(i))*z1bis(i)
410 zufi(1,l) = ssum(
iim,zcos,1)/
pi
411 pcvgu(1,l) = ssum(
iim,zcosbis,1)/
pi
412 zvfi(1,l) = ssum(
iim,zsin,1)/
pi
413 pcvgv(1,l) = ssum(
iim,zsinbis,1)/
pi
429 z1bis(i)=(
rlonu(i)-
rlonu(i-1))*pdvcov(i,jjm,l)/
cv(i,jjm)
433 zcos(i) = cos(
rlonv(i))*z1(i)
434 zcosbis(i) = cos(
rlonv(i))*z1bis(i)
435 zsin(i) = sin(
rlonv(i))*z1(i)
436 zsinbis(i) = sin(
rlonv(i))*z1bis(i)
439 zufi(ngridmx,l) = ssum(
iim,zcos,1)/
pi
440 pcvgu(ngridmx,l) = ssum(
iim,zcosbis,1)/
pi
441 zvfi(ngridmx,l) = ssum(
iim,zsin,1)/
pi
442 pcvgv(ngridmx,l) = ssum(
iim,zsinbis,1)/
pi
443 zrfi(ngridmx, l) = 0.
467 debut_split=debut.and.isplit==1
524 zufi(:,:)=zufi(:,:)+zdufi(:,:)*zdt_split
525 zvfi(:,:)=zvfi(:,:)+zdvfi(:,:)*zdt_split
526 ztfi(:,:)=ztfi(:,:)+zdtfi(:,:)*zdt_split
527 zqfi(:,:,:)=zqfi(:,:,:)+zdqfi(:,:,:)*zdt_split
529 zdufic(:,:)=zdufic(:,:)+zdufi(:,:)
530 zdvfic(:,:)=zdvfic(:,:)+zdvfi(:,:)
531 zdtfic(:,:)=zdtfic(:,:)+zdtfi(:,:)
532 zdqfic(:,:,:)=zdqfic(:,:,:)+zdqfi(:,:,:)
562 pdhfi(i,1,l) =
cpp * zdtfi(1,l) / ppk(i, 1 ,l)
563 pdhfi(i,
jjp1,l) =
cpp * zdtfi(ngridmx,l)/ ppk(i,
jjp1,l)
569 pdhfi(i,j,l) =
cpp * zdtfi(ig0+i,l) / ppk(i,j,l)
571 pdhfi(iip1,j,l) = pdhfi(1,j,l)
605 pdqfi(i,1,l,iiq) = zdqfi(1,l,iq)
606 pdqfi(i,
jjp1,l,iiq) = zdqfi(ngridmx,l,iq)
611 pdqfi(i,j,l,iiq) = zdqfi(ig0+i,l,iq)
613 pdqfi(iip1,j,l,iiq) = pdqfi(1,j,l,iq)
632 $ 0.5*(zdufi(ig0+i,l)+zdufi(ig0+i+1,l))*
cu(i,j)
635 $ 0.5*(zdufi(ig0+1,l)+zdufi(ig0+
iim,l))*
cu(
iim,j)
636 pdufi(iip1,j,l)=pdufi(1,j,l)
651 $ 0.5*(zdvfi(ig0+i,l)+zdvfi(ig0+i+
iim,l))*
cv(i,j)
653 pdvfi(iip1,j,l) = pdvfi(1,j,l)
666 $ zdufi(1,l)*cos(
rlonv(i))+zdvfi(1,l)*sin(
rlonv(i))
667 pdvfi(i,jjm,l)=zdufi(ngridmx,l)*cos(
rlonv(i))
668 $ +zdvfi(ngridmx,l)*sin(
rlonv(i))
670 $ 0.5*(pdvfi(i,1,l)+zdvfi(i+1,l))*
cv(i,1)
672 $ 0.5*(pdvfi(i,jjm,l)+zdvfi(ngridmx-iip1+i,l))*
cv(i,jjm)
675 pdvfi(iip1,1,l) = pdvfi(1,1,l)
676 pdvfi(iip1,jjm,l)= pdvfi(1,jjm,l)
subroutine calfis(lafin, jD_cur, jH_cur, pucov, pvcov, pteta, pq, pmasse, pps, pp, ppk, pphis, pphi, pducov, pdvcov, pdteta, pdq, flxw, pdufi, pdvfi, pdhfi, pdqfi, pdpsfi)
!$Id mode_top_bound COMMON comconstr kappa
character(len=10), save planet_type
!$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 scopy(n, sx, incx, sy, incy)
!$Id mode_top_bound COMMON comconstr dtphys
!$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
subroutine physiq(nlon, nlev, debut, lafin, jD_cur, jH_cur, pdtphys, paprs, pplay, pphi, pphis, presnivs, u, v, rot, t, qx, flxmass_w, d_u, d_v, d_t, d_qx, d_ps, dudyn)
!$Id mode_top_bound COMMON comconstr cpp
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$Id mode_top_bound COMMON comconstr daysec
!$Header!CDK comgeom COMMON comgeom rlonu
character(len=20), dimension(:), allocatable, save tname
!$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
subroutine gr_dyn_fi(nfield, im, jm, ngrid, pdyn, pfi)
!$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
integer, dimension(:), allocatable, save niadv
!$Id mode_top_bound COMMON comconstr dtvr
integer, save nsplit_phys
c c zjulian c cym CALL iim cym klev iim
!$Header!CDK comgeom COMMON comgeom cv
subroutine gr_fi_dyn(nfield, ngrid, im, jm, pfi, pdyn)
INTERFACE SUBROUTINE RRTM_ECRT_140GP && pq
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout
!$Header!CDK comgeom COMMON comgeom rlonv