[2] | 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 | ; |
---|
| 32 | case 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 |
---|
| 437 | endcase |
---|