source: LMDZ6/branches/Amaury_dev/libf/dyn3d/conf_gcm.f90 @ 5139

Last change on this file since 5139 was 5134, checked in by abarral, 8 weeks ago

Replace academic.h, alpale.h, comdissip.h, comdissipn.h, comdissnew.h by modules
Remove unused clesph0.h

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