11 & masse0,phis0,q0,clesphy0,
66 #include "dimensions.h"
69 #include "comdissnew.h"
75 #include "description.h"
84 REAL clesphy0( longcles )
89 REAL :: vcov0(ijb_v:ije_v,llm),ucov0(ijb_u:ije_u,llm)
90 REAL :: teta0(ijb_u:ije_u,llm)
91 REAL :: q0(ijb_u:ije_u,llm,nqtot)
92 REAL :: ps0(ijb_u:ije_u)
93 REAL :: masse0(ijb_u:ije_u,llm)
94 REAL :: phis0(ijb_u:ije_u)
121 REAL,
SAVE,
ALLOCATABLE :: dvfi(:,:),dufi(:,:)
122 REAL,
SAVE,
ALLOCATABLE :: dtetafi(:,:)
123 REAL,
SAVE,
ALLOCATABLE :: dpfi(:)
124 REAL,
DIMENSION(:,:,:),
ALLOCATABLE,
SAVE :: dqfi
129 REAL tppn(
iim),tpps(
iim),tpn,tps
131 INTEGER itau,itaufinp1,iav
144 real time_step, t_wrt, t_ops
148 REAL :: jd_cur, jh_cur
149 INTEGER :: an, mois, jour
153 LOGICAL first,callinigrads
155 data callinigrads/.true./
156 character*10 string10
169 REAL d_h_vcol, d_qt, d_qw, d_ql, d_ec
176 character*80 dynhist_file, dynhistave_file
177 character(len=*),
parameter :: modname=
"leapfrog_loc"
178 character*80 abort_message
181 logical,
PARAMETER :: dissip_conservative=.true.
186 logical ,
parameter :: flag_verif = .
false.
190 LOGICAL :: firstcaldyn
191 LOGICAL :: firstphysic
192 INTEGER :: ijb,ije,
j,
i
194 type(request) :: request_dissip
195 type(request) :: request_physic
199 INTEGER :: adjustcount
201 LOGICAL :: ok_start_timer=.
false.
202 LOGICAL,
SAVE :: firstcall=.true.
256 ALLOCATE(dvfi(ijb_v:ije_v,llm),dufi(ijb_u:ije_u,llm))
257 ALLOCATE(dtetafi(ijb_u:ije_u,llm))
258 ALLOCATE(dpfi(ijb_u:ije_u))
260 ALLOCATE(dqfi(ijb_u:ije_u,llm,nqtot))
285 if (pressure_exner)
then
300 & mod(itau,day_step)/float(day_step)
301 if (jh_cur > 1.0 )
then
329 if (firstcaldyn)
then
349 psm1(ijb:ije) = ps(ijb:ije)
355 ucovm1(ijb:ije,
l) = ucov(ijb:ije,
l)
356 tetam1(ijb:ije,
l) =
teta(ijb:ije,
l)
357 massem1(ijb:ije,
l) = masse(ijb:ije,
l)
360 if (pole_sud) ije=ij_end-iip1
361 vcovm1(ijb:ije,
l) = vcov(ijb:ije,
l)
390 if (mod(itcount,1)==1)
then
415 IF( mod(itau,dissip_period ).EQ.0.AND..NOT.
forward )
417 IF( mod(itau,iphysiq ).EQ.0.AND..NOT.
forward
418 s .and. physic )
apphys = .true.
421 IF( mod(itau ,iconser) .EQ. 0 )
conser = .true.
422 IF( mod(itau+1,dissip_period).EQ.0 .AND. .NOT.
forward )
424 IF( mod(itau+1,iphysiq).EQ.0.AND.physic)
apphys=.true.
438 if (firstcaldyn)
then
451 IF (ok_start_timer)
THEN
454 ok_start_timer=.true.
461 adjustcount=adjustcount+1
464 if (adjustcount>1)
then
471 print *,
'*********************************'
472 print *,
'****** TIMER CALDYN ******'
474 print *,
'proc',
i,
' : Nb Bandes :',jj_nb_caldyn(
i),
475 &
' : temps moyen :',
476 & timer_average(jj_nb_caldyn(
i),timer_caldyn,
i),
477 &
'+-',timer_delta(jj_nb_caldyn(
i),timer_caldyn,
i)
480 print *,
'*********************************'
481 print *,
'****** TIMER VANLEER ******'
483 print *,
'proc',
i,
' : Nb Bandes :',jj_nb_vanleer(
i),
484 &
' : temps moyen :',
485 & timer_average(jj_nb_vanleer(
i),timer_vanleer,
i),
486 &
'+-',timer_delta(jj_nb_vanleer(
i),timer_vanleer,
i)
489 print *,
'*********************************'
490 print *,
'****** TIMER DISSIP ******'
492 print *,
'proc',
i,
' : Nb Bandes :',jj_nb_dissip(
i),
493 &
' : temps moyen :',
494 & timer_average(jj_nb_dissip(
i),timer_dissip,
i),
495 &
'+-',timer_delta(jj_nb_dissip(
i),timer_dissip,
i)
510 distrib_caldyn=new_dist
563 distrib_dissip=new_dist
626 true_itau=true_itau+1
629 print *,
"---> itau=",itau,
" True_itau=",true_itau
634 WRITE(
lunout,*)
"leapfrog_p: Iteration No",true_itau
650 time = jd_cur + jh_cur
652 $ ( itau,ucov,vcov,
teta,ps,masse,pk,pkf,
phis ,
653 $ phi,
conser,du,dv,dteta,dp,w, pbaru,pbarv,
time )
682 * p, masse, dq,
teta,
701 if (true_itau>20)
then
715 CALL
integrd_loc( 2,vcovm1,ucovm1,tetam1,psm1,massem1 ,
716 $ dv,du,dteta,dq,dp,vcov,ucov,
teta,
q,ps,masse,
phis)
752 IF( itau+1. eq.
itaufin ) lafin = .true.
1082 if (firstphysic)
then
1083 ok_start_timer=.true.
1107 if (planet_type.eq.
"giant")
then
1110 & +
dtvr *
aire(ijb:ije) * ihf /
cpp / masse(ijb:ije,1)
1133 dtetafi(ijb:ije,
l)=0
1134 dqfi(ijb:ije,
l,1:nqtot)=0
1142 if (pole_sud) ije=ije-iip1
1151 $ ucov, vcov,
teta ,
q ,ps ,
1152 $ dufi, dvfi, dtetafi , dqfi ,dpfi )
1160 if (pressure_exner)
then
1414 IF (itau==itaumax)
then
1418 if (mpi_rank==0)
then
1420 print *,
'*********************************'
1421 print *,
'****** TIMER CALDYN ******'
1423 print *,
'proc',
i,
' : Nb Bandes :',jj_nb_caldyn(
i),
1424 &
' : temps moyen :',
1425 & timer_average(jj_nb_caldyn(
i),timer_caldyn,
i)
1428 print *,
'*********************************'
1429 print *,
'****** TIMER VANLEER ******'
1431 print *,
'proc',
i,
' : Nb Bandes :',jj_nb_vanleer(
i),
1432 &
' : temps moyen :',
1433 & timer_average(jj_nb_vanleer(
i),timer_vanleer,
i)
1436 print *,
'*********************************'
1437 print *,
'****** TIMER DISSIP ******'
1439 print *,
'proc',
i,
' : Nb Bandes :',jj_nb_dissip(
i),
1440 &
' : temps moyen :',
1441 & timer_average(jj_nb_dissip(
i),timer_dissip,
i)
1444 print *,
'*********************************'
1445 print *,
'****** TIMER PHYSIC ******'
1447 print *,
'proc',
i,
' : Nb Bandes :',jj_nb_physic(
i),
1448 &
' : temps moyen :',
1449 & timer_average(jj_nb_physic(
i),timer_physic,
i)
1454 print *,
'Taille du Buffer MPI (REAL*8)',maxbuffersize
1455 print *,
'Taille du Buffer MPI utilise (REAL*8)',maxbuffersize_used
1456 print *,
'Temps total ecoule sur la parallelisation :',
difftime()
1457 print *,
'Temps CPU ecoule sur la parallelisation :',
diffcputime()
1461 . vcov,ucov,
teta,
q,masse,ps)
1486 IF( itau. eq. itaufinp1 )
then
1488 if (flag_verif)
then
1489 write(79,*)
'ucov',ucov
1490 write(80,*)
'vcov',vcov
1491 write(81,*)
'teta',
teta
1494 WRITE(85,*)
'q1 = ',
q(:,:,1)
1495 WRITE(86,*)
'q3 = ',
q(:,:,3)
1503 abort_message =
'Simulation finished'
1511 IF(mod(itau,iperiod).EQ.0 .OR. itau.EQ.
itaufin)
THEN
1523 , ps,masse,pk,pbaru,pbarv,
teta,phi,ucov,vcov,
q)
1527 IF (ok_dyn_ave)
THEN
1538 IF( mod(itau,iecri).EQ.0)
THEN
1549 if (ok_dyn_ins)
then
1564 & vcov,ucov,
teta,
q,masse,ps)
1574 IF( mod(itau,iperiod).EQ.0 )
THEN
1576 ELSE IF ( mod(itau-1,iperiod). eq. 0 )
THEN
1620 IF( itau. eq. itaufinp1 )
then
1625 abort_message =
'Simulation finished'
1633 IF(mod(itau,iperiod).EQ.0 .OR. itau.EQ.
itaufin)
THEN
1643 , ps,masse,pk,pbaru,pbarv,
teta,phi,ucov,vcov,
q)
1646 IF (ok_dyn_ave)
THEN
1654 IF(mod(itau,iecri ).EQ.0)
THEN
1664 if (ok_dyn_ins)
then
1675 . vcov,ucov,
teta,
q,masse,ps)
1689 abort_message =
'Simulation finished'