source: LMDZ5/trunk/libf/dyn3dpar/conf_gcm.F90 @ 2182

Last change on this file since 2182 was 2151, checked in by fhourdin, 10 years ago

Corrections pour le 1D.
Le test recemment introduit sur le fait que iphysiq est multiple
de iperiod est deplace de conf_gcm.F90 vers gcm.F pour éviter
qu'il ne soit actif en 1D.
Le include ../dyn3d/conf_gcm.F est remplace par ../dyn3d/conf_gcm.F90
dans 1DUTILS.h

Bug fixing for 1D

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