Changeset 448 for trunk


Ignore:
Timestamp:
01/26/11 14:44:08 (13 years ago)
Author:
smasson
Message:

add SET_OUTMSKVAL in file_interp

File:
1 edited

Legend:

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

    r443 r448  
    2727                        , INIRR = inirr, METHOD = method, SMOOTH = smooth $ 
    2828                        , WEIG = weig, ADDR = addr, MISSING_VALUE = missing_value $ 
    29                         , DIVX = divx, DIVY = divy, OUTMASK = outmask $ 
    30                         , GETHAN = gethan, LETHAN = lethan, _EXTRA = ex 
     29                        , DIVX = divx, DIVY = divy, OUTMASK_IND = outmask_ind $ 
     30                        , GETHAN = gethan, LETHAN = lethan, SET_OUTMSKVAL = set_outmskval $ 
     31                        , _EXTRA = ex 
    3132; 
    3233  compile_opt idl2, strictarrsubs 
     
    7374  IF n_elements(gethan) EQ 1 THEN data = gethan > temporary(data) 
    7475  IF n_elements(lethan) EQ 1 THEN data = temporary(data) < lethan 
    75  
     76  IF outmask_ind[0] NE -1 THEN data[outmask_ind] = set_outmskval 
     77   
    7678  if intype LE 3 THEN data = round(temporary(data)) 
    77   IF outmask[0] NE -1 THEN data = temporary(data) * outmask 
    7879 
    7980  RETURN, data 
     
    226227; used (in association with (IN/OUT)USEASMASK) to built the mask (that 
    227228; does not change from one record to another). 
    228 ; Note: this value will be apply to all interpolated variables 
     229; Note: this value will be applied to all interpolated variables 
     230; 
     231; @keyword SET_OUTMSKVAL {type=scalar}{default=defined by attribute missing_value or _fillvalue of input file} 
     232; (Re)define the masked (over land) value in output data. 
     233; Note: output mask as to be defined through the keyword maskout and 
     234; its associated keywords... 
     235; Note: do not mismatch with OUTMISSING_VALUE which are missing value 
     236; used (in association with OUTUSEASMASK) to built the mask (that 
     237; does not change from one record to another). 
    229238; 
    230239; @keyword ADDR {type=2d array or variable name} 
     
    303312                 , INXAXISNAME = inxaxisname, INYAXISNAME = inyaxisname $ 
    304313                 , OUTXAXISNAME = outxaxisname, OUTYAXISNAME = outyaxisname $ 
    305                  , GETHAN = gethan, LETHAN = lethan $ 
     314                 , GETHAN = gethan, LETHAN = lethan, SET_OUTMSKVAL = set_outmskval $ 
    306315                 , _EXTRA = ex 
    307316; 
     
    431440; 
    432441  outvarid = lonarr(ininq.nvars) 
     442  outmiss  = fltarr(ininq.nvars) 
    433443  FOR i = 0, ininq.nvars-1 DO BEGIN 
    434444    varinq = ncdf_varinq(inid, i) 
     
    469479; Variables attributes 
    470480      IF outvarid[i] NE - 1 THEN BEGIN 
     481 
     482        IF varinq.ndims GE 2 THEN BEGIN 
     483          interp = varinq.dim[0] EQ indimx AND varinq.dim[1] EQ indimy 
     484        ENDIF ELSE interp = 0b 
     485        CASE 1 OF 
     486          strlowcase(varinq.name) EQ strlowcase(inxaxisname):interp = 0b 
     487          strlowcase(varinq.name) EQ strlowcase(inyaxisname):interp = 0b 
     488          strlowcase(varinq.name) EQ strlowcase(inmaskname):interp = 0b 
     489        ENDCASE 
     490         
    471491        FOR j = 0, varinq.natts-1 DO BEGIN 
    472492          name = ncdf_attname(inid, i, j) 
    473           dummy = ncdf_attcopy(inid, i, name, outid, outvarid[i]) 
     493          CASE 1 OF 
     494            keyword_set(interp) AND strlowase(name) EQ '_fillvalue':BEGIN 
     495              ncdf_attget, inid, i, '_fillvalue', tmp & outmiss[i] = tmp 
     496            END 
     497            keyword_set(interp) AND strlowase(name) EQ 'missing_value':BEGIN 
     498              ncdf_attget, inid, i, 'missing_value', tmp & outmiss[i] = tmp 
     499            END 
     500            ELSE:dummy = ncdf_attcopy(inid, i, name, outid, outvarid[i]) 
     501          ENDCASE 
    474502        ENDFOR 
     503  
     504        IF keyword_set(interp) AND outmask[0] NE -1 THEN BEGIN 
     505          IF n_elements(set_outmskval) NE 0 THEN outmiss[i] = set_outmskval 
     506          ncdf_attput, outid, outvarid[i], '_fillvalue', outmiss[i] 
     507          ncdf_attput, outid, outvarid[i], 'missing_value', outmiss[i]  
     508        ENDIF 
     509 
    475510      ENDIF 
    476511    ENDIF ELSE outvarid[i] = -1 
     
    478513; 
    479514  ncdf_control, outid, /endef 
     515; 
     516  IF outmask[0] NE -1 THEN outmask_ind = where(outmask EQ 0) ELSE outmask_ind = -1 
    480517; 
    481518  FOR i = 0, ininq.nvars-1 DO BEGIN 
     
    514551                                                  , INIRR = inirr, METHOD = method, SMOOTH = smooth $ 
    515552                                                  , WEIG = weig, ADDR = addr, MISSING_VALUE = var_missing_value $ 
    516                                                   , DIVX = divx, DIVY = divy, OUTMASK = outmask $ 
     553                                                  , SET_OUTMSKVAL = outmiss[i] $ 
     554                                                  , DIVX = divx, DIVY = divy, OUTMASK_IND = outmask_ind $ 
    517555                                                  , GETHAN = gethan, LETHAN = lethan, _extra = ex) 
    518556              IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 
     
    533571                                                    , INIRR = inirr, METHOD = method, SMOOTH = smooth $ 
    534572                                                    , WEIG = weig, ADDR = addr, MISSING_VALUE = var_missing_value $ 
    535                                                     , DIVX = divx, DIVY = divy, OUTMASK = outmask $ 
     573                                                    , SET_OUTMSKVAL = outmiss[i] $ 
     574                                                    , DIVX = divx, DIVY = divy, OUTMASK_IND = outmask_ind $ 
    536575                                                    , GETHAN = gethan, LETHAN = lethan, _extra = ex) 
    537576                IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 
     
    553592                                                      , INIRR = inirr, METHOD = method, SMOOTH = smooth $ 
    554593                                                      , WEIG = weig, ADDR = addr, MISSING_VALUE = var_missing_value $ 
    555                                                       , DIVX = divx, DIVY = divy, OUTMASK = outmask $ 
     594                                                      , SET_OUTMSKVAL = outmiss[i] $ 
     595                                                      , DIVX = divx, DIVY = divy, OUTMASK_IND = outmask_ind $ 
    556596                                                      , GETHAN = gethan, LETHAN = lethan, _extra = ex) 
    557597                  IF interp AND n_elements(data) EQ 1 THEN data = replicate(data, jpiout, jpjout) 
Note: See TracChangeset for help on using the changeset viewer.