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