source: codes/icosagcm/branches/SATURN_DYNAMICO/LMDZ.COMMON/libf/dyn3dpar/conf_gcm.F @ 298

Last change on this file since 298 was 298, checked in by milmd, 10 years ago

Less output messages are written. On 20000 cores it is better. In LMDZ, only master of MPI and OpenMP can write.

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