source: trunk/LMDZ.COMMON/libf/dyn3d/conf_gcm.F90 @ 1593

Last change on this file since 1593 was 1593, checked in by emillour, 8 years ago

Common dynamics:

  • some cleanup around unused or unecessary parameters in the dynamics (ecritphy, grireg and physic) to harmonize with LMDZ5 (Earth dyn core).
  • associated changes in LMDZ.MARS and LMDZ.GENERIC

EM

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