Changeset 383


Ignore:
Timestamp:
10/30/08 14:55:33 (16 years ago)
Author:
smasson
Message:

bugfix in file_interp with missing values

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SRC/Interpolation/file_interp.pro

    r371 r383  
    1515; 
    1616; take care of NaN values 
    17   nanmsk = finite(data) 
    18   IF total(nanmsk) NE n_elements(nanmsk) THEN BEGIN 
    19     data[where(nanmsk EQ 0b)] = 1.e20 ; put large value to be sure they are removed during the interpolation 
    20     mask = inmask * temporary(nanmsk) 
     17  nanmask = finite(data) 
     18  totnanmask = total(nanmask) 
     19  IF totnanmask EQ 0 THEN return, !values.f_nan 
     20  IF totnanmask NE n_elements(nanmask) THEN BEGIN 
     21    data[where(nanmask EQ 0b)] = 1.e20 ; put large value to be sure they are removed during the interpolation 
     22    IF inmask[0] NE -1 THEN mask = temporary(nanmask) * inmask ELSE mask = temporary(nanmask) 
    2123  ENDIF ELSE mask = inmask 
    22 ; 
     24; take care of missing values 
    2325  tpmiss = size(missing_value, /type) 
    2426  IF tpmiss NE 0 AND tpmiss NE 7 THEN BEGIN 
    2527    CASE 1 OF 
    26       missing_value GT 1.e6:mask = temporary(mask) * (data LT (missing_value-10.)) 
    27       missing_value LT -1.e6:mask = temporary(mask) * (data GT (missing_value+10.)) 
    28       abs(missing_value) LT 1.e-6:mask = temporary(mask) * (abs(data) GT 1.e-6) 
    29       ELSE:mask = temporary(mask) * (data NE missing_value) 
     28      missing_value GT 1.e6:missmask = data LT (missing_value - 10.) 
     29      missing_value LT -1.e6:missmask = data GT (missing_value + 10.) 
     30      abs(missing_value) LT 1.e-6:missmask = abs(data) GT 1.e-6 
     31      ELSE:missmask = data NE missing_value 
    3032    ENDCASE 
     33    IF total(missmask) EQ 0 THEN return, missing_value 
     34    IF mask[0] NE -1 THEN mask = temporary(missmask) * mask ELSE mask = temporary(missmask) 
    3135  ENDIF 
    3236; extrapolation 
    33     IF keyword_set(smooth) THEN data = extrapsmooth(temporary(data), mask, /x_periodic, _extra = ex) $ 
    34     ELSE data = extrapolate(temporary(data), mask, /x_periodic, _extra = ex) 
     37  IF keyword_set(smooth) THEN data = extrapsmooth(temporary(data), mask, /x_periodic, _extra = ex) $ 
     38  ELSE data = extrapolate(temporary(data), mask, /x_periodic, _extra = ex) 
    3539; interpolation 
    3640  IF NOT keyword_set(inirr) THEN BEGIN 
     
    436440                                                  , INIRR = inirr, METHOD = method, SMOOTH = smooth $ 
    437441                                                  , WEIG = weig, ADDR = addr, MISSING_VALUE = var_missing_value, _extra = ex) 
     442              IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 
    438443              ncdf_varput, outid, outvarid[i], temporary(data) 
    439444            END 
     
    451456                                                    , INIRR = inirr, METHOD = method, SMOOTH = smooth $ 
    452457                                                    , WEIG = weig, ADDR = addr, MISSING_VALUE = var_missing_value, _extra = ex) 
     458                IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 
    453459                ncdf_varput, outid, outvarid[i], temporary(data), offset = off, count = outcnt 
    454460              ENDFOR 
     
    467473                                                      , INIRR = inirr, METHOD = method, SMOOTH = smooth $ 
    468474                                                      , WEIG = weig, ADDR = addr, MISSING_VALUE = var_missing_value, _extra = ex) 
     475                  IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 
    469476                  ncdf_varput, outid, outvarid[i], temporary(data), offset = off, count = outcnt 
    470477                ENDFOR 
Note: See TracChangeset for help on using the changeset viewer.