source: LMDZ5/trunk/libf/dyn3dmem/conf_gcm.F90 @ 2183

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