6 SUBROUTINE leapfrog(ucov,vcov,teta,ps,masse,phis,q,time_0)
17 & iconser, iphysiq, iperiod, dissip_period,
18 & iecri, ip_ebil_dyn, ok_dynzon, ok_dyn_ins,
19 & periodav, ok_dyn_ave, output_grads_dyn
56 #include "dimensions.h"
59 #include "comdissnew.h"
65 #include "description.h"
71 REAL,
INTENT(IN) :: time_0
75 REAL,
INTENT(INOUT) :: vcov(
ip1jm,
llm)
77 REAL,
INTENT(INOUT) :: ps(
ip1jmp1)
79 REAL,
INTENT(INOUT) :: phis(
ip1jmp1)
114 REAL tppn(
iim),tpps(
iim),tpn,tps
116 INTEGER itau,itaufinp1,iav
124 LOGICAL :: lafin=.
false.
128 real time_step, t_wrt, t_ops
133 REAL :: jD_cur, jH_cur
134 INTEGER :: an, mois, jour
137 LOGICAL first,callinigrads
143 integer zan, tau0, thoriid
147 real rlong(iip1), rlatg(
jjp1)
148 real zx_tmp_2d(iip1,
jjp1)
149 integer ndex2d(iip1*
jjp1)
154 data callinigrads/.
true./
155 character*10 string10
167 REAL d_h_vcol, d_qt, d_qw, d_ql, d_ec
174 character*80 dynhist_file, dynhistave_file
175 character(len=*),
parameter :: modname=
"leapfrog"
176 character*80 abort_message
178 logical dissip_conservative
179 save dissip_conservative
180 data dissip_conservative/.
true./
188 logical ,
parameter :: flag_verif = .
false.
218 if (pressure_exner)
then
237 jd_cur = jd_cur + int(jh_cur)
238 jh_cur = jh_cur - int(jh_cur)
246 call guide_main(itau,ucov,vcov,teta,q,masse,ps)
260 CALL scopy( ijp1llm,ucov , 1, ucovm1 , 1 )
261 CALL scopy( ijp1llm,teta , 1, tetam1 , 1 )
262 CALL scopy( ijp1llm,masse, 1, massem1, 1 )
290 jd_cur = jd_cur + int(jh_cur)
291 jh_cur = jh_cur - int(jh_cur)
308 IF( mod(itau,dissip_period ).EQ.0.AND..NOT.
forward )
310 IF( mod(itau,iphysiq ).EQ.0.AND..NOT.
forward
314 IF( mod(itau ,iconser) .EQ. 0 )
conser = .
true.
315 IF( mod(itau+1,dissip_period).EQ.0 .AND. .NOT.
forward )
317 IF( mod(itau+1,iphysiq).EQ.0.AND.physic )
apphys=.
true.
338 time = jd_cur + jh_cur
340 $ ( itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
341 $ phi,
conser,du,dv,dteta,dp,w, pbaru,pbarv, time )
350 &
'leapfrog 686: avant caladvtrac')
356 * p, masse, dq, teta,
380 write(*,*)
'leapfrog 720'
384 CALL integrd (
nqtot,vcovm1,ucovm1,tetam1,psm1,massem1 ,
385 $ dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis )
389 write(*,*)
'leapfrog 724'
413 if (pressure_exner)
then
439 jd_cur = jd_cur + int(jh_cur)
440 jh_cur = jh_cur - int(jh_cur)
455 IF (ip_ebil_dyn.ge.1 )
THEN
460 & , ucov , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2))
477 CALL calfis( lafin , jd_cur, jh_cur,
478 $ ucov,vcov,teta,q,masse,ps,p,pk,phis,phi ,
480 $ flxw,dufi,dvfi,dtetafi,dqfi,dpfi )
485 $ ucov, vcov, teta , q ,ps ,
486 $ dufi, dvfi, dtetafi , dqfi ,dpfi )
490 if (pressure_exner)
then
502 IF (ip_ebil_dyn.ge.1 )
THEN
506 & , ucov , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2))
517 teta(ij,l)=teta(ij,l)-
dtvr*
524 teta(:,1)=teta(:,1)+
dtvr*
aire(:)*ihf/
cpp/masse(:,1)
548 if (pressure_exner)
then
568 call enercin(vcov,ucov,vcont,ucont,ecin0)
571 CALL dissip(vcov,ucov,teta,p,dvdis,dudis,dtetadis)
578 if (dissip_conservative)
then
582 call enercin(vcov,ucov,vcont,ucont,ecin)
583 dtetaecdt= (ecin0-ecin)/ pk
585 dtetadis=dtetadis+dtetaecdt
597 tppn(ij) =
aire( ij ) * teta( ij ,l)
605 teta(ij+
ip1jm,l) = tps
614 tppn(ij) =
aire( ij ) * ps( ij )
662 IF( itau. eq. itaufinp1 )
then
664 write(79,*)
'ucov',ucov
665 write(80,*)
'vcov',vcov
666 write(81,*)
'teta',teta
669 WRITE(85,*)
'q1 = ',q(:,:,1)
670 WRITE(86,*)
'q3 = ',q(:,:,3)
673 abort_message =
'Simulation finished'
681 IF(mod(itau,iperiod).EQ.0 .OR. itau.EQ.
itaufin)
THEN
691 & ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q)
697 & ucov,teta,pk,phi,q,masse,ps,phis)
711 IF( mod(itau,iecri).EQ.0)
THEN
718 vnat(:,l)=vcov(:,l)/
cv(:)
723 CALL writehist(itau,vcov,ucov,teta,phi,q,masse,ps,phis)
732 if (output_grads_dyn)
then
733 #include "write_grads_dyn.h"
744 & vcov,ucov,teta,q,masse,ps)
755 IF( mod(itau,iperiod).EQ.0 )
THEN
757 ELSE IF ( mod(itau-1,iperiod). eq. 0 )
THEN
804 IF( itau. eq. itaufinp1 )
then
805 abort_message =
'Simulation finished'
816 IF(mod(itau,iperiod).EQ.0 .OR. itau.EQ.
itaufin)
THEN
826 & ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q)
832 & ucov,teta,pk,phi,q,masse,ps,phis)
838 IF(mod(itau,iecri ).EQ.0)
THEN
844 vnat(:,l)=vcov(:,l)/
cv(:)
850 CALL writehist(itau,vcov,ucov,teta,phi,q,masse,ps,phis)
854 if (output_grads_dyn)
then
855 #include "write_grads_dyn.h"
863 & vcov,ucov,teta,q,masse,ps)
subroutine fluxstokenc(pbaru, pbarv, masse, teta, phi, phis, time_step, itau)
subroutine diagedyn(tit, iprt, idiag, idiag2, dtime, ucov, vcov, ps, p, pk, teta, q, ql)
!$Header llmm1 INTEGER ip1jmp1
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)
!$Header!CDK comgeom COMMON comgeom apols
subroutine covcont(klevel, ucov, vcov, ucont, vcont)
subroutine integrd(nq, vcovm1, ucovm1, tetam1, psm1, massem1, dv, du, dteta, dq, dp, vcov, ucov, teta, q, ps, masse, phis)
subroutine guide_main(itau, ucov, vcov, teta, q, masse, ps)
subroutine exner_hyb(ngrid, ps, p, pks, pk, pkf)
logical, save ok_iso_verif
subroutine caldyn(itau, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, conser, du, dv, dteta, dp, w, pbaru, pbarv, time)
subroutine addfi(pdt, leapf, forward, pucov, pvcov, pteta, pq, pps, pdufi, pdvfi, pdhfi, pdqfi, pdpfi)
!$Id calend INTEGER itaufin INTEGER itau_phy INTEGER day_ref REAL dt
subroutine exner_milieu(ngrid, ps, p, pks, pk, pkf)
character(len=10), save planet_type
subroutine abort_gcm(modname, message, ierr)
!$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 ysinus ok_gradsfile hybrid COMMON logici iflag_phys
subroutine geopot(ngrid, teta, pk, pks, phis, phi)
subroutine scopy(n, sx, incx, sy, incy)
subroutine writehist(time, vcov, ucov, teta, phi, q, masse, ps, phis)
!$Header llmm1 INTEGER ip1jm
subroutine pression(ngrid, ap, bp, ps, p)
subroutine dynredem1(fichnom, time, vcov, ucov, teta, q, masse, ps)
!$Id mode_top_bound COMMON comconstr dtphys
!$Header!CDK comgeom COMMON comgeom apoln
!$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
!$Header llmm1 INTEGER ijp1llm INTEGER ijmllm
subroutine dissip(vcov, ucov, teta, p, dv, du, dh)
subroutine caladvtrac(q, pbaru, pbarv, p, masse, dq, teta, flxw, pk)
!$Id mode_top_bound COMMON comconstr cpp
subroutine writedynav(time, vcov, ucov, teta, ppk, phi, q, masse, ps, phis)
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$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
!$Id ysinus ok_gradsfile hybrid COMMON logici iflag_trac LOGICAL purmats
!$Id mode_top_bound COMMON comconstr dtvr
subroutine check_isotopes_seq(q, ip1jmp1, err_msg)
subroutine leapfrog(ucov, vcov, teta, ps, masse, phis, q, time_0)
c c zjulian c cym CALL iim cym klev iim
subroutine friction(ucov, vcov, pdt)
subroutine massdair(p, masse)
!$Header!CDK comgeom COMMON comgeom cv
subroutine enercin(vcov, ucov, vcont, ucont, ecin)
subroutine top_bound(vcov, ucov, teta, masse, dt)
subroutine bilan_dyn(ntrac, dt_app, dt_cum, ps, masse, pk, flux_u, flux_v, teta, phi, ucov, vcov, trac)