source: LMDZ5/trunk/libf/dyn3dpar/conf_gcm.F @ 1813

Last change on this file since 1813 was 1793, checked in by Ehouarn Millour, 11 years ago

Improved sponge layer:

  • Sponge tendencies are now computed analytically, instead than using a Forward Euler approximation.
  • Sponge tendencies are added within top_bound, and the sponge is applied after physics tendencies have been taken into account.

These changes imply that GCM results (when using sponge layer) will be differentwrt bench test cases using previous revisions.
EM

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