source: LMDZ6/branches/Portage_acc/libf/dyn3d/replay3d.F90 @ 4743

Last change on this file since 4743 was 4743, checked in by Laurent Fairhead, 7 months ago

Merge of ACC branch with 4740 revision from trunk

File size: 5.5 KB
Line 
1!
2! $Id: gcm.F90 3579 2019-10-09 13:11:07Z fairhead $
3!
4!
5!
6PROGRAM replay3d
7
8
9
10USE comvert_mod, only :  preff, pa
11USE inigeomphy_mod, ONLY: inigeomphy
12
13
14  USE control_mod
15  USE temps_mod, ONLY: calend,start_time,annee_ref,day_ref, &
16                     itau_dyn,itau_phy,day_ini,jD_ref,jH_ref,day_end
17  USE comconst_mod, ONLY: cpp, daysec, dtphys, dtvr, g, r, rad
18  USE logic_mod, ONLY: ecripar, iflag_phys, read_start
19
20  USE serre_mod, ONLY : clon,clat,transx,transy,alphax,alphay,pxo,pyo,              &
21        grossismx, grossismy, dzoomx, dzoomy,taux,tauy
22  USE mod_const_mpi, ONLY: comm_lmdz
23#ifdef _OPENACC
24    USE openacc
25#endif
26
27
28!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29  ! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique
30  ! A nettoyer. On ne veut qu'une ou deux routines d'interface
31  ! dynamique -> physique pour l'initialisation
32#ifdef CPP_PHYS
33  USE iniphysiq_mod, ONLY: iniphysiq
34#endif
35!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
36
37  IMPLICIT NONE
38
39  !      ......   Version  du 10/01/98    ..........
40
41  !             avec  coordonnees  verticales hybrides
42  !   avec nouveaux operat. dissipation * ( gradiv2,divgrad2,nxgraro2 )
43
44  !=======================================================================
45  !
46  !   Auteur:  P. Le Van /L. Fairhead/F.Hourdin
47  !   -------
48  !
49  !   Objet:
50  !   ------
51  !
52  !   GCM LMD nouvelle grille
53  !
54  !=======================================================================
55  !
56  !  ... Dans inigeom , nouveaux calculs pour les elongations  cu , cv
57  !      et possibilite d'appeler une fonction f(y)  a derivee tangente
58  !      hyperbolique a la  place de la fonction a derivee sinusoidale.
59  !  ... Possibilite de choisir le schema pour l'advection de
60  !        q  , en modifiant iadv dans traceur.def  (MAF,10/02) .
61  !
62  !      Pour Van-Leer + Vapeur d'eau saturee, iadv(1)=4. (F.Codron,10/99)
63  !      Pour Van-Leer iadv=10
64  !
65  !-----------------------------------------------------------------------
66  !   Declarations:
67  !   -------------
68
69  include "dimensions.h"
70  include "paramet.h"
71  include "comdissnew.h"
72  include "comgeom2.h"
73
74  REAL zdtvr
75
76
77  ! variables dynamiques intermediaire pour le transport
78
79  !   variables pour le fichier histoire
80  REAL dtav      ! intervalle de temps elementaire
81
82  REAL time_0
83
84  LOGICAL lafin
85
86  integer :: ntime=10000,it,klon,klev
87
88
89  ! locales pour gestion du temps
90  INTEGER :: an, mois, jour
91  REAL :: heure
92  REAL(kind=8) :: elapsed_time, mean_elapsed=0.  ! real time in seconds
93
94
95  !   Initialisations:
96  !   ----------------
97#ifdef _OPENACC
98    INTEGER :: numdev
99
100    !$acc init
101
102    ! get the number of NVIDIA devices on this node
103    numdev = acc_get_num_devices(ACC_DEVICE_NVIDIA)
104    PRINT *, 'init_physics : number of available GPU devices', numdev
105    IF (numdev < 1) STOP "Error: there are no devices available on this host. ABORTING"
106    CALL acc_init(ACC_DEVICE_NVIDIA)
107    numdev = acc_get_device_num(ACC_DEVICE_NVIDIA)
108    PRINT *, 'init_physics : GPU device id = ', numdev
109#endif
110
111  !----------------------------------------------------------------------
112  !  lecture des fichiers gcm.def ou run.def
113  !  ---------------------------------------
114  !
115preff=101325.
116 pa=50000.
117 clon=0.
118 clat=0.
119 taux=3.
120 tauy=3.
121 dzoomx=0.1
122 dzoomy=0.1
123 grossismx=1.
124 grossismx=1.
125 transx=0.
126 transy=0.
127
128  CALL conf_gcm( 99, .TRUE.)
129
130  if (mod(iphysiq, iperiod) /= 0) call abort_gcm("conf_gcm", &
131       "iphysiq must be a multiple of iperiod", 1)
132
133 rad=6400000
134g=9.81
135
136
137
138  !-----------------------------------------------------------------------
139  !   Choix du calendrier
140  !   -------------------
141
142  !      calend = 'earth_365d'
143
144
145  !-----------------------------------------------------------------------
146  !   Lecture de l'etat initial :
147  !   ---------------------------
148
149  !-----------------------------------------------------------------------
150  !   Lecture des parametres de controle pour la simulation :
151  !   -------------------------------------------------------
152  !  on recalcule eventuellement le pas de temps
153
154
155  zdtvr    = daysec/REAL(day_step)
156
157  !
158  ! on remet le calendrier \`a zero si demande
159  !
160     annee_ref = anneeref
161     day_ref = dayref
162     day_ini = dayref
163     itau_dyn = 0
164     itau_phy = 0
165     time_0 = 0.
166
167  mois = 1
168  heure = 0.
169! call ymds2ju(annee_ref, mois, day_ref, heure, jD_ref)
170  jH_ref = jD_ref - int(jD_ref)
171  jD_ref = int(jD_ref)
172
173
174
175     dtvr = zdtvr
176     CALL iniconst
177     print*,'APRES inisconst'
178     CALL inigeom
179
180
181  CALL inigeomphy(iim,jjm,llm, &
182               1, comm_lmdz, &
183               rlatu,rlatv, &
184               rlonu,rlonv, &
185               aire,cu,cv)
186
187CALL suphel
188open(82,file='dump_param.bin',form='unformatted',status='old')
189
190
191
192     CALL iophys_ini(900.)
193print*,'Rlatu=',rlatu
194klon=2+iim*(jjm-1)
195klev=llm
196
197!---------------------------------------------------------------------
198! Initialisation de la parametrisation
199!---------------------------------------------------------------------
200      call call_ini_replay
201
202!---------------------------------------------------------------------
203! Boucle en temps sur l'appel à la parametrisation
204!---------------------------------------------------------------------
205      write(6,*)'number of loops to do = '
206      read(5,*) ntime
207      DO it=1,ntime
208         print*,'Pas de temps ',it,klon,klev
209         call call_param_replay(klon,klev,elapsed_time)
210         mean_elapsed=mean_elapsed+elapsed_time/real(ntime)
211      ENDDO
212      write(6,*)'Mean elapsed time = ',mean_elapsed
213
214END PROGRAM replay3d
Note: See TracBrowser for help on using the repository browser.