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 |
---|
58 | function 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 | |
---|
270 | end |
---|
271 | |
---|
272 | |
---|
273 | |
---|
274 | |
---|