source: LMDZ6/trunk/libf/dyn3d/conf_gcm.F90 @ 5069

Last change on this file since 5069 was 4996, checked in by evignon, 12 months ago

ajout d'un flag pour le calcul de qsat dans la condtion de "francis"
pour l'advection de l'humidite (q<qsat_aval). En activant ce flag,
on calcule qsat /liquide quelque soit la temperature et on peut donc
ainsi autoriser l'advection de sursaturations / glace à T<0oC.

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