LMDZ
conf_gcm.F90
Go to the documentation of this file.
1 
2 ! $Id: conf_gcm.F90 2221 2015-03-09 06:38:03Z emillour $
3 
4 SUBROUTINE conf_gcm( tapedef, etatinit )
5 
6  USE control_mod
7 #ifdef CPP_IOIPSL
8  use ioipsl
9 #else
10  ! if not using IOIPSL, we still need to use (a local version of) getin
11  use ioipsl_getincom
12 #endif
13  use misc_mod
14  use mod_filtre_fft, ONLY : use_filtre_fft
15  use mod_hallo, ONLY : use_mpi_alloc
16  USE infotrac, ONLY : type_trac
17  use assert_m, only: assert
18 
19  IMPLICIT NONE
20  !-----------------------------------------------------------------------
21  ! Auteurs : L. Fairhead , P. Le Van .
22 
23  ! Arguments :
24 
25  ! tapedef :
26  ! etatinit : = TRUE , on ne compare pas les valeurs des para-
27  ! -metres du zoom avec celles lues sur le fichier start .
28 
29  LOGICAL,INTENT(IN) :: etatinit
30  INTEGER,INTENT(IN) :: tapedef
31 
32  ! Declarations :
33  ! --------------
34  include "dimensions.h"
35  include "paramet.h"
36  include "logic.h"
37  include "serre.h"
38  include "comdissnew.h"
39  include "temps.h"
40  include "comconst.h"
41  include "iniprint.h"
42 
43  ! local:
44  ! ------
45 
46  CHARACTER ch1*72,ch2*72,ch3*72,ch4*12
47  REAL clonn,clatt,grossismxx,grossismyy
48  REAL dzoomxx,dzoomyy, tauxx,tauyy
49  LOGICAL fxyhypbb, ysinuss
50  INTEGER i
51  character(len=*),parameter :: modname="conf_gcm"
52  character (len=80) :: abort_message
53 #ifdef CPP_OMP
54  integer,external :: OMP_GET_NUM_THREADS
55 #endif
56 
57  ! -------------------------------------------------------------------
58 
59  ! ......... Version du 29/04/97 ..........
60 
61  ! Nouveaux parametres nitergdiv,nitergrot,niterh,tetagdiv,tetagrot,
62  ! tetatemp ajoutes pour la dissipation .
63 
64  ! Autre parametre ajoute en fin de liste de tapedef : ** fxyhypb **
65 
66  ! Si fxyhypb = .TRUE. , choix de la fonction a derivee tangente hyperb.
67  ! Sinon , choix de fxynew , a derivee sinusoidale ..
68 
69  ! ...... etatinit = . TRUE. si defrun est appele dans ETAT0_LMD ou
70  ! LIMIT_LMD pour l'initialisation de start.dat (dic) et
71  ! de limit.dat ( dic) ...........
72  ! Sinon etatinit = . FALSE .
73 
74  ! Donc etatinit = .F. si on veut comparer les valeurs de grossismx ,
75  ! grossismy,clon,clat, fxyhypb lues sur le fichier start avec
76  ! celles passees par run.def , au debut du gcm, apres l'appel a
77  ! lectba .
78  ! Ces parmetres definissant entre autres la grille et doivent etre
79  ! pareils et coherents , sinon il y aura divergence du gcm .
80 
81  !-----------------------------------------------------------------------
82  ! initialisations:
83  ! ----------------
84 
85  !Config Key = lunout
86  !Config Desc = unite de fichier pour les impressions
87  !Config Def = 6
88  !Config Help = unite de fichier pour les impressions
89  !Config (defaut sortie standard = 6)
90  lunout=6
91  CALL getin('lunout', lunout)
92  IF (lunout /= 5 .and. lunout /= 6) THEN
93  OPEN(unit=lunout,file='lmdz.out_0000',action='write', &
94  status='unknown',form='formatted')
95  ENDIF
96 
97  adjust=.false.
98  call getin('adjust',adjust)
99 
100 #ifdef CPP_OMP
101  ! adjust=y not implemented in case of OpenMP threads...
102  !$OMP PARALLEL
103  if ((omp_get_num_threads()>1).and.adjust) then
104  write(lunout,*)'conf_gcm: Error, adjust should be set to n' &
105  ,' when running with OpenMP threads'
106  abort_message = 'Wrong value for adjust'
107  call abort_gcm(modname,abort_message,1)
108  endif
109  !$OMP END PARALLEL
110 #endif
111 
112  itaumax=0
113  call getin('itaumax',itaumax);
114  if (itaumax<=0) itaumax=huge(itaumax)
115 
116  !Config Key = prt_level
117  !Config Desc = niveau d'impressions de débogage
118  !Config Def = 0
119  !Config Help = Niveau d'impression pour le débogage
120  !Config (0 = minimum d'impression)
121  prt_level = 0
122  CALL getin('prt_level',prt_level)
123 
124  !-----------------------------------------------------------------------
125  ! Parametres de controle du run:
126  !-----------------------------------------------------------------------
127  !Config Key = planet_type
128  !Config Desc = planet type ("earth", "mars", "venus", ...)
129  !Config Def = earth
130  !Config Help = this flag sets the type of atymosphere that is considered
131  planet_type="earth"
132  CALL getin('planet_type',planet_type)
133 
134  !Config Key = calend
135  !Config Desc = type de calendrier utilise
136  !Config Def = earth_360d
137  !Config Help = valeur possible: earth_360d, earth_365d, earth_366d
138  !Config
139  calend = 'earth_360d'
140  CALL getin('calend', calend)
141 
142  !Config Key = dayref
143  !Config Desc = Jour de l'etat initial
144  !Config Def = 1
145  !Config Help = Jour de l'etat initial ( = 350 si 20 Decembre ,
146  !Config par expl. ,comme ici ) ... A completer
147  dayref=1
148  CALL getin('dayref', dayref)
149 
150  !Config Key = anneeref
151  !Config Desc = Annee de l'etat initial
152  !Config Def = 1998
153  !Config Help = Annee de l'etat initial
154  !Config ( avec 4 chiffres ) ... A completer
155  anneeref = 1998
156  CALL getin('anneeref',anneeref)
157 
158  !Config Key = raz_date
159  !Config Desc = Remise a zero de la date initiale
160  !Config Def = 0 (pas de remise a zero)
161  !Config Help = Remise a zero de la date initiale
162  !Config 0 pas de remise a zero, on garde la date du fichier restart
163  !Config 1 prise en compte de la date de gcm.def avec remise a zero
164  !Config des compteurs de pas de temps
165  raz_date = 0
166  CALL getin('raz_date', raz_date)
167 
168  !Config Key = resetvarc
169  !Config Desc = Reinit des variables de controle
170  !Config Def = n
171  !Config Help = Reinit des variables de controle
172  resetvarc = .false.
173  CALL getin('resetvarc',resetvarc)
174 
175  !Config Key = nday
176  !Config Desc = Nombre de jours d'integration
177  !Config Def = 10
178  !Config Help = Nombre de jours d'integration
179  !Config ... On pourait aussi permettre des mois ou des annees !
180  nday = 10
181  CALL getin('nday',nday)
182 
183  !Config Key = starttime
184  !Config Desc = Heure de depart de la simulation
185  !Config Def = 0
186  !Config Help = Heure de depart de la simulation
187  !Config en jour
188  starttime = 0
189  CALL getin('starttime',starttime)
190 
191  !Config Key = day_step
192  !Config Desc = nombre de pas par jour
193  !Config Def = 240
194  !Config Help = nombre de pas par jour (multiple de iperiod) (
195  !Config ici pour dt = 1 min )
196  day_step = 240
197  CALL getin('day_step',day_step)
198 
199  !Config Key = nsplit_phys
200  nsplit_phys = 1
201  CALL getin('nsplit_phys',nsplit_phys)
202 
203  !Config Key = iperiod
204  !Config Desc = periode pour le pas Matsuno
205  !Config Def = 5
206  !Config Help = periode pour le pas Matsuno (en pas de temps)
207  iperiod = 5
208  CALL getin('iperiod',iperiod)
209 
210  !Config Key = iapp_tracvl
211  !Config Desc = frequence du groupement des flux
212  !Config Def = iperiod
213  !Config Help = frequence du groupement des flux (en pas de temps)
215  CALL getin('iapp_tracvl',iapp_tracvl)
216 
217  !Config Key = iconser
218  !Config Desc = periode de sortie des variables de controle
219  !Config Def = 240
220  !Config Help = periode de sortie des variables de controle
221  !Config (En pas de temps)
222  iconser = 240
223  CALL getin('iconser', iconser)
224 
225  !Config Key = iecri
226  !Config Desc = periode d'ecriture du fichier histoire
227  !Config Def = 1
228  !Config Help = periode d'ecriture du fichier histoire (en jour)
229  iecri = 1
230  CALL getin('iecri',iecri)
231 
232  !Config Key = periodav
233  !Config Desc = periode de stockage fichier histmoy
234  !Config Def = 1
235  !Config Help = periode de stockage fichier histmoy (en jour)
236  periodav = 1.
237  CALL getin('periodav',periodav)
238 
239  !Config Key = output_grads_dyn
240  !Config Desc = output dynamics diagnostics in 'dyn.dat' file
241  !Config Def = n
242  !Config Help = output dynamics diagnostics in Grads-readable 'dyn.dat' file
244  CALL getin('output_grads_dyn',output_grads_dyn)
245 
246  !Config Key = dissip_period
247  !Config Desc = periode de la dissipation
248  !Config Def = 0
249  !Config Help = periode de la dissipation
250  !Config dissip_period=0 => la valeur sera calcule dans inidissip
251  !Config dissip_period>0 => on prend cette valeur
252  dissip_period = 0
253  CALL getin('dissip_period',dissip_period)
254 
255  !cc .... P. Le Van , modif le 29/04/97 .pour la dissipation ...
256  !cc
257 
258  !Config Key = lstardis
259  !Config Desc = choix de l'operateur de dissipation
260  !Config Def = y
261  !Config Help = choix de l'operateur de dissipation
262  !Config 'y' si on veut star et 'n' si on veut non-start !
263  !Config Moi y en a pas comprendre !
264  lstardis = .true.
265  CALL getin('lstardis',lstardis)
266 
267  !Config Key = nitergdiv
268  !Config Desc = Nombre d'iteration de gradiv
269  !Config Def = 1
270  !Config Help = nombre d'iterations de l'operateur de dissipation
271  !Config gradiv
272  nitergdiv = 1
273  CALL getin('nitergdiv',nitergdiv)
274 
275  !Config Key = nitergrot
276  !Config Desc = nombre d'iterations de nxgradrot
277  !Config Def = 2
278  !Config Help = nombre d'iterations de l'operateur de dissipation
279  !Config nxgradrot
280  nitergrot = 2
281  CALL getin('nitergrot',nitergrot)
282 
283  !Config Key = niterh
284  !Config Desc = nombre d'iterations de divgrad
285  !Config Def = 2
286  !Config Help = nombre d'iterations de l'operateur de dissipation
287  !Config divgrad
288  niterh = 2
289  CALL getin('niterh',niterh)
290 
291  !Config Key = tetagdiv
292  !Config Desc = temps de dissipation pour div
293  !Config Def = 7200
294  !Config Help = temps de dissipation des plus petites longeur
295  !Config d'ondes pour u,v (gradiv)
296  tetagdiv = 7200.
297  CALL getin('tetagdiv',tetagdiv)
298 
299  !Config Key = tetagrot
300  !Config Desc = temps de dissipation pour grad
301  !Config Def = 7200
302  !Config Help = temps de dissipation des plus petites longeur
303  !Config d'ondes pour u,v (nxgradrot)
304  tetagrot = 7200.
305  CALL getin('tetagrot',tetagrot)
306 
307  !Config Key = tetatemp
308  !Config Desc = temps de dissipation pour h
309  !Config Def = 7200
310  !Config Help = temps de dissipation des plus petites longeur
311  !Config d'ondes pour h (divgrad)
312  tetatemp = 7200.
313  CALL getin('tetatemp',tetatemp )
314 
315  ! Parametres controlant la variation sur la verticale des constantes de
316  ! dissipation.
317  ! Pour le moment actifs uniquement dans la version a 39 niveaux
318  ! avec ok_strato=y
319 
320  dissip_factz=4.
321  dissip_deltaz=10.
322  dissip_zref=30.
323  CALL getin('dissip_factz',dissip_factz )
324  CALL getin('dissip_deltaz',dissip_deltaz )
325  CALL getin('dissip_zref',dissip_zref )
326 
327  ! top_bound sponge: only active if ok_strato=.true. and iflag_top_bound!=0
328  ! iflag_top_bound=0 for no sponge
329  ! iflag_top_bound=1 for sponge over 4 topmost layers
330  ! iflag_top_bound=2 for sponge from top to ~1% of top layer pressure
332  CALL getin('iflag_top_bound',iflag_top_bound)
333 
334  ! mode_top_bound : fields towards which sponge relaxation will be done:
335  ! mode_top_bound=0: no relaxation
336  ! mode_top_bound=1: u and v relax towards 0
337  ! mode_top_bound=2: u and v relax towards their zonal mean
338  ! mode_top_bound=3: u,v and pot. temp. relax towards their zonal mean
339  mode_top_bound=3
340  CALL getin('mode_top_bound',mode_top_bound)
341 
342  ! top_bound sponge : inverse of charactericstic relaxation time scale for sponge
343  tau_top_bound=1.e-5
344  CALL getin('tau_top_bound',tau_top_bound)
345 
346  !Config Key = coefdis
347  !Config Desc = coefficient pour gamdissip
348  !Config Def = 0
349  !Config Help = coefficient pour gamdissip
350  coefdis = 0.
351  CALL getin('coefdis',coefdis)
352 
353  !Config Key = purmats
354  !Config Desc = Schema d'integration
355  !Config Def = n
356  !Config Help = Choix du schema d'integration temporel.
357  !Config y = pure Matsuno sinon c'est du Matsuno-leapfrog
358  purmats = .false.
359  CALL getin('purmats',purmats)
360 
361  !Config Key = ok_guide
362  !Config Desc = Guidage
363  !Config Def = n
364  !Config Help = Guidage
365  ok_guide = .false.
366  CALL getin('ok_guide',ok_guide)
367 
368  if (ok_guide .and. adjust) call abort_gcm("conf_gcm", &
369  "adjust does not work with ok_guide", 1)
370 
371  !Config Key = read_start
372  !Config Desc = Initialize model using a 'start.nc' file
373  !Config Def = y
374  !Config Help = y: intialize dynamical fields using a 'start.nc' file
375  ! n: fields are initialized by 'iniacademic' routine
376  read_start= .true.
377  CALL getin('read_start',read_start)
378 
379  !Config Key = iflag_phys
380  !Config Desc = Avec ls physique
381  !Config Def = 1
382  !Config Help = Permet de faire tourner le modele sans
383  !Config physique.
384  iflag_phys = 1
385  CALL getin('iflag_phys',iflag_phys)
386 
387  !Config Key = iphysiq
388  !Config Desc = Periode de la physique
389  !Config Def = 5
390  !Config Help = Periode de la physique en pas de temps de la dynamique.
391  iphysiq = 5
392  CALL getin('iphysiq', iphysiq)
393 
394  !Config Key = ip_ebil_dyn
395  !Config Desc = PRINT level for energy conserv. diag.
396  !Config Def = 0
397  !Config Help = PRINT level for energy conservation diag. ;
398  ! les options suivantes existent :
399  !Config 0 pas de print
400  !Config 1 pas de print
401  !Config 2 print,
402  ip_ebil_dyn = 0
403  CALL getin('ip_ebil_dyn',ip_ebil_dyn)
404 
405  !cc .... P. Le Van , ajout le 7/03/95 .pour le zoom ...
406  ! ......... ( modif le 17/04/96 ) .........
407 
408  test_etatinit: IF (.not. etatinit) then
409  !Config Key = clon
410  !Config Desc = centre du zoom, longitude
411  !Config Def = 0
412  !Config Help = longitude en degres du centre
413  !Config du zoom
414  clonn = 0.
415  CALL getin('clon',clonn)
416 
417  !Config Key = clat
418  !Config Desc = centre du zoom, latitude
419  !Config Def = 0
420  !Config Help = latitude en degres du centre du zoom
421  !Config
422  clatt = 0.
423  CALL getin('clat',clatt)
424 
425  IF( abs(clat - clatt).GE. 0.001 ) THEN
426  write(lunout,*)'conf_gcm: La valeur de clat passee par run.def', &
427  ' est differente de celle lue sur le fichier start '
428  stop
429  ENDIF
430 
431  !Config Key = grossismx
432  !Config Desc = zoom en longitude
433  !Config Def = 1.0
434  !Config Help = facteur de grossissement du zoom,
435  !Config selon la longitude
436  grossismxx = 1.0
437  CALL getin('grossismx',grossismxx)
438 
439  IF( abs(grossismx - grossismxx).GE. 0.001 ) THEN
440  write(lunout,*)'conf_gcm: La valeur de grossismx passee par ', &
441  'run.def est differente de celle lue sur le fichier start '
442  stop
443  ENDIF
444 
445  !Config Key = grossismy
446  !Config Desc = zoom en latitude
447  !Config Def = 1.0
448  !Config Help = facteur de grossissement du zoom,
449  !Config selon la latitude
450  grossismyy = 1.0
451  CALL getin('grossismy',grossismyy)
452 
453  IF( abs(grossismy - grossismyy).GE. 0.001 ) THEN
454  write(lunout,*)'conf_gcm: La valeur de grossismy passee par ', &
455  'run.def est differente de celle lue sur le fichier start '
456  stop
457  ENDIF
458 
459  IF( grossismx.LT.1. ) THEN
460  write(lunout,*) &
461  'conf_gcm: *** ATTENTION !! grossismx < 1 . *** '
462  stop
463  ELSE
464  alphax = 1. - 1./ grossismx
465  ENDIF
466 
467  IF( grossismy.LT.1. ) THEN
468  write(lunout,*) &
469  'conf_gcm: *** ATTENTION !! grossismy < 1 . *** '
470  stop
471  ELSE
472  alphay = 1. - 1./ grossismy
473  ENDIF
474 
475  write(lunout,*)'conf_gcm: alphax alphay',alphax,alphay
476 
477  ! alphax et alphay sont les anciennes formulat. des grossissements
478 
479  !Config Key = fxyhypb
480  !Config Desc = Fonction hyperbolique
481  !Config Def = y
482  !Config Help = Fonction f(y) hyperbolique si = .true.
483  !Config sinon sinusoidale
484  fxyhypbb = .true.
485  CALL getin('fxyhypb',fxyhypbb)
486 
487  IF( .NOT.fxyhypb ) THEN
488  IF( fxyhypbb ) THEN
489  write(lunout,*)' ******** PBS DANS CONF_GCM ******** '
490  write(lunout,*)' *** fxyhypb lu sur le fichier start est ', &
491  'F alors qu il est T sur run.def ***'
492  stop
493  ENDIF
494  ELSE
495  IF( .NOT.fxyhypbb ) THEN
496  write(lunout,*)' ******** PBS DANS CONF_GCM ******** '
497  write(lunout,*)' *** fxyhypb lu sur le fichier start est ', &
498  'T alors qu il est F sur run.def **** '
499  stop
500  ENDIF
501  ENDIF
502 
503  !Config Key = dzoomx
504  !Config Desc = extension en longitude
505  !Config Def = 0
506  !Config Help = extension en longitude de la zone du zoom
507  !Config ( fraction de la zone totale)
508  dzoomxx = 0.0
509  CALL getin('dzoomx',dzoomxx)
510 
511  IF( fxyhypb ) THEN
512  IF( abs(dzoomx - dzoomxx).GE. 0.001 ) THEN
513  write(lunout,*)'conf_gcm: La valeur de dzoomx passee par ', &
514  'run.def est differente de celle lue sur le fichier start '
515  stop
516  ENDIF
517  ENDIF
518 
519  !Config Key = dzoomy
520  !Config Desc = extension en latitude
521  !Config Def = 0
522  !Config Help = extension en latitude de la zone du zoom
523  !Config ( fraction de la zone totale)
524  dzoomyy = 0.0
525  CALL getin('dzoomy',dzoomyy)
526 
527  IF( fxyhypb ) THEN
528  IF( abs(dzoomy - dzoomyy).GE. 0.001 ) THEN
529  write(lunout,*)'conf_gcm: La valeur de dzoomy passee par ', &
530  'run.def est differente de celle lue sur le fichier start '
531  stop
532  ENDIF
533  ENDIF
534 
535  !Config Key = taux
536  !Config Desc = raideur du zoom en X
537  !Config Def = 3
538  !Config Help = raideur du zoom en X
539  tauxx = 3.0
540  CALL getin('taux',tauxx)
541 
542  IF( fxyhypb ) THEN
543  IF( abs(taux - tauxx).GE. 0.001 ) THEN
544  write(lunout,*)'conf_gcm: La valeur de taux passee par ', &
545  'run.def est differente de celle lue sur le fichier start '
546  stop
547  ENDIF
548  ENDIF
549 
550  !Config Key = tauyy
551  !Config Desc = raideur du zoom en Y
552  !Config Def = 3
553  !Config Help = raideur du zoom en Y
554  tauyy = 3.0
555  CALL getin('tauy',tauyy)
556 
557  IF( fxyhypb ) THEN
558  IF( abs(tauy - tauyy).GE. 0.001 ) THEN
559  write(lunout,*)'conf_gcm: La valeur de tauy passee par ', &
560  'run.def est differente de celle lue sur le fichier start '
561  stop
562  ENDIF
563  ENDIF
564 
565  !c
566  IF( .NOT.fxyhypb ) THEN
567 
568  !Config Key = ysinus
569  !Config IF = !fxyhypb
570  !Config Desc = Fonction en Sinus
571  !Config Def = y
572  !Config Help = Fonction f(y) avec y = Sin(latit.) si = .true.
573  !Config sinon y = latit.
574  ysinuss = .true.
575  CALL getin('ysinus',ysinuss)
576 
577  IF( .NOT.ysinus ) THEN
578  IF( ysinuss ) THEN
579  write(lunout,*)' ******** PBS DANS CONF_GCM ******** '
580  write(lunout,*)' *** ysinus lu sur le fichier start est F', &
581  ' alors qu il est T sur run.def ***'
582  stop
583  ENDIF
584  ELSE
585  IF( .NOT.ysinuss ) THEN
586  write(lunout,*)' ******** PBS DANS CONF_GCM ******** '
587  write(lunout,*)' *** ysinus lu sur le fichier start est T', &
588  ' alors qu il est F sur run.def **** '
589  stop
590  ENDIF
591  ENDIF
592  ENDIF ! of IF( .NOT.fxyhypb )
593 
594  !Config Key = offline
595  !Config Desc = Nouvelle eau liquide
596  !Config Def = n
597  !Config Help = Permet de mettre en route la
598  !Config nouvelle parametrisation de l'eau liquide !
599  offline = .false.
600  CALL getin('offline',offline)
601  IF (offline .AND. adjust) THEN
602  WRITE(lunout,*) &
603  'WARNING : option offline does not work with adjust=y :'
604  WRITE(lunout,*) 'the files defstoke.nc, fluxstoke.nc ', &
605  'and fluxstokev.nc will not be created'
606  WRITE(lunout,*) &
607  'only the file phystoke.nc will still be created '
608  END IF
609 
610  !Config Key = type_trac
611  !Config Desc = Choix de couplage avec model de chimie INCA ou REPROBUS
612  !Config Def = lmdz
613  !Config Help =
614  !Config 'lmdz' = pas de couplage, pur LMDZ
615  !Config 'inca' = model de chime INCA
616  !Config 'repr' = model de chime REPROBUS
617  type_trac = 'lmdz'
618  CALL getin('type_trac',type_trac)
619 
620  !Config Key = config_inca
621  !Config Desc = Choix de configuration de INCA
622  !Config Def = none
623  !Config Help = Choix de configuration de INCA :
624  !Config 'none' = sans INCA
625  !Config 'chem' = INCA avec calcul de chemie
626  !Config 'aero' = INCA avec calcul des aerosols
627  config_inca = 'none'
628  CALL getin('config_inca',config_inca)
629 
630  !Config Key = ok_dynzon
631  !Config Desc = calcul et sortie des transports
632  !Config Def = n
633  !Config Help = Permet de mettre en route le calcul des transports
634  !Config
635  ok_dynzon = .false.
636  CALL getin('ok_dynzon',ok_dynzon)
637 
638  !Config Key = ok_dyn_ins
639  !Config Desc = sorties instantanees dans la dynamique
640  !Config Def = n
641  !Config Help =
642  !Config
643  ok_dyn_ins = .false.
644  CALL getin('ok_dyn_ins',ok_dyn_ins)
645 
646  !Config Key = ok_dyn_ave
647  !Config Desc = sorties moyennes dans la dynamique
648  !Config Def = n
649  !Config Help =
650  !Config
651  ok_dyn_ave = .false.
652  CALL getin('ok_dyn_ave',ok_dyn_ave)
653 
654  write(lunout,*)' #########################################'
655  write(lunout,*)' Configuration des parametres du gcm: '
656  write(lunout,*)' planet_type = ', planet_type
657  write(lunout,*)' calend = ', calend
658  write(lunout,*)' dayref = ', dayref
659  write(lunout,*)' anneeref = ', anneeref
660  write(lunout,*)' nday = ', nday
661  write(lunout,*)' day_step = ', day_step
662  write(lunout,*)' iperiod = ', iperiod
663  write(lunout,*)' nsplit_phys = ', nsplit_phys
664  write(lunout,*)' iconser = ', iconser
665  write(lunout,*)' iecri = ', iecri
666  write(lunout,*)' periodav = ', periodav
667  write(lunout,*)' output_grads_dyn = ', output_grads_dyn
668  write(lunout,*)' dissip_period = ', dissip_period
669  write(lunout,*)' lstardis = ', lstardis
670  write(lunout,*)' nitergdiv = ', nitergdiv
671  write(lunout,*)' nitergrot = ', nitergrot
672  write(lunout,*)' niterh = ', niterh
673  write(lunout,*)' tetagdiv = ', tetagdiv
674  write(lunout,*)' tetagrot = ', tetagrot
675  write(lunout,*)' tetatemp = ', tetatemp
676  write(lunout,*)' coefdis = ', coefdis
677  write(lunout,*)' purmats = ', purmats
678  write(lunout,*)' read_start = ', read_start
679  write(lunout,*)' iflag_phys = ', iflag_phys
680  write(lunout,*)' iphysiq = ', iphysiq
681  write(lunout,*)' clonn = ', clonn
682  write(lunout,*)' clatt = ', clatt
683  write(lunout,*)' grossismx = ', grossismx
684  write(lunout,*)' grossismy = ', grossismy
685  write(lunout,*)' fxyhypbb = ', fxyhypbb
686  write(lunout,*)' dzoomxx = ', dzoomxx
687  write(lunout,*)' dzoomy = ', dzoomyy
688  write(lunout,*)' tauxx = ', tauxx
689  write(lunout,*)' tauyy = ', tauyy
690  write(lunout,*)' offline = ', offline
691  write(lunout,*)' type_trac = ', type_trac
692  write(lunout,*)' config_inca = ', config_inca
693  write(lunout,*)' ok_dynzon = ', ok_dynzon
694  write(lunout,*)' ok_dyn_ins = ', ok_dyn_ins
695  write(lunout,*)' ok_dyn_ave = ', ok_dyn_ave
696  else
697  !Config Key = clon
698  !Config Desc = centre du zoom, longitude
699  !Config Def = 0
700  !Config Help = longitude en degres du centre
701  !Config du zoom
702  clon = 0.
703  CALL getin('clon',clon)
704 
705  !Config Key = clat
706  !Config Desc = centre du zoom, latitude
707  !Config Def = 0
708  !Config Help = latitude en degres du centre du zoom
709  !Config
710  clat = 0.
711  CALL getin('clat',clat)
712 
713  !Config Key = grossismx
714  !Config Desc = zoom en longitude
715  !Config Def = 1.0
716  !Config Help = facteur de grossissement du zoom,
717  !Config selon la longitude
718  grossismx = 1.0
719  CALL getin('grossismx',grossismx)
720 
721  !Config Key = grossismy
722  !Config Desc = zoom en latitude
723  !Config Def = 1.0
724  !Config Help = facteur de grossissement du zoom,
725  !Config selon la latitude
726  grossismy = 1.0
727  CALL getin('grossismy',grossismy)
728 
729  IF( grossismx.LT.1. ) THEN
730  write(lunout,*) &
731  'conf_gcm: *** ATTENTION !! grossismx < 1 . *** '
732  stop
733  ELSE
734  alphax = 1. - 1./ grossismx
735  ENDIF
736 
737  IF( grossismy.LT.1. ) THEN
738  write(lunout,*) 'conf_gcm: ***ATTENTION !! grossismy < 1 . *** '
739  stop
740  ELSE
741  alphay = 1. - 1./ grossismy
742  ENDIF
743 
744  write(lunout,*)'conf_gcm: alphax alphay ',alphax,alphay
745 
746  ! alphax et alphay sont les anciennes formulat. des grossissements
747 
748  !Config Key = fxyhypb
749  !Config Desc = Fonction hyperbolique
750  !Config Def = y
751  !Config Help = Fonction f(y) hyperbolique si = .true.
752  !Config sinon sinusoidale
753  fxyhypb = .true.
754  CALL getin('fxyhypb',fxyhypb)
755 
756  !Config Key = dzoomx
757  !Config Desc = extension en longitude
758  !Config Def = 0
759  !Config Help = extension en longitude de la zone du zoom
760  !Config ( fraction de la zone totale)
761  dzoomx = 0.0
762  CALL getin('dzoomx',dzoomx)
763 
764  !Config Key = dzoomy
765  !Config Desc = extension en latitude
766  !Config Def = 0
767  !Config Help = extension en latitude de la zone du zoom
768  !Config ( fraction de la zone totale)
769  dzoomy = 0.0
770  CALL getin('dzoomy',dzoomy)
771 
772  !Config Key = taux
773  !Config Desc = raideur du zoom en X
774  !Config Def = 3
775  !Config Help = raideur du zoom en X
776  taux = 3.0
777  CALL getin('taux',taux)
778 
779  !Config Key = tauy
780  !Config Desc = raideur du zoom en Y
781  !Config Def = 3
782  !Config Help = raideur du zoom en Y
783  tauy = 3.0
784  CALL getin('tauy',tauy)
785 
786  !Config Key = ysinus
787  !Config IF = !fxyhypb
788  !Config Desc = Fonction en Sinus
789  !Config Def = y
790  !Config Help = Fonction f(y) avec y = Sin(latit.) si = .true.
791  !Config sinon y = latit.
792  ysinus = .true.
793  CALL getin('ysinus',ysinus)
794 
795  !Config Key = offline
796  !Config Desc = Nouvelle eau liquide
797  !Config Def = n
798  !Config Help = Permet de mettre en route la
799  !Config nouvelle parametrisation de l'eau liquide !
800  offline = .false.
801  CALL getin('offline',offline)
802  IF (offline .AND. adjust) THEN
803  WRITE(lunout,*) &
804  'WARNING : option offline does not work with adjust=y :'
805  WRITE(lunout,*) 'the files defstoke.nc, fluxstoke.nc ', &
806  'and fluxstokev.nc will not be created'
807  WRITE(lunout,*) &
808  'only the file phystoke.nc will still be created '
809  END IF
810 
811  !Config Key = type_trac
812  !Config Desc = Choix de couplage avec model de chimie INCA ou REPROBUS
813  !Config Def = lmdz
814  !Config Help =
815  !Config 'lmdz' = pas de couplage, pur LMDZ
816  !Config 'inca' = model de chime INCA
817  !Config 'repr' = model de chime REPROBUS
818  type_trac = 'lmdz'
819  CALL getin('type_trac',type_trac)
820 
821  !Config Key = config_inca
822  !Config Desc = Choix de configuration de INCA
823  !Config Def = none
824  !Config Help = Choix de configuration de INCA :
825  !Config 'none' = sans INCA
826  !Config 'chem' = INCA avec calcul de chemie
827  !Config 'aero' = INCA avec calcul des aerosols
828  config_inca = 'none'
829  CALL getin('config_inca',config_inca)
830 
831  !Config Key = ok_dynzon
832  !Config Desc = sortie des transports zonaux dans la dynamique
833  !Config Def = n
834  !Config Help = Permet de mettre en route le calcul des transports
835  !Config
836  ok_dynzon = .false.
837  CALL getin('ok_dynzon',ok_dynzon)
838 
839  !Config Key = ok_dyn_ins
840  !Config Desc = sorties instantanees dans la dynamique
841  !Config Def = n
842  !Config Help =
843  !Config
844  ok_dyn_ins = .false.
845  CALL getin('ok_dyn_ins',ok_dyn_ins)
846 
847  !Config Key = ok_dyn_ave
848  !Config Desc = sorties moyennes dans la dynamique
849  !Config Def = n
850  !Config Help =
851  !Config
852  ok_dyn_ave = .false.
853  CALL getin('ok_dyn_ave',ok_dyn_ave)
854 
855  !Config Key = use_filtre_fft
856  !Config Desc = flag d'activation des FFT pour le filtre
857  !Config Def = false
858  !Config Help = permet d'activer l'utilisation des FFT pour effectuer
859  !Config le filtrage aux poles.
861  CALL getin('use_filtre_fft',use_filtre_fft)
862 
863  IF (use_filtre_fft .AND. grossismx /= 1.0) THEN
864  write(lunout,*)'WARNING !!! '
865  write(lunout,*)"Le zoom en longitude est incompatible", &
866  " avec l'utilisation du filtre FFT ", &
867  "---> FFT filter not active"
869  ENDIF
870 
871  !Config Key = use_mpi_alloc
872  !Config Desc = Utilise un buffer MPI en m�moire globale
873  !Config Def = false
874  !Config Help = permet d'activer l'utilisation d'un buffer MPI
875  !Config en m�moire globale a l'aide de la fonction MPI_ALLOC.
876  !Config Cela peut am�liorer la bande passante des transferts MPI
877  !Config d'un facteur 2
879  CALL getin('use_mpi_alloc',use_mpi_alloc)
880 
881  !Config key = ok_strato
882  !Config Desc = activation de la version strato
883  !Config Def = .FALSE.
884  !Config Help = active la version stratosphérique de LMDZ de F. Lott
885 
886  ok_strato=.false.
887  CALL getin('ok_strato',ok_strato)
888 
889  vert_prof_dissip = merge(1, 0, ok_strato .and. llm==39)
890  CALL getin('vert_prof_dissip', vert_prof_dissip)
891  call assert(vert_prof_dissip == 0 .or. vert_prof_dissip == 1, &
892  "bad value for vert_prof_dissip")
893 
894  !Config Key = ok_gradsfile
895  !Config Desc = activation des sorties grads du guidage
896  !Config Def = n
897  !Config Help = active les sorties grads du guidage
898 
899  ok_gradsfile = .false.
900  CALL getin('ok_gradsfile',ok_gradsfile)
901 
902  !Config Key = ok_limit
903  !Config Desc = creation des fichiers limit dans create_etat0_limit
904  !Config Def = y
905  !Config Help = production du fichier limit.nc requise
906 
907  ok_limit = .true.
908  CALL getin('ok_limit',ok_limit)
909 
910  !Config Key = ok_etat0
911  !Config Desc = creation des fichiers etat0 dans create_etat0_limit
912  !Config Def = y
913  !Config Help = production des fichiers start.nc, startphy.nc requise
914 
915  ok_etat0 = .true.
916  CALL getin('ok_etat0',ok_etat0)
917 
918  write(lunout,*)' #########################################'
919  write(lunout,*)' Configuration des parametres de cel0' &
920  //'_limit: '
921  write(lunout,*)' planet_type = ', planet_type
922  write(lunout,*)' calend = ', calend
923  write(lunout,*)' dayref = ', dayref
924  write(lunout,*)' anneeref = ', anneeref
925  write(lunout,*)' nday = ', nday
926  write(lunout,*)' day_step = ', day_step
927  write(lunout,*)' iperiod = ', iperiod
928  write(lunout,*)' iconser = ', iconser
929  write(lunout,*)' iecri = ', iecri
930  write(lunout,*)' periodav = ', periodav
931  write(lunout,*)' output_grads_dyn = ', output_grads_dyn
932  write(lunout,*)' dissip_period = ', dissip_period
933  write(lunout,*)' lstardis = ', lstardis
934  write(lunout,*)' nitergdiv = ', nitergdiv
935  write(lunout,*)' nitergrot = ', nitergrot
936  write(lunout,*)' niterh = ', niterh
937  write(lunout,*)' tetagdiv = ', tetagdiv
938  write(lunout,*)' tetagrot = ', tetagrot
939  write(lunout,*)' tetatemp = ', tetatemp
940  write(lunout,*)' coefdis = ', coefdis
941  write(lunout,*)' purmats = ', purmats
942  write(lunout,*)' read_start = ', read_start
943  write(lunout,*)' iflag_phys = ', iflag_phys
944  write(lunout,*)' iphysiq = ', iphysiq
945  write(lunout,*)' clon = ', clon
946  write(lunout,*)' clat = ', clat
947  write(lunout,*)' grossismx = ', grossismx
948  write(lunout,*)' grossismy = ', grossismy
949  write(lunout,*)' fxyhypb = ', fxyhypb
950  write(lunout,*)' dzoomx = ', dzoomx
951  write(lunout,*)' dzoomy = ', dzoomy
952  write(lunout,*)' taux = ', taux
953  write(lunout,*)' tauy = ', tauy
954  write(lunout,*)' offline = ', offline
955  write(lunout,*)' type_trac = ', type_trac
956  write(lunout,*)' config_inca = ', config_inca
957  write(lunout,*)' ok_dynzon = ', ok_dynzon
958  write(lunout,*)' ok_dyn_ins = ', ok_dyn_ins
959  write(lunout,*)' ok_dyn_ave = ', ok_dyn_ave
960  write(lunout,*)' use_filtre_fft = ', use_filtre_fft
961  write(lunout,*)' use_mpi_alloc = ', use_mpi_alloc
962  write(lunout,*)' ok_strato = ', ok_strato
963  write(lunout,*)' ok_gradsfile = ', ok_gradsfile
964  write(lunout,*)' ok_limit = ', ok_limit
965  write(lunout,*)' ok_etat0 = ', ok_etat0
966  end IF test_etatinit
967 
968 END SUBROUTINE conf_gcm
!$Id tetagdiv
Definition: comdissnew.h:13
!$Header!c!c!c include serre h!c REAL dzoomy
Definition: serre.h:8
!$Header!c!c!c include serre h!c REAL alphax
Definition: serre.h:8
integer, save iapp_tracvl
Definition: control_mod.F90:17
!$Id mode_top_bound COMMON comconstr omeg dissip_factz
Definition: comconst.h:7
character(len=4), save config_inca
Definition: control_mod.F90:31
!$Header!c!c!c include serre h!c REAL && grossismx
Definition: serre.h:8
!$Id ysinus read_start
Definition: logic.h:10
logical, save ok_dyn_ins
Definition: control_mod.F90:36
logical, save use_filtre_fft
integer, save dayref
Definition: control_mod.F90:26
!$Header!c!c!c include serre h!c REAL clon
Definition: serre.h:8
!$Id ysinus ok_gradsfile ok_limit
Definition: logic.h:10
!$Id && iflag_top_bound
Definition: comconst.h:7
!$Id nitergdiv
Definition: comdissnew.h:13
character(len=10), save planet_type
Definition: control_mod.F90:32
subroutine abort_gcm(modname, message, ierr)
Definition: abort_gcm.F:7
!$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 ysinus ok_gradsfile hybrid COMMON logici iflag_phys
Definition: logic.h:10
integer, save day_step
Definition: control_mod.F90:15
integer, save iphysiq
Definition: control_mod.F90:24
!$Id ysinus ok_strato
Definition: logic.h:10
!$Id nitergrot
Definition: comdissnew.h:13
!$Id mode_top_bound COMMON comconstr omeg dissip_zref tau_top_bound
Definition: comconst.h:7
logical, save output_grads_dyn
Definition: control_mod.F90:33
logical, save use_mpi_alloc
Definition: mod_hallo.F90:4
integer, save itaumax
Definition: misc_mod.F90:2
!$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
Definition: calcul_STDlev.h:26
logical, save offline
Definition: control_mod.F90:30
!$Id ysinus ok_gradsfile ok_etat0
Definition: logic.h:10
!$Id ysinus ok_guide
Definition: logic.h:10
integer, save dissip_period
Definition: control_mod.F90:22
!$Id fxyhypb
Definition: logic.h:10
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
integer, save raz_date
Definition: control_mod.F90:28
subroutine conf_gcm(tapedef, etatinit)
Definition: conf_gcm.F90:5
real, save periodav
Definition: control_mod.F90:12
logical, save resetvarc
Definition: control_mod.F90:40
integer, save iconser
Definition: control_mod.F90:20
!$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
character(len=4), save type_trac
Definition: infotrac.F90:40
!$Id ysinus ok_gradsfile hybrid COMMON logici iflag_trac LOGICAL purmats
Definition: logic.h:10
!$Header!c!c!c include serre h!c REAL dzoomx
Definition: serre.h:8
integer, save anneeref
Definition: control_mod.F90:27
!$Id && tetagrot
Definition: comdissnew.h:13
!$Id mode_top_bound COMMON comconstr omeg dissip_deltaz
Definition: comconst.h:7
logical, save ok_dynzon
Definition: control_mod.F90:35
!$Header!c!c!c include serre h!c REAL grossismy
Definition: serre.h:8
integer, save iecri
Definition: control_mod.F90:21
logical, save ok_dyn_ave
Definition: control_mod.F90:38
!$Header!c!c!c include serre h!c REAL taux
Definition: serre.h:8
integer, save nsplit_phys
Definition: control_mod.F90:19
!$Header!INCLUDE comdissip h COMMON comdissip tetatemp
Definition: comdissip.h:8
integer, save iperiod
Definition: control_mod.F90:16
integer, save ip_ebil_dyn
Definition: control_mod.F90:29
!$Header!c!c!c include serre h!c REAL clat
Definition: serre.h:8
integer, save nday
Definition: control_mod.F90:14
logical, save adjust
Definition: misc_mod.F90:3
!$Header!c!c!c include serre h!c REAL alphay
Definition: serre.h:8
!$Id niterh
Definition: comdissnew.h:13
!$Header!integer nvarmx s s unit
Definition: gradsdef.h:20
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout
Definition: iniprint.h:7
!$Header!INCLUDE comdissip h COMMON comdissip coefdis
Definition: comdissip.h:8
real, save starttime
Definition: control_mod.F90:13