- Timestamp:
- 07/21/14 23:55:18 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SRC/Interpolation/file_interp.pro
r495 r497 4 4 ; 5 5 ;- 6 FUNCTION boxmean_interp, data, divx, divy 6 FUNCTION boxmean_interp, data, divx, divy, nankeep = nankeep 7 7 ; 8 8 compile_opt idl2, strictarrsubs … … 11 11 jpiout = sz[0] / divx 12 12 jpjout = sz[1] / divy 13 IF keyword_set(nankeep) THEN divi = finite(data) 13 14 ; 14 15 data = reform(data, divx, jpiout, divy, jpjout, /overwrite) 15 data = total(temporary(data), 1) ; ave along divx 16 data = total(temporary(data), 2) ; ave along divy 17 data = temporary(data) / float(divx*divy) 16 data = total(temporary(data), 1, nan = nankeep) ; ave along divx 17 data = total(temporary(data), 2, nan = nankeep) ; ave along divy 18 IF keyword_set(nankeep) THEN BEGIN 19 divi = reform(temporary(divi), divx, jpiout, divy, jpjout, /overwrite) 20 divi = total(temporary(divi), 1, /nan) ; ave along divx 21 divi = total(temporary(divi), 2, /nan) ; ave along divy 22 data = temporary(data) / temporary(divi) 23 ENDIF ELSE data = temporary(data) / float(divx*divy) 18 24 19 25 RETURN, data … … 31 37 , DATA_SMWIN = data_smwin, DATA_NSMOOTH = data_nsmooth $ 32 38 , EXTRAP_SMWIN = extrap_smwin, EXTRAP_NSMOOTH = extrap_nsmooth $ 33 , _EXTRA = ex39 , NANKEEP = nankeep, _EXTRA = ex 34 40 ; 35 41 compile_opt idl2, strictarrsubs … … 48 54 IF totnanmask NE n_elements(nanmask) THEN BEGIN 49 55 data[where(nanmask EQ 0b)] = 1.e20 ; put large value to be sure they are removed during the interpolation 50 IF inmask[0] NE -1 THEN mask = temporary(nanmask) * inmask ELSE mask = temporary(nanmask)56 IF inmask[0] NE -1 THEN mask = nanmask * inmask ELSE mask = nanmask 51 57 ENDIF ELSE mask = inmask 52 58 ; take care of missing values … … 60 66 ENDCASE 61 67 IF total(missmask) EQ 0 THEN return, missing_value 68 IF keyword_set(nankeep) THEN nanmask = temporary(nanmask) * missmask 62 69 IF mask[0] NE -1 THEN mask = temporary(missmask) * mask ELSE mask = temporary(missmask) 63 70 ENDIF … … 87 94 data = (temporary(data))[data_smwin:nx+data_smwin-1, data_smwin:ny+data_smwin-1] 88 95 ENDIF 96 ; put back NaN if wanted... 97 IF keyword_set(nankeep) THEN BEGIN 98 nanmask = where(nanmask EQ 0b, cntnan) 99 IF cntnan NE 0 THEN data[temporary(nanmask)] = !values.f_nan 100 ENDIF 89 101 ; interpolation 90 102 IF method EQ 'boxmean' THEN BEGIN 91 data = boxmean_interp(temporary(data), divx, divy) 103 ; put back NaN if wanted... 104 data = boxmean_interp(temporary(data), divx, divy, nankeep = nankeep) 92 105 ENDIF ELSE BEGIN 93 106 IF NOT keyword_set(inirr) THEN BEGIN … … 298 311 ; @keyword _EXTRA 299 312 ; to use <pro>extrapolate</pro>, <pro>extrapsmooth</pro> and <pro>fromreg</pro> keywords 313 ; 314 ; @keyword NANKEEP {default=0}{type=scalar: 0 or 1} 315 ; switch on to keep NaN values before doing the interpolation. Note 316 ; that NaN values are not taken into account when doing bowmean method 300 317 ; 301 318 ; @uses … … 342 359 , DATA_SMWIN = data_smwin, DATA_NSMOOTH = data_nsmooth $ 343 360 , EXTRAP_SMWIN = extrap_smwin, EXTRAP_NSMOOTH = extrap_nsmooth $ 344 , _EXTRA = ex361 , NANKEEP = nankeep, _EXTRA = ex 345 362 ; 346 363 compile_opt idl2, strictarrsubs … … 586 603 , DATA_SMWIN = data_smwin, DATA_NSMOOTH = data_nsmooth $ 587 604 , EXTRAP_SMWIN = extrap_smwin, EXTRAP_NSMOOTH = extrap_nsmooth $ 588 , _extra = ex)605 , NANKEEP = nankeep, _extra = ex) 589 606 IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 590 607 ncdf_varput, outid, outvarid[i], temporary(data) … … 609 626 , DATA_SMWIN = data_smwin, DATA_NSMOOTH = data_nsmooth $ 610 627 , EXTRAP_SMWIN = extrap_smwin, EXTRAP_NSMOOTH = extrap_nsmooth $ 611 , _extra = ex)628 , NANKEEP = nankeep, _extra = ex) 612 629 IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 613 630 ncdf_varput, outid, outvarid[i], temporary(data), offset = off, count = outcnt … … 633 650 , DATA_SMWIN = data_smwin, DATA_NSMOOTH = data_nsmooth $ 634 651 , EXTRAP_SMWIN = extrap_smwin, EXTRAP_NSMOOTH = extrap_nsmooth $ 635 , _extra = ex)652 , NANKEEP = nankeep, _extra = ex) 636 653 IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 637 654 ncdf_varput, outid, outvarid[i], temporary(data), offset = off, count = outcnt
Note: See TracChangeset
for help on using the changeset viewer.