Changeset 332 for trunk


Ignore:
Timestamp:
02/11/08 17:48:24 (16 years ago)
Author:
smasson
Message:

adapt for very large array

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SRC/ReadWrite/write_oasis.pro

    r327 r332  
    2323; data to be appended. 
    2424; 
     25; @keyword RECSIZE 
     26; define the size of the full data array to be written. Usefull when 
     27; you want to save memory and write the data in several write_oasis 
     28; instructions. see example 
     29; 
     30; @keyword TEMPORARY 
     31; activate undefine z2d when yo write it (to save memory) -> z2d will 
     32; be lost once write_oasis is returning. 
     33 
     34; @keyword HEADER 
     35; activate to write the header ("character*8" contained in varname) 
     36; before writting the data. Used when recsize is defined and /= 0, see example 
     37; 
     38; @keyword ENDING 
     39; activate when you write the last part of the data. Used when recsize 
     40; is defined and /= 0, see example 
     41; 
     42; @keyword POSITION 
     43; specify the position (in byte) at which you want to write the 
     44; data. Used when recsize is defined and /= 0, see example 
     45; 
    2546; @restrictions 
    2647; varname is automatically written as a "character*8" 
    2748; by default z2d is written as an R8 array 
     49; 
     50; @examples 
     51; 
     52;   write_oasis, fa2of, 'WEIGHTS5', weig 
     53; 
     54; or in several call so save memory 
     55; 
     56;   ysz = 100L 
     57;   recsz8 = 16L * jpio * jpjo * 8L 
     58;   FOR i = 0L, jpjo-1L, ysz DO BEGIN  
     59;     ii = (i+ysz-1L) < (jpjo-1L) 
     60;     position = (4L + 8L + 4L + 4L)*(i NE 0) + 16L * jpio * i * 8L 
     61;     weig = ....  
     62;     write_oasis, fa2ou, 'WEIGHTS3', temporary(weig), /temporary, append = i NE 0, header = i EQ 0 $ 
     63;                  , ending = ii EQ jpjo-1, recsize = recsz8, position = position 
     64;   ENDFOR 
     65; 
    2866; 
    2967; @history 
     
    3472; 
    3573;- 
    36 PRO write_oasis, filename, varname, z2d, I2=i2, I4=i4, I8=i8, R4=r4, APPEND=append 
     74PRO write_oasis, filename, varname, z2d, I2 = i2, I4 = i4, I8 = i8, R4 = r4, APPEND = append $ 
     75                 , RECSIZE = recsize, TEMPORARY = temporary, HEADER = header, ENDING = ending, POSITION = position 
    3776; 
    3877  compile_opt idl2, strictarrsubs 
    3978; 
    40    openw, unit, filename , /F77_UNFORMATTED, /GET_LUN, /SWAP_IF_LITTLE_ENDIAN $ 
    41     , error=err, APPEND = append 
    42    if err ne 0 then begin 
    43       ras = report(!err_string) 
    44       return 
    45    endif 
     79  openw, unit, filename, F77_UNFORMATTED = keyword_set(recsize) EQ 0, /GET_LUN, /SWAP_IF_LITTLE_ENDIAN $ 
     80         , error = err, APPEND = append 
     81  IF err NE 0 THEN BEGIN 
     82    ras = report(!err_string) 
     83    return 
     84  ENDIF 
     85  IF n_elements(position) NE 0 THEN point_lun, unit, position 
    4686 
    47    writeu, unit, string(varname, format='(a8)') 
    48    case 1 of 
    49       keyword_set(i2):writeu, unit, fix(z2d) 
    50       keyword_set(i4):writeu, unit, long(z2d) 
     87  IF keyword_set(recsize) THEN BEGIN 
     88    IF keyword_set(header) THEN BEGIN 
     89      writeu, unit, 8L 
     90      writeu, unit, string(varname, format = '(a8)') 
     91      writeu, unit, 8L 
     92      writeu, unit, long(recsize) 
     93    ENDIF 
     94  ENDIF ELSE BEGIN  
     95    writeu, unit, string(varname, format = '(a8)') 
     96  ENDELSE  
     97 
     98  IF keyword_set(temporary)  THEN BEGIN 
     99    CASE 1 OF 
     100      keyword_set(i2):writeu, unit, fix(   temporary(z2d)) 
     101      keyword_set(i4):writeu, unit, long(  temporary(z2d)) 
     102      keyword_set(i8):writeu, unit, long64(temporary(z2d)) 
     103      keyword_set(r4):writeu, unit, float( temporary(z2d)) 
     104      ELSE:           writeu, unit, double(temporary(z2d)) 
     105    ENDCASE 
     106  ENDIF ELSE BEGIN  
     107    CASE 1 OF 
     108      keyword_set(i2):writeu, unit, fix(   z2d) 
     109      keyword_set(i4):writeu, unit, long(  z2d) 
    51110      keyword_set(i8):writeu, unit, long64(z2d) 
    52       keyword_set(r4):writeu, unit, float(z2d) 
    53       ELSE:writeu, unit, double(z2d) 
    54    endcase 
     111      keyword_set(r4):writeu, unit, float( z2d) 
     112      ELSE:           writeu, unit, double(z2d) 
     113    ENDCASE 
     114  ENDELSE  
    55115 
    56    free_lun,unit 
    57    return 
    58 end 
     116  IF keyword_set(recsize) AND keyword_set(ending) THEN writeu, unit, long(recsize) 
     117 
     118  free_lun, unit 
     119  return 
     120END 
Note: See TracChangeset for help on using the changeset viewer.