Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner
24 Views

big endian unsigned 16 bit integers

dear all,

i'm using fortran to read a grid of 16 bit integers written to a big endian file.  i can't figure out what i'm doing incorrectly.

the output values are -9999

        program readdat

c       program to try to read the binary SNODAS data

c       The grid for the masked data files is 6,935 columns by 3,351 rows

        parameter(jdim=3531, idim=6935)

        integer*2 iswe(idim,jdim)

        filein='us_ssmv11034tS__T0001TTNATS2009123105HP001.dat'

        fileout='read.dat'

        open(11,file=filein,status='old',form='unformatted',access='direct'

     +    ,CONVERT='BIG_ENDIAN',recl=2)

c       read in the data

        do i=1,idim

          do j=1,1

            read(11,rec=2) iswe(i,j)

            print*,iswe(i,j)

          end do

        end do

 

can someone please advice me what is wrong with this code?  i've tried all sorts of variations and i haven't hit on the correct one yet.

thank you in advance.

---t

0 Kudos
1 Reply
Highlighted
Black Belt
24 Views

There are two likely sources of error, depending on what your intentions were w.r.t. what to read.

1. You open the file with RECL=2. If you specified the compiler option /assume:byterecl, you would have specified the record length as 2 bytes, which is probably what you want. By default, without that option, the unit for record length is 4 bytes, so RECL=2 would imply a record length of 8 bytes, which is probably not what you want.

2. The statement

read(11,rec=2) iswe(i,j)

will read a single record, namely, the 2nd record, into all the array elements  referenced in the double DO loop. This is probably not what you wanted, so you need to specify a record number that is matched to the (i,j) indices. You would need to know the structure of the SNODAS data files to decide what that correspondence should be.

0 Kudos