source: LMDZ6/trunk/libf/dyn3dmem/conf_gcm.F90

Last change on this file was 4608, checked in by acozic, 11 months ago

Add of an output file containing mass flow when offline parameter is to "yes"
this file will be on horizontal grid with vertical level klev
When LMDZ is coupled to Inca, we don't call anymore the routine phystoken if offline=y

Anne Cozic

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