CODE STUBS FOR READING TOMS ERYTHEMAL EXPOSURE FILES. This file contains code fragments that can be used to quickly write short programs that read the TOMS Erythemal Exposure files. ============================================================================ FORTRAN-77 (first example) INTEGER*2 tmpint(288,180), ilon,ilat, m, e REAL*4 erythex(288,180), am CHARACTER*80 header(3) ... OPEN(UNIT=1, FILE='gaMMDDYY.n7e', FORM="formatted",STATUS="OLD") READ(1,1) header(1) READ(1,1) header(2) READ(1,1) header(3) READ(1,2) tmpint CLOSE(1) DO ilat= 1, 180 DO ilon= 1, 288 IF(tmpint(ilon,ilat) .NE. 999) m= MOD(tmpint(ilon, ilat),100) e= (tmpint(ilon,ilat) - m)/100 am= m erythex(ilon,ilat)= am * 10.**(e-1) ELSE erythex(ilon,ilat)= -999. END IF END DO END DO 1 FORMAT(A) 2 FORMAT(179(11(1X,25I3,/),1X,13I3,/),11(1X,25I3,/),1X,13I3) ... ============================================================================ FORTRAN-77 (second example) INTEGER*1 tmpint(2,288,180), ilon, ilat REAL*4 erythex(288,180), am CHARACTER*80 header(3) ... OPEN(UNIT=1, FILE='gaMMDDYY.n7e', FORM="formatted",STATUS="OLD") READ(1,1) header(1) READ(1,1) header(2) READ(1,1) header(3) READ(1,2) tmpint CLOSE(1) DO ilat= 1, 180 DO ilon= 1, 288 IF(tmpint(1,ilon,ilat) .NE. 9 .OR. & tmpint(2,ilon,ilat) .NE. 99) THEN am= tmpint(2,ilon,ilat) erythex(ilon,ilat)= am * 10.**(tmpint(1,ilon,ilat) - 1) ELSE erythex(ilon,ilat)= -999. END IF END DO END DO 1 FORMAT(A) 2 FORMAT(179(11(1X,25(I1,I2),/),1X,13(I1,I2),/), & 11(1X,25(I1,I2),/),1X,13(I1,I2)) ... ============================================================================ FORTRAN-77 (third example -- use this method if in a pinch for memory) INTEGER*4 tmpint(288,180), ilon, ilat REAL*4 erythex(288,180), am CHARACTER*80 header(3) EQUIVALENCE (tmpint,erythex) ... OPEN(UNIT=1, FILE='gaMMDDYY.n7e', FORM="formatted",STATUS="OLD") READ(1,1) header(1) READ(1,1) header(2) READ(1,1) header(3) READ(1,2) tmpint CLOSE(1) DO ilat= 1, 180 DO ilon= 1, 288 IF(tmpint(ilon,ilat) .NE. 999) m= MOD(tmpint(ilon, ilat),100) e= (tmpint(ilon,ilat) - m)/100 am= m erythex(ilon,ilat)= am * 10.**(e-1) ELSE erythex(ilon,ilat)= -999. END IF END DO END DO 1 FORMAT(A) 2 FORMAT(179(11(1X,25I3,/),1X,13I3,/),11(1X,25I3,/),1X,13I3) ... ============================================================================ IDL (first example) tmpint= INTARR(288,180) erythex= FLTARR(288,180) - 999.0 ;default fill value of -999.0 header= STRARR(3) eryformat='(179(11(1X,25I3,/),1X,13I3,/),11(1X,25I3,/),1X,13I3)' ... OPENR,1,'gaMMDDYY.n7e' temp='' READF,1, temp & header(1)=temp READF,1, temp & header(2)=temp READF,1, temp & header(3)=temp READF,1, tmpint, form=eryformat CLOSE,1 FOR ilat= 1, 180 DO FOR ilon= 1, 288 DO $ IF(tmpint(ilon,ilat) NE 999) THEN DO BEGIN m= tmpint(ilon, ilat) MOD 100 e= (tmpint(ilon,ilat) - m)/100 erythex(ilon,ilat)= FLOAT(m) * 10.**(e-1) ENDIF ... ============================================================================ IDL (second example) tmpint= INTARR(2,288,180) erythex= FLTARR(288,180) - 999.0 ;default fill value of -999.0 header= STRARR(3) eryformat='(179(11(1X,25(I1,I2),/),1X,13(I1,I2),/),'+ $ '11(1X,25(I1,I2),/),1X,13(I1,I2))' ... OPENR,1,'gaMMDDYY.n7e' temp='' READF,1, temp & header(1)=temp READF,1, temp & header(2)=temp READF,1, temp & header(3)=temp READF,1, tmpint, form=eryformat CLOSE,1 FOR ilat= 1, 180 DO FOR ilon= 1, 288 DO $ IF(tmpint(0,ilon,ilat) NE 9 OR tmpint(1,ilon,ilat) NE 99) THEN $ erythex(ilon,ilat)= FLOAT(tmpint(1,ilon,ilat)) * $ 10.**(tmpint(0,ilon,ilat) - 1) ...