Program read_gridded integer temp(36,72) integer i integer imonth,jmonth,iyear,jyear integer datachk integer openfile integer loopcnt real lat,lon character*110 infile,outfile C INITIALIZE VARIABLES datachk = 0 openfile = 0 loopcnt = 0 C ASK USER FOR INPUT GRID SET write(*,*) 'Enter gridded dataset filename. ' read(*,10) infile C OPEN INPUT FILE open(10,file=infile,status='old',err=500) openfile = 1 C GRIDDED FILENAME NOT VALID 500 do while(openfile .eq. 0) write(*,*) 'Cannot open ',infile(1:lnblnk(infile)) write(*,*) 'Reenter gridded dataset filename.' read(*,10) infile open(10,file=infile,status='old',err=500) openfile = 1 enddo C ASK USER FOR OUTPUT FILENAME write(*,*) 'Enter output filename for gridded subset. ' read(*,10) outfile C OPEN OUTPUT FILE open(11,file=outfile) C ASK USER FOR MONTH AND YEAR TO EXTRACT write(*,*) 'Enter month to extract', *'- integer format (1=>Jan, 2=>Feb, etc.)' read(*,40) imonth write(*,*) 'Enter year to extract' read(*,40) iyear 10 format(a110) 40 format(i6) C LOOP OVER ALL MONTHS AND YEARS UNTIL FIND REQUESTED DATA do while(datachk .ne. 1) read(10,100,end=900) jmonth, jyear loopcnt = loopcnt + 1 C IF FOUND, THEN READ IN GRIDDED DATA if(imonth .eq. jmonth .and. iyear .eq. jyear) then write(*,50) imonth, iyear 50 format(' Reading gridded data for month ', i2.2, *' and year ',i4) do i=1,36 do j=1,6 read (10,20) (temp(i,k),k=j*12-11,j*12) enddo enddo C SET BOOLEAN TO TRUE datachk = 1 C NOT CORRECT MONTH AND YEAR, SO SKIP GRIDDED DATA FIELDS else if(loopcnt.eq.1) then write(*,110) imonth,iyear 110 format(' Searching for month ', i2.2, ' and year ',i4) endif do i=1,36 do j=1,6 read(10,*) enddo enddo endif enddo 100 format(2i6) C WRITE DATA TO OUTPUT FILE write(*,*)'Writing output data to file' do i = 1,36 if(i.le.18) lat = 92.5 - i * 5.0 if(i.gt.18) lat = ((i-18) * -5.0) + 2.5 do j = 1,72 if(temp(i,j) .ne. -9999) then if(j.le.36) lon = (182.5 - (j * 5.0)) * (-1) if(j.gt.36) lon = ((j-36) * 5.0) - 2.5 write(11,30) lat,lon,temp(i,j)/100. endif enddo enddo C CLOSE INPUT AND OUTPUT FILES close(10,err=540) close(11,err=560) GO TO 999 20 format(12i7) 30 format(f5.1,2x,f6.1,2x,f6.2) 540 write(*,*) 'Cannot close ',infile(1:lnblnk(infile)) 560 write(*,*) 'Cannot close output file' 900 write(*,*) 'Requested Data Not Available!!!!' write(*,*) 'Sorry - Try Again. Exiting Program!!!!' 999 STOP END