Search code examples
fortrangnuplotbinaryfilesbinary-data

Looking at binary output from fortran on gnuplot


So, I created a binary file with fortran, using something similar to this:

open (3,file=filename,form="unformatted",access="sequential")
write(3) matrix(i,:)

The way I understand it, fortran pads the file with 4 bytes on either end of the file, and the rest is just the data that I want (in this case, a list of 1000 doubles).

I want to read this in with gnuplot, however, I don't know how to get gnuplot to skip the first and last 4 bytes, and read the rest in as doubles. The documentation isn't very helpful in this regard.

Thanks


Solution

  • Testing with gnuplot 5.0, the following fortran unformatted data write of a double array x of size N,

    open(FID,file='binaryfile')
    do k = 1, N
      write(FID) x(k)
    end do 
    close(FID)
    

    can be understood by gnuplot with the following:

    plot 'binaryfile' binary format="%*1int%double%*1int"
    

    The %*1int means, skip once a four byte integer, effectively skipping the header and footer data fortran wraps around output.

    For more information and extrapolation for more complicated data, see the gnuplot 5.0 docs on binary and see the size of the formats with, show datafile binary datasizes. Note however that multi-column data (i.e. N doubles per write) can be accessed with the same format as above but as %Ndoubles where N is an integer. Then with using 1:3 for example, one would plot the first column against the 3rd.