Group Abstract Group Abstract

Message Boards Message Boards

Read reals from binary file created by Fortran

Posted 6 years ago

Hello! I've created a binary file using Intel Fortran (Parallel Studio)+Visual Studio (x64). The file stores 3d array of real numbers and has very simple structure: first three numbers stored in the file are integers (kind=4) - they are dimensions of the array. Other numbers are reals (also kind=4). To write them into the array in Fortran I used functions

open(1, FILE=path, iostat=IOS, action="WRITE", form="BINARY", recl=4)

write(1) imax; write(1) jmax; write(1) kmax;

write(1) arr(i,j,k)

To read this file in Mathematica I used {N1, N2, N3} = BinaryReadList[filename, "Integer32", 3] for integers and they were read succesfully. The problem is that real numbers were read incorrecly when I've used BinaryReadList[filename, "Real32", 1] for each of them. Changing the option "ByteOrdering" doesn't help.

POSTED BY: Pavel AZ
6 Replies

Hello Pavel,

At issue is you need to account for the presence of record markers in the Fortran binary file. For each Fortran Write statement, a record is streamed out, consisting of start and end record markers, and the record payload in between. The markers are 4-byte integers with value equal to #bytes of the payload. It may be that on your architecture, the markers are 8-byte integers.

POSTED BY: Frank Iannarilli
Posted 6 years ago

Thank you, I've opened the file in Matlab, that may be even better for my current needs. But I will examine the file structure and Fortran options.

POSTED BY: Pavel AZ

Also, I do not agree that you are specifying a record length of 4. According to the Fortran specification opening using form=BINARY overrides the recl specifier. I believe that Binary writes W*64 on 64 bit machines (but I am not certain without examining a file).

POSTED BY: Neil Singer
POSTED BY: Neil Singer

Pavel,

I would think that you should use Real64.

Regards

Neil

POSTED BY: Neil Singer
Posted 6 years ago

No, that doesn't work. And I've mentioned that I've used real (kind=4) in Fortran that takes 4 bytes of memory.

POSTED BY: Pavel AZ
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard