6 SUBROUTINE leapfrog(ucov,vcov,teta,ps,masse,phis,q,clesphy0,
51 #include "dimensions.h"
54 #include "comdissnew.h"
60 #include "description.h"
71 REAL clesphy0( longcles )
112 REAL tppn(
iim),tpps(
iim),tpn,tps
114 INTEGER itau,itaufinp1,iav
123 LOGICAL :: lafin=.
false.
127 real time_step, t_wrt, t_ops
132 REAL :: jd_cur, jh_cur
133 INTEGER :: an, mois, jour
136 LOGICAL first,callinigrads
142 integer zan, tau0, thoriid
146 real rlong(iip1), rlatg(
jjp1)
148 integer ndex2d(iip1*
jjp1)
153 data callinigrads/.true./
154 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.
214 if (pressure_exner)
then
229 & mod(itau,day_step)/float(day_step)
230 jd_cur = jd_cur + int(jh_cur)
231 jh_cur = jh_cur - int(jh_cur)
250 CALL
scopy( ijp1llm,ucov , 1, ucovm1 , 1 )
251 CALL
scopy( ijp1llm,
teta , 1, tetam1 , 1 )
252 CALL
scopy( ijp1llm,masse, 1, massem1, 1 )
285 IF( mod(itau,dissip_period ).EQ.0.AND..NOT.
forward )
287 IF( mod(itau,iphysiq ).EQ.0.AND..NOT.
forward
288 s .and. physic )
apphys = .true.
291 IF( mod(itau ,iconser) .EQ. 0 )
conser = .true.
292 IF( mod(itau+1,dissip_period).EQ.0 .AND. .NOT.
forward )
294 IF( mod(itau+1,iphysiq).EQ.0.AND.physic )
apphys=.true.
310 time = jd_cur + jh_cur
312 $ ( itau,ucov,vcov,
teta,ps,masse,pk,pkf,
phis ,
313 $ phi,
conser,du,dv,dteta,dp,w, pbaru,pbarv,
time )
324 * p, masse, dq,
teta,
346 CALL
integrd( 2,vcovm1,ucovm1,tetam1,psm1,massem1 ,
347 $ dv,du,dteta,dq,dp,vcov,ucov,
teta,
q,ps,masse,
phis )
361 IF( itau+1. eq.
itaufin ) lafin = .true.
371 if (pressure_exner)
then
386 IF (planet_type .eq.
"generic")
THEN
388 jd_cur = int(
day_ini + itau/day_step)
392 & mod(itau,day_step)/float(day_step)
393 jd_cur = jd_cur + int(jh_cur)
394 jh_cur = jh_cur - int(jh_cur)
409 IF (ip_ebil_dyn.ge.1 )
THEN
412 IF (planet_type.eq.
"earth")
THEN
415 & , ucov , vcov , ps, p ,pk ,
teta ,
q(:,:,1),
q(:,:,2))
432 CALL
calfis( lafin , jd_cur, jh_cur,
433 $ ucov,vcov,
teta,
q,masse,ps,p,pk,
phis,phi ,
436 $ clesphy0, dufi,dvfi,dtetafi,dqfi,dpfi )
445 $ ucov, vcov,
teta ,
q ,ps ,
446 $ dufi, dvfi, dtetafi , dqfi ,dpfi )
449 IF (ip_ebil_dyn.ge.1 )
THEN
451 IF (planet_type.eq.
"earth")
THEN
453 & , ucov , vcov , ps, p ,pk ,
teta ,
q(:,:,1),
q(:,:,2))
469 if (planet_type.eq.
"giant")
then
485 $ ucov, vcov,
teta ,
q ,ps ,
486 $ dufi, dvfi, dtetafi , dqfi ,dpfi )
494 if (pressure_exner)
then
509 call
covcont(llm,ucov,vcov,ucont,vcont)
510 call
enercin(vcov,ucov,vcont,ucont,ecin0)
513 CALL
dissip(vcov,ucov,
teta,p,dvdis,dudis,dtetadis)
520 if (dissip_conservative)
then
523 call
covcont(llm,ucov,vcov,ucont,vcont)
524 call
enercin(vcov,ucov,vcont,ucont,ecin)
525 dtetaecdt= (ecin0-ecin)/ pk
527 dtetadis=dtetadis+dtetaecdt
600 IF( itau. eq. itaufinp1 )
then
602 write(79,*)
'ucov',ucov
603 write(80,*)
'vcov',vcov
604 write(81,*)
'teta',
teta
607 WRITE(85,*)
'q1 = ',
q(:,:,1)
608 WRITE(86,*)
'q3 = ',
q(:,:,3)
611 abort_message =
'Simulation finished'
619 IF(mod(itau,iperiod).EQ.0 .OR. itau.EQ.
itaufin)
THEN
629 & ps,masse,pk,pbaru,pbarv,
teta,phi,ucov,vcov,
q)
645 IF( mod(itau,iecri).EQ.0)
THEN
652 vnat(:,
l)=vcov(:,
l)/
cv(:)
666 if (output_grads_dyn)
then
667 #include "write_grads_dyn.h"
678 & vcov,ucov,
teta,
q,masse,ps)
689 IF( mod(itau,iperiod).EQ.0 )
THEN
691 ELSE IF ( mod(itau-1,iperiod). eq. 0 )
THEN
734 IF( itau. eq. itaufinp1 )
then
735 abort_message =
'Simulation finished'
742 IF(mod(itau,iperiod).EQ.0 .OR. itau.EQ.
itaufin)
THEN
752 & ps,masse,pk,pbaru,pbarv,
teta,phi,ucov,vcov,
q)
764 IF(mod(itau,iecri ).EQ.0)
THEN
770 vnat(:,
l)=vcov(:,
l)/
cv(:)
780 if (output_grads_dyn)
then
781 #include "write_grads_dyn.h"
789 & vcov,ucov,
teta,
q,masse,ps)