source: trunk/LECTURE/lect.pro @ 2

Last change on this file since 2 was 2, checked in by opalod, 22 years ago

Initial revision

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