source: trunk/LECTURE/read_ncdf_varget.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: 25.1 KB
Line 
1; le format netcdf et IDL nous permet d''aller lire uniquement la partie de
2; tableau qui nous interesse.
3;
4;  attention, qd il y a un shift il faut faire attention a ce que
5;  l''on fait et en particulier arriver a positionner la boite
6;  specifiee par premierx:dernierx par rapport au tableau contenu dans
7;  le fichier NetCdf.
8;  pour s''y reperer voici un petit dessin
9;
10;  dans le repere 0:jpi, avec le zoom definit par premierx:dernierx
11;
12;        0      j      key-1  key          i              jpi-1
13;        |......|........|     |-----------|----------------|
14;
15;  si on veut savoir comment c''etait avant le shift:
16;
17;        0       i-key     jpi-key-1 jpi-key  jpi-key+j   jpi-1
18;        |--------|--------------|      |........|..........|
19;
20; avant que l''on ajuste au zoom definit par ixminmesh,ixmaxmesh c''etait:
21;
22;   0   ixmin    i-key     jpi-key-1  jpi-key  jpi-key+j   jpi-1     jpidta
23;              +ixmin        +ixmin  +ixmin     +ixmin     +ixmin
24;   |,,,,|--------|--------------|      |........|..........|,,,,,,,,,,,|
25;
26;  apres il suffit de remplacer i et j par premierx ou dernierx qd on
27;  ne fait pas de stride et par premierx*key_stride[0] ou
28;  dernierx*key_stride[0] qd on fait un stride (dans ce cas il faut
29;  aussi remplacer jpi par jpitotal)!
30;
31;
32case 1 OF
33;......................................................................
34;......................................................................
35   varcontient.ndims eq 2:BEGIN ;xy array
36;......................................................................
37;......................................................................
38      case 1 OF
39;,,,,,,,,,,,,,,,,,,,,,,,,
40         keyword_set(key_shift) EQ 0 AND total(key_stride) EQ 3:BEGIN
41; on ne shift pas et il n''y a pas de stride
42;,,,,,,,,,,,,,,,,,,,,,,,,
43            ncdf_varget,cdfid,name,res,offset=[premierx+ixminmesh-ixmindta $
44                                               ,premiery+iyminmesh-iymindta] $
45             ,count=[nx,ny], _extra = ex
46         END
47;,,,,,,,,,,,,,,,,,,,,,,,,
48         keyword_set(key_shift) EQ 0 AND total(key_stride) NE 3:BEGIN
49; on ne shift pas mais il y a un stride
50;,,,,,,,,,,,,,,,,,,,,,,,,
51            ncdf_varget,cdfid,name,res,offset=[premierx*key_stride[0]+ixminmesh-ixmindta $
52                                               ,premiery*key_stride[1]+iyminmesh-iymindta] $
53             ,count=[nx,ny], stride = key_stride[0:1], _extra = ex
54         END
55;,,,,,,,,,,,,,,,,,,,,,,,,
56         keyword_set(key_shift) NE 0 AND total(key_stride) EQ 3:BEGIN
57; on shift mais il n''y a pas de stride
58;,,,,,,,,,,,,,,,,,,,,,,,,
59            case 1 of
60               premierx GE key:BEGIN ; on peut tout couper d''un coup
61                  ncdf_varget,cdfid,name,res,offset=[ixmin-key+premierx $
62                                                     ,premiery+iyminmesh-iymindta] $
63                   ,count=[nx,ny], _extra = ex
64               END
65               dernierx LE key-1:BEGIN ; on peut tout couper d''un coup
66                  ncdf_varget,cdfid,name,res,offset=[jpi-key+ixmin+premierx $
67                                                     ,premiery+iyminmesh-iymindta] $
68                   ,count=[nx,ny], _extra = ex
69               END
70               ELSE:BEGIN       ; Le tableau est separe en 2 morceaux...
71                  ncdf_varget,cdfid,name,tab1,offset=[jpi-key+ixmin+premierx $
72                                                      ,premiery+iyminmesh-iymindta] $
73                   ,count=[key-1-premierx+1,ny], _extra = ex
74                  ncdf_varget,cdfid,name,tab2,offset=[ixmin $
75                                                      ,premiery+iyminmesh-iymindta] $
76                   ,count=[dernierx-key+1,ny], _extra = ex
77                  res = [temporary(tab1), temporary(tab2)]
78               END
79            ENDCASE
80         END
81;,,,,,,,,,,,,,,,,,,,,,,,,
82         keyword_set(key_shift) NE 0 AND total(key_stride) NE 3:BEGIN
83; on shift et il y a un stride
84;,,,,,,,,,,,,,,,,,,,,,,,,
85            case 1 OF           ; case sur la facon de fire le champ
86               premierx GE ceil(1.*key/key_stride[0]):BEGIN ; on peut tout coupe d''un coup
87                  ncdf_varget,cdfid,name,res,offset=[ixmin-key+premierx*key_stride[0] $
88                                                     ,premiery*key_stride[1]+iyminmesh-iymindta] $
89                   ,count=[nx,ny], stride = key_stride[0:1], _extra = ex
90               END
91               dernierx LE (key-1)/key_stride[0]:BEGIN ; on peut tout coupe d''un coup
92                  ncdf_varget,cdfid,name,res,offset=[jpitotal-key+ixmin+premierx*key_stride[0] $
93                                                     ,premiery*key_stride[1]+iyminmesh-iymindta] $
94                   ,count=[nx,ny], stride = key_stride[0:1], _extra = ex
95               END
96               ELSE:BEGIN       ; le tableau est separe en 2 morceaux...
97                  ncdf_varget,cdfid,name,tab1,offset=[jpitotal-key+ixmin+premierx*key_stride[0] $
98                                                      ,premiery*key_stride[1]+iyminmesh-iymindta] $
99                   ,count=[(key-1-premierx*key_stride[0]+1)/key_stride[0],ny] $
100                   , stride = key_stride[0:1], _extra = ex
101; grosse blague de IDL qui sur un vecteur 0 1 2 3 4 5 6 7 8
102; extrait pour offset = 0 ou 1 tjs 5 elements pour un stride de 2 par
103; ex, soit le nombre d''elements/le stride. Il manque donc une colonne
104; quand nombre d''elements-1 est un multiple de stride...CQFD
105; il en manque un bout?
106                  IF ( (key-1-premierx*key_stride[0]) MOD key_stride[0] ) EQ 0 then begin
107                     ncdf_varget,cdfid,name,tab1bis,offset=[jpitotal-1+ixmin $
108                                                            ,premiery*key_stride[1]+iyminmesh-iymindta] $
109                      ,count=[1,ny] $
110                      , stride = [1, key_stride[1]], _extra = ex
111                     tab1bis = reform(tab1bis, 1, ny, /over)
112                     tab1 = [temporary(tab1), temporary(tab1bis)]
113                  ENDIF
114; 2eme bout...
115                  ncdf_varget,cdfid,name,tab2,offset=[ceil(1.*key/key_stride[0])*key_stride[0]-key+ixmin $
116                                                      ,premiery*key_stride[1]+iyminmesh-iymindta] $
117                   ,count=[(dernierx*key_stride[0]-key+1)/key_stride[0],ny] $
118                   , stride = key_stride[0:1], _extra = ex
119; on recolle le tout
120                  res = [temporary(tab1), temporary(tab2)]
121               END
122            ENDCASE             ; case sur la facon de fire le champ
123         END
124      ENDCASE                   ; differentes possibilites de key_shift et key_performance
125   END
126;......................................................................
127;......................................................................
128   varcontient.ndims eq 3 AND (where(varcontient.dim EQ contient.recdim))[0] EQ -1:BEGIN ;xyz array
129;......................................................................
130;......................................................................
131      case 1 of
132;,,,,,,,,,,,,,,,,,,,,,,,,
133         keyword_set(key_shift) EQ 0 AND total(key_stride) EQ 3:BEGIN
134; on ne shift pas et il n''y a pas de stride
135;,,,,,,,,,,,,,,,,,,,,,,,,
136            ncdf_varget,cdfid,name,res,offset=[premierx+ixminmesh-ixmindta $
137                                               ,premiery+iyminmesh-iymindta $
138                                               ,premierz+izminmesh-izmindta] $
139             ,count=[nx,ny,nz], _extra = ex
140         END
141;,,,,,,,,,,,,,,,,,,,,,,,,
142         keyword_set(key_shift) EQ 0 AND total(key_stride) NE 3:BEGIN
143; on ne shift pas mais il y a un stride
144;,,,,,,,,,,,,,,,,,,,,,,,,
145            ncdf_varget,cdfid,name,res,offset=[premierx*key_stride[0]+ixminmesh-ixmindta $
146                                               ,premiery*key_stride[1]+iyminmesh-iymindta $
147                                               ,premierz*key_stride[2]+izminmesh-izmindta] $
148             ,count=[nx,ny,nz], stride = key_stride[0:2], _extra = ex
149         END
150;,,,,,,,,,,,,,,,,,,,,,,,,
151         keyword_set(key_shift) NE 0 AND total(key_stride) EQ 3:BEGIN
152; on shift mais il n''y a pas de stride
153;,,,,,,,,,,,,,,,,,,,,,,,,
154            case 1 of
155               premierx GE key:BEGIN ; on peut tout couper d''un coup
156                  ncdf_varget,cdfid,name,res,offset=[ixmin-key+premierx $
157                                                     ,premiery+iyminmesh-iymindta $
158                                                     ,premierz+izminmesh-izmindta] $
159                   ,count=[nx,ny,nz], _extra = ex
160               END
161               dernierx LE key-1:BEGIN ; on peut tout couper d''un coup
162                  ncdf_varget,cdfid,name,res,offset=[jpi-key+ixmin+premierx $
163                                                     ,premiery+iyminmesh-iymindta $
164                                                     ,premierz+izminmesh-izmindta] $
165                   ,count=[nx,ny,nz], _extra = ex
166               END
167               ELSE:BEGIN       ; Le tableau est separe en 2 morceaux...
168                  ncdf_varget,cdfid,name,tab1,offset=[jpi-key+ixmin+premierx $
169                                                      ,premiery+iyminmesh-iymindta $
170                                                      ,premierz+izminmesh-izmindta] $
171                   ,count=[key-1-premierx+1,ny,nz], _extra = ex
172                  ncdf_varget,cdfid,name,tab2,offset=[ixmin $
173                                                      ,premiery+iyminmesh-iymindta $
174                                                      ,premierz+izminmesh-izmindta] $
175                   ,count=[dernierx-key+1,ny,nz], _extra = ex
176                  res = [temporary(tab1), temporary(tab2)]
177               END
178            ENDCASE
179         END
180;,,,,,,,,,,,,,,,,,,,,,,,,
181         keyword_set(key_shift) NE 0 AND total(key_stride) NE 3:BEGIN
182; on shift et il y a un stride
183;,,,,,,,,,,,,,,,,,,,,,,,,
184            case 1 OF           ; case sur la facon de fire le champ
185               premierx GE ceil(1.*key/key_stride[0]):BEGIN ; on peut tout coupe d''un coup
186                  ncdf_varget,cdfid,name,res,offset=[ixmin-key+premierx*key_stride[0] $
187                                                     ,premiery*key_stride[1]+iyminmesh-iymindta $
188                                                     ,premierz*key_stride[2]+izminmesh-izmindta] $
189                   ,count=[nx,ny,nz], stride = key_stride[0:2], _extra = ex
190               END
191               dernierx LE (key-1)/key_stride[0]:BEGIN ; on peut tout coupe d''un coup
192                  ncdf_varget,cdfid,name,res,offset=[jpitotal-key+ixmin+premierx*key_stride[0] $
193                                                     ,premiery*key_stride[1]+iyminmesh-iymindta $
194                                                     ,premierz*key_stride[2]+izminmesh-izmindta] $
195                   ,count=[nx,ny,nz], stride = key_stride[0:2], _extra = ex
196               END
197               ELSE:BEGIN       ; le tableau est separe en 2 morceaux...
198                  ncdf_varget,cdfid,name,tab1,offset=[jpitotal-key+ixmin+premierx*key_stride[0] $
199                                                      ,premiery*key_stride[1]+iyminmesh-iymindta $
200                                                      ,premierz*key_stride[2]+izminmesh-izmindta] $
201                   ,count=[(key-1-premierx*key_stride[0]+1)/key_stride[0],ny,nz] $
202                   , stride = key_stride[0:2], _extra = ex
203; il en manque un bout?
204                  IF ( (key-1-premierx*key_stride[0]) MOD key_stride[0] ) EQ 0 then begin
205                     ncdf_varget,cdfid,name,tab1bis,offset=[jpitotal-1+ixmin $
206                                                            ,premiery*key_stride[1]+iyminmesh-iymindta $
207                                                            ,premierz*key_stride[2]+izminmesh-izmindta] $
208                      ,count=[1,ny,nz] $
209                      , stride = [1, key_stride[1:2]], _extra = ex
210                     tab1bis = reform(tab1bis, 1, ny, nz, /over)
211                     tab1 = [temporary(tab1), temporary(tab1bis)]
212                  ENDIF
213; 2eme bout...
214                  ncdf_varget,cdfid,name,tab2,offset=[ceil(1.*key/key_stride[0])*key_stride[0]-key+ixmin $
215                                                      ,premiery*key_stride[1]+iyminmesh-iymindta $
216                                                      ,premierz*key_stride[2]+izminmesh-izmindta] $
217                   ,count=[(dernierx*key_stride[0]-key+1)/key_stride[0],ny,nz] $
218                   , stride = key_stride[0:2], _extra = ex
219; on recolle le tout
220                  res = [temporary(tab1), temporary(tab2)]
221               END
222            ENDCASE             ; case sur la facon de fire le champ
223         END
224      ENDCASE                   ; differentes possibilites de key_shift et key_performance
225   END
226;......................................................................
227;......................................................................
228   varcontient.ndims eq 3 AND (where(varcontient.dim EQ contient.recdim))[0] NE -1:BEGIN ;xyt array
229;......................................................................
230;......................................................................
231      case 1 of
232;,,,,,,,,,,,,,,,,,,,,,,,,
233         keyword_set(key_shift) EQ 0 AND total(key_stride) EQ 3:BEGIN
234; on ne shift pas et il n''y a pas de stride
235;,,,,,,,,,,,,,,,,,,,,,,,,
236            ncdf_varget,cdfid,name,res,offset=[premierx+ixminmesh-ixmindta $
237                                               ,premiery+iyminmesh-iymindta $
238                                               ,premiertps] $
239             ,count=[nx,ny,jpt], _extra = ex
240         END
241;,,,,,,,,,,,,,,,,,,,,,,,,
242         keyword_set(key_shift) EQ 0 AND total(key_stride) NE 3:BEGIN
243; on ne shift pas mais il y a un stride
244;,,,,,,,,,,,,,,,,,,,,,,,,
245            ncdf_varget,cdfid,name,res,offset=[premierx*key_stride[0]+ixminmesh-ixmindta $
246                                               ,premiery*key_stride[1]+iyminmesh-iymindta $
247                                               ,premiertps] $
248             ,count=[nx,ny,jpt], stride = [key_stride[0:1], 1], _extra = ex
249         END
250;,,,,,,,,,,,,,,,,,,,,,,,,
251         keyword_set(key_shift) NE 0 AND total(key_stride) EQ 3:BEGIN
252; on shift mais il n''y a pas de stride
253;,,,,,,,,,,,,,,,,,,,,,,,,
254            case 1 of
255               premierx GE key:BEGIN ; on peut tout couper d''un coup
256                  ncdf_varget,cdfid,name,res,offset=[ixmin-key+premierx $
257                                                     ,premiery+iyminmesh-iymindta $
258                                                     ,premiertps] $
259                   ,count=[nx,ny,jpt], _extra = ex
260               END
261               dernierx LE key-1:BEGIN ; on peut tout couper d''un coup
262                  ncdf_varget,cdfid,name,res,offset=[jpi-key+ixmin+premierx $
263                                                     ,premiery+iyminmesh-iymindta $
264                                                     ,premiertps] $
265                   ,count=[nx,ny,jpt], _extra = ex
266               END
267               ELSE:BEGIN       ; Le tableau est separe en 2 morceaux...
268                  ncdf_varget,cdfid,name,tab1,offset=[jpi-key+ixmin+premierx $
269                                                      ,premiery+iyminmesh-iymindta $
270                                                      ,premiertps] $
271                   ,count=[key-1-premierx+1,ny,jpt], _extra = ex
272                  ncdf_varget,cdfid,name,tab2,offset=[ixmin $
273                                                      ,premiery+iyminmesh-iymindta $
274                                                      ,premiertps] $
275                   ,count=[dernierx-key+1,ny,jpt], _extra = ex
276                  res = [temporary(tab1), temporary(tab2)]
277               END
278            ENDCASE
279         END
280;,,,,,,,,,,,,,,,,,,,,,,,,
281         keyword_set(key_shift) NE 0 AND total(key_stride) NE 3:BEGIN
282; on shift et il y a un stride
283;,,,,,,,,,,,,,,,,,,,,,,,,
284            case 1 OF           ; case sur la facon de fire le champ
285               premierx GE ceil(1.*key/key_stride[0]):BEGIN ; on peut tout coupe d''un coup
286                  ncdf_varget,cdfid,name,res,offset=[ixmin-key+premierx*key_stride[0] $
287                                                     ,premiery*key_stride[1]+iyminmesh-iymindta $
288                                                     ,premiertps] $
289                   ,count=[nx,ny,jpt], stride = [key_stride[0:1], 1], _extra = ex
290               END
291               dernierx LE (key-1)/key_stride[0]:BEGIN ; on peut tout coupe d''un coup
292                  ncdf_varget,cdfid,name,res,offset=[jpitotal-key+ixmin+premierx*key_stride[0] $
293                                                     ,premiery*key_stride[1]+iyminmesh-iymindta $
294                                                     ,premiertps] $
295                   ,count=[nx,ny,jpt], stride = [key_stride[0:1], 1], _extra = ex
296               END
297               ELSE:BEGIN       ; le tableau est separe en 2 morceaux...
298                  ncdf_varget,cdfid,name,tab1,offset=[jpitotal-key+ixmin+premierx*key_stride[0] $
299                                                      ,premiery*key_stride[1]+iyminmesh-iymindta $
300                                                      ,premiertps] $
301                   ,count=[(key-1-premierx*key_stride[0]+1)/key_stride[0],ny,jpt] $
302                   , stride = [key_stride[0:1], 1], _extra = ex
303; il en manque un bout?
304                  IF ( (key-1-premierx*key_stride[0]) MOD key_stride[0] ) EQ 0 then begin
305                     ncdf_varget,cdfid,name,tab1bis,offset=[jpitotal-1+ixmin $
306                                                            ,premiery*key_stride[1]+iyminmesh-iymindta $
307                                                            ,premiertps] $
308                      ,count=[1,ny,jpt] $
309                      , stride = [1, key_stride[1:1], 1], _extra = ex
310                     tab1bis = reform(tab1bis, 1, ny, jpt, /over)
311                     tab1 = [temporary(tab1), temporary(tab1bis)]
312                  ENDIF
313; 2eme bout...
314                  ncdf_varget,cdfid,name,tab2,offset=[ceil(1.*key/key_stride[0])*key_stride[0]-key+ixmin $
315                                                      ,premiery*key_stride[1]+iyminmesh-iymindta $
316                                                      ,premiertps] $
317                   ,count=[(dernierx*key_stride[0]-key+1)/key_stride[0],ny,jpt] $
318                   , stride = [key_stride[0:1], 1], _extra = ex
319; on recolle le tout
320                  res = [temporary(tab1), temporary(tab2)]
321               END
322            ENDCASE             ; case sur la facon de fire le champ
323         END
324      endcase
325   END
326;......................................................................
327;......................................................................
328   varcontient.ndims eq 4:BEGIN ;xyzt array
329;......................................................................
330;......................................................................
331      case 1 of
332;,,,,,,,,,,,,,,,,,,,,,,,,
333         keyword_set(key_shift) EQ 0 AND total(key_stride) EQ 3:BEGIN
334; on ne shift pas et il n''y a pas de stride
335;,,,,,,,,,,,,,,,,,,,,,,,,
336            ncdf_varget,cdfid,name,res,offset=[premierx+ixminmesh-ixmindta $
337                                               ,premiery+iyminmesh-iymindta $
338                                                      ,premierz+izminmesh-izmindta $
339                                               ,premiertps] $
340             ,count=[nx,ny,nz,jpt], _extra = ex
341         END
342;,,,,,,,,,,,,,,,,,,,,,,,,
343         keyword_set(key_shift) EQ 0 AND total(key_stride) NE 3:BEGIN
344; on ne shift pas mais il y a un stride
345;,,,,,,,,,,,,,,,,,,,,,,,,
346            ncdf_varget,cdfid,name,res,offset=[premierx*key_stride[0]+ixminmesh-ixmindta $
347                                               ,premiery*key_stride[1]+iyminmesh-iymindta $
348                                               ,premierz*key_stride[2]+izminmesh-izmindta $
349                                               ,premiertps] $
350             ,count=[nx,ny,nz,jpt], stride = [key_stride[0:2], 1], _extra = ex
351         END
352;,,,,,,,,,,,,,,,,,,,,,,,,
353         keyword_set(key_shift) NE 0 AND total(key_stride) EQ 3:BEGIN
354; on shift mais il n''y a pas de stride
355;,,,,,,,,,,,,,,,,,,,,,,,,
356            case 1 of
357               premierx GE key:BEGIN ; on peut tout couper d''un coup
358                  ncdf_varget,cdfid,name,res,offset=[ixmin-key+premierx $
359                                                     ,premiery+iyminmesh-iymindta $
360                                                     ,premierz+izminmesh-izmindta $
361                                                     ,premiertps] $
362                   ,count=[nx,ny,nz,jpt], _extra = ex
363               END
364               dernierx LE key-1:BEGIN ; on peut tout couper d''un coup
365                  ncdf_varget,cdfid,name,res,offset=[jpi-key+ixmin+premierx $
366                                                     ,premiery+iyminmesh-iymindta $
367                                                     ,premierz+izminmesh-izmindta $
368                                                     ,premiertps] $
369                   ,count=[nx,ny,nz,jpt], _extra = ex
370               END
371               ELSE:BEGIN       ; Le tableau est separe en 2 morceaux...
372                  ncdf_varget,cdfid,name,tab1,offset=[jpi-key+ixmin+premierx $
373                                                      ,premiery+iyminmesh-iymindta $
374                                                      ,premierz+izminmesh-izmindta $
375                                                      ,premiertps] $
376                   ,count=[key-1-premierx+1,ny,nz,jpt], _extra = ex
377                  ncdf_varget,cdfid,name,tab2,offset=[ixmin $
378                                                      ,premiery+iyminmesh-iymindta $
379                                                      ,premierz+izminmesh-izmindta $
380                                                      ,premiertps] $
381                   ,count=[dernierx-key+1,ny,nz,jpt], _extra = ex
382                  res = [temporary(tab1), temporary(tab2)]
383               END
384            ENDCASE
385         END
386;,,,,,,,,,,,,,,,,,,,,,,,,
387         keyword_set(key_shift) NE 0 AND total(key_stride) NE 3:BEGIN
388; on shift et il y a un stride
389;,,,,,,,,,,,,,,,,,,,,,,,,
390            case 1 OF           ; case sur la facon de fire le champ
391               premierx GE ceil(1.*key/key_stride[0]):BEGIN ; on peut tout coupe d''un coup
392                  ncdf_varget,cdfid,name,res,offset=[ixmin-key+premierx*key_stride[0] $
393                                                     ,premiery*key_stride[1]+iyminmesh-iymindta $
394                                                     ,premierz*key_stride[2]+izminmesh-izmindta $
395                                                     ,premiertps] $
396                   ,count=[nx,ny,nz,jpt], stride = [key_stride[0:2], 1], _extra = ex
397               END
398               dernierx LE (key-1)/key_stride[0]:BEGIN ; on peut tout coupe d''un coup
399                  ncdf_varget,cdfid,name,res,offset=[jpitotal-key+ixmin+premierx*key_stride[0] $
400                                                     ,premiery*key_stride[1]+iyminmesh-iymindta $
401                                                     ,premierz*key_stride[2]+izminmesh-izmindta $
402                                                     ,premiertps] $
403                   ,count=[nx,ny,nz,jpt], stride = [key_stride[0:2], 1], _extra = ex
404               END
405               ELSE:BEGIN       ; le tableau est separe en 2 morceaux...
406                  ncdf_varget,cdfid,name,tab1,offset=[jpitotal-key+ixmin+premierx*key_stride[0] $
407                                                      ,premiery*key_stride[1]+iyminmesh-iymindta $
408                                                     ,premierz*key_stride[2]+izminmesh-izmindta $
409                                                      ,premiertps] $
410                   ,count=[(key-1-premierx*key_stride[0]+1)/key_stride[0],ny,nz,jpt] $
411                   , stride = [key_stride[0:2], 1], _extra = ex
412; il en manque un bout?
413                  IF ( (key-1-premierx*key_stride[0]) MOD key_stride[0] ) EQ 0 then begin
414                     ncdf_varget,cdfid,name,tab1bis,offset=[jpitotal-1+ixmin $
415                                                            ,premiery*key_stride[1]+iyminmesh-iymindta $
416                                                     ,premierz*key_stride[2]+izminmesh-izmindta $
417                                                            ,premiertps] $
418                      ,count=[1,ny,nz,jpt] $
419                      , stride = [1, key_stride[1:2], 1], _extra = ex
420                     tab1bis = reform(tab1bis, 1, ny, nz, jpt, /over)
421                     tab1 = [temporary(tab1), temporary(tab1bis)]
422                  ENDIF
423; 2eme bout...
424                  ncdf_varget,cdfid,name,tab2,offset=[ceil(1.*key/key_stride[0])*key_stride[0]-key+ixmin $
425                                                      ,premiery*key_stride[1]+iyminmesh-iymindta $
426                                                     ,premierz*key_stride[2]+izminmesh-izmindta $
427                                                      ,premiertps] $
428                   ,count=[(dernierx*key_stride[0]-key+1)/key_stride[0],ny,nz,jpt] $
429                   , stride = [key_stride[0:2], 1], _extra = ex
430; on recolle le tout
431                  res = [temporary(tab1), temporary(tab2)]
432               END
433            ENDCASE             ; case sur la facon de fire le champ
434         END
435      endcase
436   END
437endcase
Note: See TracBrowser for help on using the repository browser.