source: trunk/LMDZ.COMMON/libf/dyn3dpar/conf_gcm.F90 @ 2757

Last change on this file since 2757 was 2135, checked in by slebonnois, 6 years ago

SL, Venus: new keys for flexibility cp0/cp(T) and Held-Suarez type physics

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