Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

VAX floating to IEEE conversion

tkibedi
Beginner
622 Views

I`d like to convert real(kind=4) numbers from a file created on VAX computer to IEEE format. I found the LibVAXData library. It works correctly in a Win32 Fortran program, but gives incorrect results if I try to use it in a Win64 program. Has anybody tried to port the LibVaxData library for 64 bit environment?

0 Kudos
3 Replies
mecej4
Honored Contributor III
622 Views

Intel Fortran provides a much simpler way of reading unformatted files containing VAX real numbers: use the CONVERT='VAXD' or CONVERT='VAXG' clause, as appropriate, in the file OPEN statement.

0 Kudos
tkibedi
Beginner
622 Views

I ma ware that feature. The file I need to read is a fixed record length file, which contains a mixture of integer and real numbers. I believe I need to use conversion routines on specific elements of a record. I was hoping that somebody solved this problem either in FORTRAN or compiling the LibVAXData library in a 64 bit environment.

0 Kudos
mecej4
Honored Contributor III
622 Views

tkibedi wrote:

The file I need to read is a fixed record length file, which contains a mixture of integer and real numbers. I believe I need to use conversion routines on specific elements of a record.

I don't see why you need to do that. Here is an example in which we write a file with fixed length records. Each record contains an integer, followed by two real numbers in VAX-G floating format. Here is the program to write the file.

program tstw
open(11,file='vaxg.dat',form='unformatted',convert='vaxg',status='replace')
do i=1,100
   x=sin(i*0.01)
   write(11)i,x,3*x
end do
close(11)
end

Here is the program to read that file. If the program works correctly, columns 2 and 3 should match, as should columns 4 and 5.

program tstr
open(11,file='vaxg.dat',form='unformatted',convert='vaxg',status='old')
do i=1,100
   read(11)j,y,z
   x=sin(i*0.01)
   write(*,'(i3,2x,4ES15.7)')j,x,y,3*x,z
end do
close(11)
end

As long as you know the number and types of variables in each record of an existing unformatted Fortran file, you should be able to read such a file in a similar way, even if the record lengths are not all the same.

0 Kudos
Reply