source: trunk/LMDZ.MARS/libf/dyn3d/defrun_new.F @ 134

Last change on this file since 134 was 38, checked in by emillour, 14 years ago

Ajout du modè Martien (mon LMDZ.MARS.BETA, du 28/01/2011) dans le rértoire mars, pour pouvoir suivre plus facilement les modifs.
EM

File size: 16.7 KB
Line 
1      SUBROUTINE defrun_new( tapedef, etatinit )
2c
3c-----------------------------------------------------------------------
4c     Auteurs :   L. Fairhead , P. Le Van  .
5c      Modif C. Hourdin F. Forget VERSION MARTIENNE
6c
7c
8c  -------------------------------------------------------------------
9c
10c                    MODIF JUIN 2000 (zoom)
11c       .........     Version  du 29/04/97       ..........
12c
13c   Nouveaux parametres nitergdiv,nitergrot,niterh,tetagdiv,tetagrot,
14c   tetatemp   ajoutes  pour la dissipation   .
15c
16c   Autre parametre ajoute en fin de liste : ** fxyhypb **
17c
18c   Si fxyhypb = .TRUE. , choix de la fonction a derivee tangente hyperb.
19c   Sinon , choix de fxynew  , a derivee sinusoidale  ..
20c
21c   ......  etatinit = . TRUE. si defrun_new  est appele dans NEWSTART
22c   ETAT0_LMD  ou  LIMIT_LMD  pour l'initialisation de start.dat (dic) et
23c   de limit.dat (dic)  ...........
24c   Sinon  etatinit = . FALSE .
25c
26c   Donc etatinit = .F.  si on veut comparer les valeurs de  alphax ,
27c   alphay,clon,clat, fxyhypb  lues sur  le fichier  start  avec
28c   celles passees  par run.def ,  au debut du gcm, apres l'appel a
29c   lectba . 
30c   Ces parametres definissant entre autres la grille et doivent etre
31c   pareils et coherents , sinon il y aura  divergence du gcm .
32c
33c
34c-----------------------------------------------------------------------
35c   Declarations :
36c   --------------
37! to use  'getin'
38      USE ioipsl_getincom
39      IMPLICIT NONE
40
41#include "dimensions.h"
42#include "paramet.h"
43#include "control.h"
44#include "logic.h"
45#include "serre.h"
46#include "comdissnew.h"
47#include "sponge.h"
48c
49c   arguments:
50c   ---------
51      LOGICAL  etatinit ! should be .false. for a call from gcm.F
52                        ! and .true. for a call from newstart.F
53      INTEGER  tapedef  ! unit number to assign to 'run.def' file
54c
55c   local variables:
56c   ---------------
57
58      CHARACTER ch1*72,ch2*72,ch3*72,ch4*8 ! to store various strings
59      INTEGER tapeout ! unit numbers for (standard) outputs
60      parameter (tapeout=6)
61      integer tapeerr ! unit number for error message
62      parameter (tapeerr=0)
63
64c     REAL clonn,clatt,alphaxx,alphayy
65c     LOGICAL  fxyhypbb
66      INTEGER ierr
67      REAL clonn,clatt,grossismxx,grossismyy
68      REAL dzoomxx,dzoomyy,tauxx,tauyy,temp
69      LOGICAL  fxyhypbb, ysinuss
70
71
72c   initialisations:
73c   ----------------
74 
75!      tapeout=6
76
77c-----------------------------------------------------------------------
78c  Parametres de controle du run:
79c-----------------------------------------------------------------------
80
81
82!Initialisation des parametres "terrestres", qui ne concernent pas
83!le modele martien et ne sont donc plus lues dans "run.def"
84
85        anneeref=0
86        ! Note: anneref is a common in 'control.h'
87
88      OPEN(tapedef,file='run.def',status='old',form='formatted'
89     .     ,iostat=ierr)
90      CLOSE(tapedef) ! first call to getin will open the file
91
92      IF(ierr.EQ.0) THEN ! if file run.def is found
93        WRITE(tapeout,*) "DEFRUN_NEW: reading file run.def"
94       
95        WRITE(tapeout,*) ""
96        WRITE(tapeout,*) "Number of days to run:"
97        nday=1 ! default value
98        call getin("nday",nday)
99        WRITE(tapeout,*)" nday = ",nday
100
101        WRITE(tapeout,*) ""
102        WRITE(tapeout,*) "Number of dynamical steps per day:",
103     & "(should be a multiple of iperiod)"
104        day_step=960 ! default value
105        call getin("day_step",day_step)
106        WRITE(tapeout,*)" day_step = ",day_step
107
108        WRITE(tapeout,*) ""
109        WRITE(tapeout,*) "periode pour le pas Matsuno (en pas)"
110        iperiod=5 ! default value
111        call getin("iperiod",iperiod)
112        WRITE(tapeout,*)" iperiod = ",iperiod
113
114        WRITE(tapeout,*) ""
115        WRITE(tapeout,*) "periode de sortie des variables de ",
116     &  "controle (en pas)"
117        iconser=120 ! default value
118        call getin("iconser",iconser)
119        WRITE(tapeout,*)" iconser = ",iconser
120
121        WRITE(tapeout,*) ""
122        WRITE(tapeout,*) "periode de la dissipation (en pas)"
123        idissip=5 ! default value
124        call getin("idissip",idissip)
125        WRITE(tapeout,*)" idissip = ",idissip
126
127ccc  ....   P. Le Van , modif le 29/04/97 .pour la dissipation  ...
128ccc
129        WRITE(tapeout,*) ""
130        WRITE(tapeout,*) "choix de l'operateur de dissipation ",
131     & "(star ou  non star )"
132        lstardis=.true. ! default value
133        call getin("lstardis",lstardis)
134        WRITE(tapeout,*)" lstardis = ",lstardis
135
136        WRITE(tapeout,*) ""
137        WRITE(tapeout,*) "avec ou sans coordonnee hybrides"
138        hybrid=.true. ! default value
139        call getin("hybrid",hybrid)
140        WRITE(tapeout,*)" hybrid = ",hybrid
141
142        WRITE(tapeout,*) ""
143        WRITE(tapeout,*) "nombre d'iterations de l'operateur de ",
144     & "dissipation   gradiv "
145        nitergdiv=1 ! default value
146        call getin("nitergdiv",nitergdiv)
147        WRITE(tapeout,*)" nitergdiv = ",nitergdiv
148
149        WRITE(tapeout,*) ""
150        WRITE(tapeout,*) "nombre d'iterations de l'operateur de ",
151     & "dissipation  nxgradrot"
152        nitergrot=2 ! default value
153        call getin("nitergrot",nitergrot)
154        WRITE(tapeout,*)" nitergrot = ",nitergrot
155
156        WRITE(tapeout,*) ""
157        WRITE(tapeout,*) "nombre d'iterations de l'operateur de ",
158     & "dissipation  divgrad"
159        niterh=2 ! default value
160        call getin("niterh",niterh)
161        WRITE(tapeout,*)" niterh = ",niterh
162
163        WRITE(tapeout,*) ""
164        WRITE(tapeout,*) "temps de dissipation des plus petites ",
165     & "long.d ondes pour u,v (gradiv)"
166        tetagdiv=4000. ! default value
167        call getin("tetagdiv",tetagdiv)
168        WRITE(tapeout,*)" tetagdiv = ",tetagdiv
169
170        WRITE(tapeout,*) ""
171        WRITE(tapeout,*) "temps de dissipation des plus petites ",
172     & "long.d ondes pour u,v(nxgradrot)"
173        tetagrot=5000. ! default value
174        call getin("tetagrot",tetagrot)
175        WRITE(tapeout,*)" tetagrot = ",tetagrot
176
177        WRITE(tapeout,*) ""
178        WRITE(tapeout,*) "temps de dissipation des plus petites ",
179     & "long.d ondes pour  h ( divgrad)"
180        tetatemp=5000. ! default value
181        call getin("tetatemp",tetatemp)
182        WRITE(tapeout,*)" tetatemp = ",tetatemp
183
184        WRITE(tapeout,*) ""
185        WRITE(tapeout,*) "coefficient pour gamdissip"
186        coefdis=0. ! default value
187        call getin("coefdis",coefdis)
188        WRITE(tapeout,*)" coefdis = ",coefdis
189c
190c    ...............................................................
191
192        WRITE(tapeout,*) ""
193        WRITE(tapeout,*) "choix du shema d'integration temporelle ",
194     & "(true==Matsuno ou false==Matsuno-leapfrog)"
195        purmats=.false. ! default value
196        call getin("purmats",purmats)
197        WRITE(tapeout,*)" purmats = ",purmats
198
199        WRITE(tapeout,*) ""
200        WRITE(tapeout,*) "avec ou sans physique"
201        physic=.true. ! default value
202        call getin("physic",physic)
203        WRITE(tapeout,*)" physic = ",physic
204
205        WRITE(tapeout,*) ""
206        WRITE(tapeout,*) "periode de la physique (en pas)"
207        iphysiq=20 ! default value
208        call getin("iphysiq",iphysiq)
209        WRITE(tapeout,*)" iphysiq = ",iphysiq
210
211        WRITE(tapeout,*) ""
212        WRITE(tapeout,*) "choix d'une grille reguliere"
213        grireg=.true.
214        call getin("grireg",grireg)
215        WRITE(tapeout,*)" grireg = ",grireg
216
217ccc   .... P.Le Van, ajout le 03/01/96 pour l'ecriture phys ...
218c
219        WRITE(tapeout,*) ""
220        WRITE(tapeout,*) "frequence (en pas) de l'ecriture ",
221     & "du fichier diagfi.nc"
222        ecritphy=240
223        call getin("ecritphy",ecritphy)
224        WRITE(tapeout,*)" ecritphy = ",ecritphy
225
226ccc  ....   P. Le Van , ajout  le 7/03/95 .pour le zoom ...
227c     .........   (  modif  le 17/04/96 )   .........
228c
229        if (.not.etatinit ) then
230
231           clonn=63.
232           call getin("clon",clonn)
233           
234           IF( ABS(clon - clonn).GE. 0.001 )  THEN
235             PRINT *,' La valeur de clon passee par run.def est '
236     *       ,'differente de celle lue sur le fichier start '
237             STOP
238           ENDIF
239c
240c
241           clatt=0.
242           call getin("clat",clatt)
243 
244           IF( ABS(clat - clatt).GE. 0.001 )  THEN
245             PRINT *,' La valeur de clat passee par run.def est '
246     *       ,'differente de celle lue sur le fichier start '
247             STOP
248           ENDIF
249
250           grossismxx=1.0
251           call getin("grossismx",grossismxx)
252
253           if(grossismxx.eq.0) then 
254             write(*,*)
255             write(*,*)'ERREUR : dans run.def, grossismx =0'
256             write(*,*)'Attention a ne pas utiliser une version de'
257             write(*,*)'run.def avant le nouveau zoom LMDZ2.3 (06/2000)'
258             write(*,*)'(Il faut ajouter grossismx,dzoomx,etc... a la'
259             write(*,*)'place de alphax, alphay. cf. dyn3d). '
260             write(*,*)
261             stop
262           end if
263
264           IF( ABS(grossismx - grossismxx).GE. 0.001 )  THEN
265             PRINT *,' La valeur de grossismx passee par run.def est '
266     *       ,'differente de celle lue sur le fichier  start =',
267     *        grossismx
268             if (grossismx.eq.0) then
269                  write(*,*) 'OK,Normal : c est un vieux start'
270     *             , 'd avant le nouveau zoom LMDZ2.3 (06/2000)'
271                 grossismx=grossismxx
272             else
273                   STOP
274             endif
275           ENDIF
276
277           grossismyy=1.0
278           call getin("grossismy",grossismyy)
279
280           IF( ABS(grossismy - grossismyy).GE. 0.001 )  THEN
281             PRINT *,' La valeur de grossismy passee par run.def est '
282     *       ,'differente de celle lue sur le fichier  start =',
283     *        grossismy
284             if (grossismy.eq.0) then
285                  write(*,*) 'OK,Normal : c est un vieux start'
286     *             , 'd avant le nouveau zoom LMDZ2.3 (06/2000)'
287                 grossismy=grossismyy
288             else
289                   STOP
290             endif
291           ENDIF
292
293
294           IF( grossismx.LT.1. )  THEN
295             PRINT *,' ***  ATTENTION !! grossismx < 1 .   *** '
296             STOP
297           ELSE
298             alphax = 1. - 1./ grossismx
299           ENDIF
300
301           IF( grossismy.LT.1. )  THEN
302             PRINT *,' ***  ATTENTION !! grossismy < 1 .   *** '
303             STOP
304           ELSE
305             alphay = 1. - 1./ grossismy
306           ENDIF
307
308           PRINT *,' '
309           PRINT *,' --> In defrun: alphax alphay  ',alphax,alphay
310           PRINT *,' '
311c
312           fxyhypbb=.false.
313           call getin("fxyhypbb",fxyhypbb)
314 
315           IF( .NOT.fxyhypb )  THEN
316             IF( fxyhypbb )     THEN
317                PRINT *,' ********  PBS DANS  DEFRUN  ******** '
318                PRINT *,' *** fxyhypb lu sur le fichier start est F ',
319     *          'alors  qu il est  T  sur  run.def  ***'
320                STOP
321             ENDIF
322           ELSE
323             IF( .NOT.fxyhypbb )   THEN
324                PRINT *,' ********  PBS DANS  DEFRUN  ******** '
325                PRINT *,' ***  fxyhypb lu sur le fichier start est T ',
326     *         'alors  qu il est  F  sur  run.def  ****  '
327                STOP
328             ENDIF
329           ENDIF
330           dzoomxx=0.0
331           call getin("dzoomx",dzoomxx)
332
333           IF( fxyhypb )  THEN
334              IF( ABS(dzoomx - dzoomxx).GE. 0.001 )  THEN
335                PRINT *,' La valeur de dzoomx passee par run.def est '
336     *          ,'differente de celle lue sur le fichier  start '
337                STOP
338              ENDIF
339           ENDIF
340
341           dzoomyy=0.0
342           call getin("dzoomy",dzoomyy)
343
344           IF( fxyhypb )  THEN
345              IF( ABS(dzoomy - dzoomyy).GE. 0.001 )  THEN
346                PRINT *,' La valeur de dzoomy passee par run.def est '
347     *          ,'differente de celle lue sur le fichier  start '
348                STOP
349              ENDIF
350           ENDIF
351
352           tauxx=2.0
353           call getin("taux",tauxx)
354
355           tauyy=2.0
356           call getin("tauy",tauyy)
357
358           IF( fxyhypb )  THEN
359              IF( ABS(taux - tauxx).GE. 0.001 )  THEN
360                WRITE(6,*)' La valeur de taux passee par run.def est',
361     *             'differente de celle lue sur le fichier  start '
362                CALL ABORT
363              ENDIF
364
365              IF( ABS(tauy - tauyy).GE. 0.001 )  THEN
366                WRITE(6,*)' La valeur de tauy passee par run.def est',
367     *          'differente de celle lue sur le fichier  start '
368                CALL ABORT
369              ENDIF
370           ENDIF
371 
372        ELSE    ! Below, case when etainit=.true.
373
374           WRITE(tapeout,*) ""
375           WRITE(tapeout,*) "longitude en degres du centre du zoom"
376           clon=63. ! default value
377           call getin("clon",clon)
378           WRITE(tapeout,*)" clon = ",clon
379           
380c
381           WRITE(tapeout,*) ""
382           WRITE(tapeout,*) "latitude en degres du centre du zoom "
383           clat=0. ! default value
384           call getin("clat",clat)
385           WRITE(tapeout,*)" clat = ",clat
386
387           WRITE(tapeout,*) ""
388           WRITE(tapeout,*) "facteur de grossissement du zoom,",
389     & " selon longitude"
390           grossismx=1.0 ! default value
391           call getin("grossismx",grossismx)
392           WRITE(tapeout,*)" grossismx = ",grossismx
393
394           WRITE(tapeout,*) ""
395           WRITE(tapeout,*) "facteur de grossissement du zoom ,",
396     & " selon latitude"
397           grossismy=1.0 ! default value
398           call getin("grossismy",grossismy)
399           WRITE(tapeout,*)" grossismy = ",grossismy
400
401           IF( grossismx.LT.1. )  THEN
402            PRINT *,' ***  ATTENTION !! grossismx < 1 .   *** '
403            STOP
404           ELSE
405             alphax = 1. - 1./ grossismx
406           ENDIF
407
408           IF( grossismy.LT.1. )  THEN
409             PRINT *,' ***  ATTENTION !! grossismy < 1 .   *** '
410             STOP
411           ELSE
412             alphay = 1. - 1./ grossismy
413           ENDIF
414
415           PRINT *,' Defrun  alphax alphay  ',alphax,alphay
416c
417           WRITE(tapeout,*) ""
418           WRITE(tapeout,*) "Fonction  f(y)  hyperbolique  si = .true.",
419     &  ", sinon  sinusoidale"
420           fxyhypb=.false. ! default value
421           call getin("fxyhypb",fxyhypb)
422           WRITE(tapeout,*)" fxyhypb = ",fxyhypb
423
424           WRITE(tapeout,*) ""
425           WRITE(tapeout,*) "extension en longitude de la zone du zoom",
426     & " (fraction de la zone totale)"
427           dzoomx=0. ! default value
428           call getin("dzoomx",dzoomx)
429           WRITE(tapeout,*)" dzoomx = ",dzoomx
430
431           WRITE(tapeout,*) ""
432           WRITE(tapeout,*) "extension en latitude de la zone du zoom",
433     & " (fraction de la zone totale)"
434           dzoomy=0. ! default value
435           call getin("dzoomy",dzoomy)
436           WRITE(tapeout,*)" dzoomy = ",dzoomy
437
438           WRITE(tapeout,*) ""
439           WRITE(tapeout,*) "raideur du zoom en  X"
440           taux=2. ! default value
441           call getin("taux",taux)
442           WRITE(tapeout,*)" taux = ",taux
443
444           WRITE(tapeout,*) ""
445           WRITE(tapeout,*) "raideur du zoom en  Y"
446           tauy=2.0 ! default value
447           call getin("tauy",tauy)
448           WRITE(tapeout,*)" tauy = ",tauy
449
450        END IF ! of if (.not.etatinit )
451
452        WRITE(tapeout,*) ""
453        WRITE(tapeout,*) "Avec sponge layer"
454        callsponge=.true. ! default value
455        call getin("callsponge",callsponge)
456        WRITE(tapeout,*)" callsponge = ",callsponge
457
458        WRITE(tapeout,*) ""
459        WRITE(tapeout,*) "Sponge:  mode0(u=v=0), mode1(u=umoy,v=0), ",
460     & "mode2(u=umoy,v=vmoy)"
461        mode_sponge=2 ! default value
462        call getin("mode_sponge",mode_sponge)
463        WRITE(tapeout,*)" mode_sponge = ",mode_sponge
464
465        WRITE(tapeout,*) ""
466        WRITE(tapeout,*) "Sponge:  hauteur de sponge (km)"
467        hsponge=90.0 ! default value
468        call getin("hsponge",hsponge)
469        WRITE(tapeout,*)" hsponge = ",hsponge
470
471        WRITE(tapeout,*) ""
472        WRITE(tapeout,*) "Sponge:  tetasponge (secondes)"
473        tetasponge=50000.0
474        call getin("tetasponge",tetasponge)
475        WRITE(tapeout,*)" tetasponge = ",tetasponge
476
477
478      WRITE(tapeout,*) '-----------------------------------------------'
479      WRITE(tapeout,*) ' '
480      WRITE(tapeout,*) ' '
481c
482
483c       Unlike on Earth (cf LMDZ2.2) , always a regular grid on Mars :
484        ysinus = .false. !Mars Mettre a jour
485
486
487      WRITE(tapeout,*) '-----------------------------------------------'
488      WRITE(tapeout,*) ' '
489      WRITE(tapeout,*) ' '
490cc
491      ELSE
492        write(tapeerr,*) ' WHERE IS run.def ? WE NEED IT !!!!!!!!!!!!!!'
493        stop
494      ENDIF ! of IF(ierr.eq.0)
495
496c     Test sur le zoom
497
498      if((grossismx.eq.1).and.(grossismy.eq.1)) then 
499c        Pas de zoom :
500         write(tapeout,*) 'No zoom ? -> fxyhypb set to False'
501     &   ,'           (It runs better that way)'
502         fxyhypb = .false.
503      else     
504c        Avec Zoom
505         if (.not.fxyhypb) stop 'With zoom, fxyhypb should be set to T
506     &in run.def for this version... -> STOP ! '     
507      end if
508
509      RETURN
510      END
Note: See TracBrowser for help on using the repository browser.