source: trunk/MESOSCALE/LMDZ.MARS/libf_gcm/dyn3d/ini_archive.F @ 3576

Last change on this file since 3576 was 57, checked in by aslmd, 14 years ago

mineur LMD_MM_MARS: ajout du GCM ancienne physique, systeme maintenant complet sur SVN (ne manque que la base de donnees d'etats initiaux)

File size: 15.1 KB
Line 
1c=======================================================================
2      subroutine ini_archive(nid,idayref,phis,tab_cntrl_fi)
3c=======================================================================
4c
5c
6c   Date:    01/1997
7c   ----
8c
9c   Objet:  ecriture de l'entete du fichier "start_archive"
10c   -----
11c
12c        Proche de iniwrite.F
13c
14c        On ajoute dans le tableau "tab_cntrl" (dynamique), a partir de 51,
15c        les valeurs de tab_cntrl_fi (les 38 parametres de controle physiques
16c        du RUN + ptotal et cotoicetotal)
17c
18c                       tab_cntrl(50+l)=tab_cntrl_fi(l)
19c
20c   Arguments:
21c   ---------
22c
23c       Inputs:
24c   ------
25c
26c       nid            unite logique du fichier "start_archive"
27c       idayref        Valeur du jour initial a mettre dans
28c                      l'entete du fichier "start_archive"
29c       phis           geopotentiel au sol
30c       tab_cntrl_fi   tableau des param physiques
31c
32
33c=======================================================================
34 
35      implicit none
36
37#include "dimensions.h"
38#include "paramet.h"
39#include "comconst.h"
40#include "comvert.h"
41#include "comgeom.h"
42#include "temps.h"
43#include "ener.h"
44#include "logic.h"
45#include "description.h"
46#include "serre.h"
47#include "netcdf.inc"
48#include "control.h"
49
50c-----------------------------------------------------------------------
51c   Declarations
52c-----------------------------------------------------------------------
53
54c   Local:
55c   ------
56      INTEGER   length,l
57      parameter (length = 100)
58      REAL              tab_cntrl(length) ! tableau des parametres du run
59      INTEGER   loop
60      INTEGER   ierr, setvdim, putvdim, putdat, setname,cluvdb
61      INTEGER   setdim
62      INTEGER   ind1,indlast
63
64c   Arguments:
65c   ----------
66      INTEGER*4 idayref
67      REAL              phis(ip1jmp1)
68      REAL              tab_cntrl_fi(length)
69
70!Mars --------Ajouts-----------
71c   Variables locales pour NetCDF:
72c
73      INTEGER dims2(2), dims3(3), dims4(4)
74      INTEGER idim_index
75      INTEGER idim_rlonu, idim_rlonv, idim_rlatu, idim_rlatv
76      INTEGER idim_llmp1,idim_llm
77      INTEGER idim_tim
78      INTEGER nid,nvarid
79      real sig_s(llm),s(llm)
80
81      pi  = 2. * ASIN(1.)
82
83
84c-----------------------------------------------------------------------
85c   Remplissage du tableau des parametres de controle du RUN  (dynamique)
86c-----------------------------------------------------------------------
87
88      DO l=1,length
89         tab_cntrl(l)=0.
90      ENDDO
91
92ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
93      tab_cntrl(1)  = FLOAT(iim) ! nombre de points en longitude
94      tab_cntrl(2)  = FLOAT(jjm) ! nombre de points en latitude
95      tab_cntrl(3)  = FLOAT(llm) ! nombre de couches
96      tab_cntrl(4)  = FLOAT(idayref) ! jour 0
97      tab_cntrl(5)  = rad ! rayon de mars(m) ~3397200
98      tab_cntrl(6)  = omeg ! vitesse de rotation (rad.s-1)
99      tab_cntrl(7)  = g   ! gravite (m.s-2) ~3.72
100      tab_cntrl(8)  = cpp
101      tab_cntrl(8)  = 43.49 !mars temporaire Masse molaire de l''atm (g.mol-1) ~43.49
102      tab_cntrl(9)  = kappa ! = r/cp  ~0.256793 (=rcp dans physique)
103      tab_cntrl(10) = daysec ! duree du sol (s)  ~88775
104      tab_cntrl(11) = dtvr ! pas de temps de la dynamique (s)
105      tab_cntrl(12) = etot0 ! energie totale    !
106      tab_cntrl(13) = ptot0 ! pression totalei   !    variables
107      tab_cntrl(14) = ztot0 ! enstrophie totale   !  de controle
108      tab_cntrl(15) = stot0 ! enthalpie totale   !    globales
109      tab_cntrl(16) = ang0 ! moment cinetique  !
110      tab_cntrl(17) = pa
111      tab_cntrl(18) = preff
112
113c    .....    parametres  pour le zoom      ......   
114
115      tab_cntrl(19)  = clon ! longitude en degres du centre du zoom
116      tab_cntrl(20)  = clat ! latitude en degres du centre du zoom
117      tab_cntrl(21)  = grossismx ! facteur de grossissement du zoom,selon longitude
118      tab_cntrl(22)  = grossismy ! facteur de grossissement du zoom ,selon latitude
119
120      IF ( fxyhypb )   THEN
121       tab_cntrl(23) = 1.
122       tab_cntrl(24) = dzoomx ! extension en longitude  de la zone du zoom
123       tab_cntrl(25) = dzoomy ! extension en latitude  de la zone du zoom
124      ELSE
125       tab_cntrl(23) = 0.
126       tab_cntrl(24) = dzoomx ! extension en longitude  de la zone du zoom
127       tab_cntrl(25) = dzoomy ! extension en latitude  de la zone du zoom
128       tab_cntrl(26) = 0.
129       IF ( ysinus)  tab_cntrl(26) = 1.
130      ENDIF
131
132c-----------------------------------------------------------------------
133c   Copie du tableau des parametres de controle du RUN  (physique)
134c               dans le tableau dynamique
135c-----------------------------------------------------------------------
136
137      DO l=1,50
138         tab_cntrl(50+l)=tab_cntrl_fi(l)
139      ENDDO
140
141c=======================================================================
142c       Ecriture NetCDF de l''entete du fichier "start_archive"
143c=======================================================================
144
145c
146c Preciser quelques attributs globaux:
147c
148      ierr = NF_PUT_ATT_TEXT (nid, NF_GLOBAL, "title", 27,
149     .                       "Fichier start_archive")
150c
151c Definir les dimensions du fichiers:
152c
153c     CHAMPS AJOUTES POUR LA VISUALISATION T,ps, etc... avec Grads ou ferret:
154      ierr = NF_DEF_DIM (nid, "latitude", jjp1, idim_rlatu)
155      ierr = NF_DEF_DIM (nid, "longitude", iip1, idim_rlonv)
156      ierr = NF_DEF_DIM (nid, "altitude", llm, idim_llm)
157
158
159      ierr = NF_DEF_DIM (nid,"index", length, idim_index)
160      ierr = NF_DEF_DIM (nid,"rlonu", iip1, idim_rlonu)
161      ierr = NF_DEF_DIM (nid,"rlatv", jjm, idim_rlatv)
162      ierr = NF_DEF_DIM (nid,"interlayer", llmp1, idim_llmp1)
163      ierr = NF_DEF_DIM (nid,"Time", NF_UNLIMITED, idim_tim)
164
165c
166      ierr = NF_ENDDEF(nid) ! sortir du mode de definition
167
168c-----------------------------------------------------------------------
169c  Ecriture du tableau des parametres du run
170c-----------------------------------------------------------------------
171
172      call def_var(nid,"Time","Time","days since 00:00:00",1,
173     .            idim_tim,nvarid,ierr)
174
175      ierr = NF_REDEF (nid)
176#ifdef NC_DOUBLE
177      ierr = NF_DEF_VAR (nid,"controle",NF_DOUBLE,1,idim_index,nvarid)
178#else
179      ierr = NF_DEF_VAR (nid,"controle",NF_FLOAT,1,idim_index,nvarid)
180#endif
181      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
182     .                       "Parametres de controle")
183      ierr = NF_ENDDEF(nid)
184#ifdef NC_DOUBLE
185      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,tab_cntrl)
186#else
187      ierr = NF_PUT_VAR_REAL (nid,nvarid,tab_cntrl)
188#endif
189
190c-----------------------------------------------------------------------
191c  Ecriture des longitudes et latitudes
192c-----------------------------------------------------------------------
193
194      ierr = NF_REDEF (nid)
195#ifdef NC_DOUBLE
196      ierr = NF_DEF_VAR (nid,"rlonu",NF_DOUBLE,1,idim_rlonu,nvarid)
197#else
198      ierr = NF_DEF_VAR (nid,"rlonu",NF_FLOAT,1,idim_rlonu,nvarid)
199#endif
200      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 23,
201     .                       "Longitudes des points U")
202      ierr = NF_ENDDEF(nid)
203#ifdef NC_DOUBLE
204      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonu)
205#else
206      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonu)
207#endif
208c
209      ierr = NF_REDEF (nid)
210#ifdef NC_DOUBLE
211      ierr = NF_DEF_VAR (nid,"rlatu",NF_DOUBLE,1,idim_rlatu,nvarid)
212#else
213      ierr = NF_DEF_VAR (nid,"rlatu",NF_FLOAT,1,idim_rlatu,nvarid)
214#endif
215      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
216     .                       "Latitudes des points U")
217      ierr = NF_ENDDEF(nid)
218#ifdef NC_DOUBLE
219      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatu)
220#else
221      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatu)
222#endif
223c
224      ierr = NF_REDEF (nid)
225#ifdef NC_DOUBLE
226      ierr = NF_DEF_VAR (nid,"rlonv",NF_DOUBLE,1,idim_rlonv,nvarid)
227#else
228      ierr = NF_DEF_VAR (nid,"rlonv",NF_FLOAT,1,idim_rlonv,nvarid)
229#endif
230      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 23,
231     .                       "Longitudes des points V")
232      ierr = NF_ENDDEF(nid)
233#ifdef NC_DOUBLE
234      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonv)
235#else
236      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonv)
237#endif
238c
239      ierr = NF_REDEF (nid)
240#ifdef NC_DOUBLE
241      ierr = NF_DEF_VAR (nid,"rlatv",NF_DOUBLE,1,idim_rlatv,nvarid)
242#else
243      ierr = NF_DEF_VAR (nid,"rlatv",NF_FLOAT,1,idim_rlatv,nvarid)
244#endif
245      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
246     .                       "Latitudes des points V")
247      ierr = NF_ENDDEF(nid)
248#ifdef NC_DOUBLE
249      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatv)
250#else
251      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatv)
252#endif
253
254c-----------------------------------------------------------------------
255c  Ecriture des niveaux verticaux
256c-----------------------------------------------------------------------
257
258c
259      ierr = NF_REDEF (nid)
260#ifdef NC_DOUBLE
261      ierr = NF_DEF_VAR (nid,"ap",NF_DOUBLE,1,idim_llmp1,nvarid)
262#else
263      ierr = NF_DEF_VAR (nid,"ap",NF_FLOAT,1,idim_llmp1,nvarid)
264#endif
265      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 32,
266     .                       "Coef A: niveaux pression hybride")
267      ierr = NF_ENDDEF(nid)
268#ifdef NC_DOUBLE
269      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,ap)
270#else
271      ierr = NF_PUT_VAR_REAL (nid,nvarid,ap)
272#endif
273c
274      ierr = NF_REDEF (nid)
275#ifdef NC_DOUBLE
276      ierr = NF_DEF_VAR (nid,"bp",NF_DOUBLE,1,idim_llmp1,nvarid)
277#else
278      ierr = NF_DEF_VAR (nid,"bp",NF_FLOAT,1,idim_llmp1,nvarid)
279#endif
280      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 35,
281     .                       "Coefficient B niveaux sigma hybride")
282      ierr = NF_ENDDEF(nid)
283#ifdef NC_DOUBLE
284      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,bp)
285#else
286      ierr = NF_PUT_VAR_REAL (nid,nvarid,bp)
287#endif
288c
289c ----------------------
290      ierr = NF_REDEF (nid)
291#ifdef NC_DOUBLE
292      ierr = NF_DEF_VAR (nid,"aps",NF_DOUBLE,1,idim_llm,nvarid)
293#else
294      ierr = NF_DEF_VAR (nid,"aps",NF_FLOAT,1,idim_llm,nvarid)
295#endif
296      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 36,
297     .      "Coef AS: hybrid pressure in midlayers")
298      ierr = NF_ENDDEF(nid)
299#ifdef NC_DOUBLE
300      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,aps)
301#else
302      ierr = NF_PUT_VAR_REAL (nid,nvarid,aps)
303#endif
304c
305c ----------------------
306      ierr = NF_REDEF (nid)
307#ifdef NC_DOUBLE
308      ierr = NF_DEF_VAR (nid,"bps",NF_DOUBLE,1,idim_llm,nvarid)
309#else
310      ierr = NF_DEF_VAR (nid,"bps",NF_FLOAT,1,idim_llm,nvarid)
311#endif
312      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 30,
313     .      "Coef BS: hybrid sigma midlayers")
314      ierr = NF_ENDDEF(nid)
315#ifdef NC_DOUBLE
316      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,bps)
317#else
318      ierr = NF_PUT_VAR_REAL (nid,nvarid,bps)
319#endif
320c
321c ----------------------
322
323      ierr = NF_REDEF (nid)
324#ifdef NC_DOUBLE
325      ierr = NF_DEF_VAR (nid,"presnivs",NF_DOUBLE,1,idim_llm,nvarid)
326#else
327      ierr = NF_DEF_VAR (nid,"presnivs",NF_FLOAT,1,idim_llm,nvarid)
328#endif
329      ierr = NF_ENDDEF(nid)
330#ifdef NC_DOUBLE
331      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,presnivs)
332#else
333      ierr = NF_PUT_VAR_REAL (nid,nvarid,presnivs)
334#endif
335c ------------------------------------------------------------------
336c  Variable uniquement pour visualisation avec Grads ou Ferret
337c ------------------------------------------------------------------
338      ierr = NF_REDEF (nid)
339#ifdef NC_DOUBLE
340      ierr = NF_DEF_VAR (nid,"latitude",NF_DOUBLE,1,idim_rlatu,nvarid)
341#else
342      ierr = NF_DEF_VAR (nid,"latitude",NF_FLOAT,1,idim_rlatu,nvarid)
343#endif
344      ierr =NF_PUT_ATT_TEXT(nid,nvarid,'units',13,"degrees_north")
345      ierr = NF_PUT_ATT_TEXT (nid,nvarid,"long_name", 14,
346     .      "North latitude")
347      ierr = NF_ENDDEF(nid)
348#ifdef NC_DOUBLE
349      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatu/pi*180)
350#else
351      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatu/pi*180)
352#endif
353c----------------------
354       ierr = NF_REDEF (nid)
355#ifdef NC_DOUBLE
356      ierr =NF_DEF_VAR(nid,"longitude", NF_DOUBLE, 1, idim_rlonv,nvarid)
357#else
358      ierr = NF_DEF_VAR(nid,"longitude", NF_FLOAT, 1, idim_rlonv,nvarid)
359#endif
360      ierr = NF_PUT_ATT_TEXT (nid,nvarid,"long_name", 14,
361     .      "East longitude")
362      ierr = NF_PUT_ATT_TEXT(nid,nvarid,'units',12,"degrees_east")
363      ierr = NF_ENDDEF(nid)
364#ifdef NC_DOUBLE
365      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonv/pi*180)
366#else
367      ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonv/pi*180)
368#endif
369c--------------------------
370      ierr = NF_REDEF (nid)
371#ifdef NC_DOUBLE
372      ierr = NF_DEF_VAR (nid, "altitude", NF_DOUBLE, 1,
373     .       idim_llm,nvarid)
374#else
375      ierr = NF_DEF_VAR (nid, "altitude", NF_FLOAT, 1,
376     .       idim_llm,nvarid)
377#endif
378      ierr = NF_PUT_ATT_TEXT (nid,nvarid,"long_name",10,"pseudo-alt")
379      ierr = NF_PUT_ATT_TEXT (nid,nvarid,'units',2,"km")
380      ierr = NF_PUT_ATT_TEXT (nid,nvarid,'positive',2,"up")
381
382      ierr = NF_ENDDEF(nid)
383#ifdef NC_DOUBLE
384      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,pseudoalt)
385#else
386      ierr = NF_PUT_VAR_REAL (nid,nvarid,pseudoalt)
387#endif
388
389c-----------------------------------------------------------------------
390c  Ecriture aire et coefficients de passage cov. <-> contra. <--> naturel
391c-----------------------------------------------------------------------
392
393      ierr = NF_REDEF (nid)
394      dims2(1) = idim_rlonu
395      dims2(2) = idim_rlatu
396#ifdef NC_DOUBLE
397      ierr = NF_DEF_VAR (nid,"cu",NF_DOUBLE,2,dims2,nvarid)
398#else
399      ierr = NF_DEF_VAR (nid,"cu",NF_FLOAT,2,dims2,nvarid)
400#endif
401      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 29,
402     .                       "Coefficient de passage pour U")
403      ierr = NF_ENDDEF(nid)
404#ifdef NC_DOUBLE
405      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,cu)
406#else
407      ierr = NF_PUT_VAR_REAL (nid,nvarid,cu)
408#endif
409c
410      ierr = NF_REDEF (nid)
411      dims2(1) = idim_rlonv
412      dims2(2) = idim_rlatv
413#ifdef NC_DOUBLE
414      ierr = NF_DEF_VAR (nid,"cv",NF_DOUBLE,2,dims2,nvarid)
415#else
416      ierr = NF_DEF_VAR (nid,"cv",NF_FLOAT,2,dims2,nvarid)
417#endif
418      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 29,
419     .                       "Coefficient de passage pour V")
420      ierr = NF_ENDDEF(nid)
421#ifdef NC_DOUBLE
422      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,cv)
423#else
424      ierr = NF_PUT_VAR_REAL (nid,nvarid,cv)
425#endif
426c
427c Aire de chaque maille:
428c
429      ierr = NF_REDEF (nid)
430      dims2(1) = idim_rlonv
431      dims2(2) = idim_rlatu
432#ifdef NC_DOUBLE
433      ierr = NF_DEF_VAR (nid,"aire",NF_DOUBLE,2,dims2,nvarid)
434#else
435      ierr = NF_DEF_VAR (nid,"aire",NF_FLOAT,2,dims2,nvarid)
436#endif
437      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 22,
438     .                       "Aires de chaque maille")
439      ierr = NF_ENDDEF(nid)
440#ifdef NC_DOUBLE
441      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,aire)
442#else
443      ierr = NF_PUT_VAR_REAL (nid,nvarid,aire)
444#endif
445
446c-----------------------------------------------------------------------
447c  Ecriture du geopentiel au sol
448c-----------------------------------------------------------------------
449
450      ierr = NF_REDEF (nid)
451      dims2(1) = idim_rlonv
452      dims2(2) = idim_rlatu
453#ifdef NC_DOUBLE
454      ierr = NF_DEF_VAR (nid,"phisinit",NF_DOUBLE,2,dims2,nvarid)
455#else
456      ierr = NF_DEF_VAR (nid,"phisinit",NF_FLOAT,2,dims2,nvarid)
457#endif
458      ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 19,
459     .                       "Geopotentiel au sol")
460      ierr = NF_ENDDEF(nid)
461#ifdef NC_DOUBLE
462      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,phis)
463#else
464      ierr = NF_PUT_VAR_REAL (nid,nvarid,phis)
465#endif
466
467      PRINT*,'iim,jjm,llm,idayref',iim,jjm,llm,idayref
468      PRINT*,'rad,omeg,g,mugaz,kappa',
469     s rad,omeg,g,43.49,kappa !mars temporaire (ecrire mugaz ensuite)
470      PRINT*,'daysec,dtvr',daysec,dtvr
471
472      RETURN
473      END
Note: See TracBrowser for help on using the repository browser.