source: trunk/SRC/Obsolete/lect.pro @ 370

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

improvemnts of headers (typo, links)

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