source: trunk/SRC/Obsolete/lect.pro

Last change on this file was 371, checked in by pinsard, 16 years ago

improvements of headers (alignments of IDL prompt in examples)

  • Property svn:keywords set to Id
File size: 9.2 KB
Line 
1;+
2;
3; @file_comments
4; lit les fichiers Vairmer de date1 a date2 et en sort un tableau
5; 1D, 2D ou 3D qui peut etre reutilise pour une courbe / hov / animation
6; cette fonction modifie aussi les variables globales:
7; varname: huit lettres: nom Vairmer du champ a tracer
8; vargrid:1 lettre : nom de la grille
9; varexp: trois lettres :nom de l'experience
10;
11; @obsolete
12;
13; @categories
14; Graphics, Reading
15;
16; @examples
17;
18;   IDL> resultat=lec('nom_Vairmer',date1,date2,'nomexp','direc',BOITE=boite)
19;
20; @param nomchamp {in}{required}
21; nom de champ Vairmer (chaine de 8 caracteres commencant par VO ou SO
22;
23; @param date1 {in}{required}
24; date de depart de la serie temporelle a extraire
25;
26; @param date2 {in}{required}
27; date de fin de la serie temporelle a extraire
28;
29; @param nomexp {in}{required} {default=prefix}
30; nom de l'experience a lire
31;
32; @param direc {in}{required}
33; 'x' 'y' 'z' 'xy' 'xz' 'yz' 'xyz' 'xt' 'yt' 'zt' 'xyt' 'xzt'
34; 'yzt' 'xyzt' directions selon lesquelles effectuer les moyennes
35; (si rien n'est donne on n'effectue pas de moyenne)
36;
37; @keyword BOITE {in}
38; boite sur laquelle integrer (par defaut tout le domaine)
39;
40; @keyword ANOM {in}
41; type de fichiers ('SE','AN','') a relire pour calc une  anomalie
42;
43; @keyword EXPANOM {in}
44; experience pour laquelle on veut calculer une anomalie
45; par defaut la meme que nomexp
46;
47; @uses
48; <pro>common</pro>
49; <pro>vraidate</pro>
50; <pro>juldate</pro>
51;
52; @history
53; Jerome Vialard (jv\@lodyc.jussieu.fr)
54; 2/7/98
55;
56; @version
57; $Id$
58;
59;-
60function lect, nomchamp,date1,date2,nomexp,direc,BOITE=boite, $
61               ANOM=anom,EXPANOM=expanom
62;,REPEAT=repeat
63;
64  compile_opt idl2, strictarrsubs, obsolete
65;
66@common
67   tempsun = systime(1)         ; pour key_performance
68;
69   nomchamp = strupcase(nomchamp)
70   date1=vraidate(date1)
71   date2=vraidate(date2)
72;
73   dim=string(format='(a2)',nomchamp)
74;
75;------------------------------------------------------------
76; specification de la date et de l'experience
77;------------------------------------------------------------
78;
79   if fictype(date1) ne fictype(date2) then $
80    return, report('Les deux dates doivent correspondre au meme type de fic vairmer')
81   fictyp = fictype(date1)
82;-------------------------------------------------------------
83; creation du nom du fichier
84;-------------------------------------------------------------
85   if n_elements(nomexp) EQ 0 then nomexp = prefix
86   ficname=iodir+nomchamp+'.'+strcompress(date1,/remove_all)
87   ficname=ficname +'-'+fictyp+'-'+strcompress(date2,/remove_all)+'.'+nomexp
88   if (keyword_set(anom)) then ficname=ficname +'.'+anom
89   if (keyword_set(expanom)) then ficname=ficname +'-'+expanom
90   case n_elements(boite) of
91      4 : box = strcompress(string(format='(i4,"_",i4,"_",i4,"_",i4)',boite) $
92                            ,/remove_all)
93      6 : box = strcompress(string(format='(i4,"_",i4,"_",i4,"_",i4,"_",i4,"_",i4)',boite),/remove_all)
94      else: box= strcompress(string(format='(i4,"_",i4,"_",i4,"_",i4,"_",i4,"_",i4)',[lon1,lon2,lat1,lat2,prof1,prof2]),/remove_all)
95   ENDCASE
96   if n_elements(direc) EQ 0 then direc = ''
97   ficname=ficname+'.'+box+'.'+direc+'.hovdat'
98;-------------------------------------------------------------
99; Est ce que le fichier de hovmoeller existe ?
100;-------------------------------------------------------------
101;
102; structure du fichier :
103; jpt (valeur de la dim temporelle), dimtableau (dimension du tableau)
104; dimttab[0], dimttab[1], ... (valeur des dim )
105; time (axe des tps), ttab (tableau a lire)
106; def du domaine (lon1,lon2,...  ,prof1,prof2)
107;
108   get_lun, numlec
109   openr, numlec, ficname, /get_lun,ERROR=err, /swap_if_little_endian
110   if (err eq 0) then begin
111      jpt = long(1)
112      dimtableau = long(1)
113      readu, numlec, jpt,dimtableau
114      case dimtableau of
115         1 : begin
116            n1 = long(1)
117            readu, numlec,n1
118            ttab = fltarr(n1)
119         end
120         2 : begin
121            n1 = long(1)
122            n2 = long(1)
123            readu, numlec,n1,n2
124            ttab = fltarr(n1,n2)
125         end
126         3 : begin
127            n1 = long(1)
128            n2 = long(1)
129            n3 = long(1)
130            readu, numlec,n1,n2,n3
131            ttab = fltarr(n1,n2,n3)
132         end
133      endcase
134      time = lonarr(jpt)
135; lecture axe des tps et du tableau
136      readu, numlec,time, ttab
137      newboite = fltarr(6)
138; lecture du domaine
139      readu, numlec,newboite
140      domdef, newboite
141; lecture info complementaire : nom du champs, de l'experience
142      varname='aaaaaaaa'
143      readu, numlec, varname
144      vargrid='a'
145      readu, numlec, vargrid
146      varexp='aaa'
147      readu, numlec, varexp
148;
149      close, numlec
150      free_lun, numlec
151      return, ttab
152   ENDIF
153   close, numlec
154   free_lun, numlec
155;-------------------------------------------------------------
156; changement de domaine
157;-------------------------------------------------------------
158   if keyword_set(boite) then BEGIN
159      Case 1 Of
160         N_Elements(Boite) Eq 1:bte=[lon1, lon2, lat1, lat2, 0.,boite[0]]
161         N_Elements(Boite) Eq 2:bte=[lon1, lon2, lat1, lat2, boite[0],boite[1]]
162         N_Elements(Boite) Eq 4:bte=[Boite, prof1, prof2]
163         N_Elements(Boite) Eq 5:bte=[Boite[0:3], 0, Boite[4]]
164         N_Elements(Boite) Eq 6:bte=Boite
165         Else: return, report('Mauvaise Definition de Boite')
166      endcase
167      oldboite = [lon1, lon2, lat1, lat2, prof1, prof2]
168      domdef, bte
169   ENDIF
170;-------------------------------------------------------------
171;   Boucle de lecture des fichiers
172;-------------------------------------------------------------
173   case fictyp of
174      'DA' : dec = 0.
175      'MO' : dec = 14.
176      'SE' : dec = 14.
177      'AN' : dec = 182.
178   endcase
179;initialisation des variables associees au tps
180   time = lonarr(jptmax)
181   jpt = 0
182   vdat = date1
183; debut de la boucle
184   while (vdat le date2) do begin
185;---------------------------------------------------------------
186; lecture du fichier a la date vdat (vairmer)
187;---------------------------------------------------------------
188      tab = lec(nomchamp,vdat,nomexp,ANOM=anom,EXPANOM=expanom)
189;---------------------------------------------------------------
190; attribution du mask et des tableaux de longitude et latitude...
191;---------------------------------------------------------------
192      if jpt EQ 0 THEN grille, mask, glam, gphi, gdep, nx, ny,nz,premierx,premiery,premierz,dernierx, derniery, dernierz
193;---------------------------------------------------------------
194      if (n_elements(tab) eq 1 and tab[0] eq -1) then begin
195         goto, incrdate
196      endif else begin
197         jpt = jpt + 1
198         if (jpt gt jptmax) then return, report('lect : augmenter jptmax')
199      endelse
200;--------------------------------------------------------
201; Moyenne du champs tab
202;--------------------------------------------------------
203      IF n_params() EQ 5 THEN if direc NE '' then BEGIN
204         if nx EQ 1 OR ny EQ 1 OR nz EQ 1 THEN BEGIN
205            if string(format='(a2)',nomchamp) EQ 'SO' then tab = reform(tab, nx, ny, /over) $
206            ELSE tab = reform(tab, nx, ny, nz, /over)
207         ENDIF
208         tab = moyenne(tab,direc)
209      endif
210      if (jpt eq 1) then begin
211         ttab = tab
212      endif else BEGIN
213         ttab = colle(ttab, tab, (size(tab))[0]+1 )
214      endelse
215      time[jpt-1] = juldate(vdat)+dec
216;--------------------------------------------------------
217; Incrementation de la date
218;--------------------------------------------------------
219      incrdate :
220      case fictyp of
221         'DA' : caldat,juldate(vdat)+1,month,day,year
222         'MO' : begin
223            caldat,julday(month,1,year)+jourdsmois(),month,day,year
224            day=0
225         end
226         'SE' : month=month+1
227         'AN' : year=year+1
228      endcase
229;------------------------------------------------------------
230;   Fin de boucle de lecture des fichiers
231;------------------------------------------------------------
232      vdat=long(10000)*year+long(100)*month+day
233   ENDWHILE
234   if ttab[0] EQ -1 then return, report('Aucun fichier n''a ete lu!')
235;------------------------------------------------------------
236;   Ecriture du fichier
237;------------------------------------------------------------
238   get_lun, numlec
239   openw, numlec, ficname, /get_lun, /swap_if_little_endian
240   taille = size(ttab)
241   writeu, numlec, long(jpt),long(taille[0])
242   case taille[0] of
243      1 : writeu, numlec,long(taille[1])
244      2 : writeu, numlec,long(taille[1]),long(taille[2])
245      3 : writeu, numlec,long(taille[1]),long(taille[2]),long(taille[3])
246   endcase
247   writeu, numlec,long(time[0:jpt-1]), ttab
248   writeu, numlec,float([lon1, lon2, lat1, lat2, prof1, prof2])
249; ecriture info complementaire : nom du champs, de l'experience
250   writeu, numlec, strmid(varname,0,8)
251   writeu, numlec, strmid(vargrid,0,1)
252   writeu, numlec, strmid(varexp,0,3)
253;
254   close, numlec
255   free_lun, numlec
256;-------------------------------------------------------
257;if keyword_set(repeat) then begin
258;   jpt = jpt * repeat
259;   if (jpt gt jptmax) then begin
260;     print, 'lect : augmenter jptmax'
261;     goto, fini
262;   endif
263;   tabadd = ttab
264;   ti
265;endif
266;--------------------------------------------------------
267   if n_elements(oldboite) NE 0 then domdef,  oldboite
268;
269   close, /all
270;
271   IF keyword_set(key_performance) THEN print, 'temps lect', systime(1)-tempsun
272;
273   return, ttab
274
275end
276
277
278
279
Note: See TracBrowser for help on using the repository browser.