Binary FORTRAN非格式化输出
我已经在这里发布了,但现在我已经更改了代码Binary FORTRAN非格式化输出,binary,fortran,Binary,Fortran,我已经在这里发布了,但现在我已经更改了代码 program v10 implicit none real :: xmin,xmax,ymin,ymax,zmin,zmax,size integer :: nx,ny,nz,i,j,nodestotal,irec real,dimension(15025) :: v integer,dimension(15025) :: v1 open(unit=34, file='for.header', status='old') read(34,
program v10
implicit none
real :: xmin,xmax,ymin,ymax,zmin,zmax,size
integer :: nx,ny,nz,i,j,nodestotal,irec
real,dimension(15025) :: v
integer,dimension(15025) :: v1
open(unit=34, file='for.header', status='old')
read(34,115) xmin,xmax,ymin,ymax,zmin,zmax,size,nx,ny,nz
115 format(7f10.3,3i10)
open(unit=35, file='vel.txt', status='unknown')
read(35,*)v
v1=nint(v)
inquire (iolength = irec) v1(1)
open (36, file="lia2", form="unformatted", access="direct", recl=2*irec)
do i=1,15025
write(36, rec=i) v1(i)
end do
end
我已经用gfortran在Ubuntu 16.04上编译过了。
当我转储二进制输出时,我得到了
0000000 5000 0 5000 0
*
0011300 5000 0 5350 0
0011320 5350 0 5350 0
*
0022620 5700 0 5700 0
*
0034120 5700 0 5727 0
0034140 5727 0 5727 0
*
0045440 5755 0 5755 0
*
0056740 5755 0 5783 0
0056760 5783 0 5783 0
*
0070260 5811 0 5811 0
*
0101560 5811 0 5838 0
0101600 5838 0 5838 0
*
0113100 5866 0 5866 0
*
0124400 5866 0 5894 0
0124420 5894 0 5894 0
*
0135720 5922 0 5922 0
*
0147220 5922 0 5950 0
0147240 5950 0 5950 0
*
0160540 5977 0 5977 0
*
0172040 5977 0 6005 0
0172060 6005 0 6005 0
*
0203360 6033 0 6033 0
*
0214660 6033 0 6061 0
0214700 6061 0 6061 0
*
0226200 6088 0 6088 0
*
0237500 6088 0 6116 0
0237520 6116 0 6116 0
*
0251020 6144 0 6144 0
*
0262320 6144 0 6172 0
0262340 6172 0 6172 0
*
0273640 6200 0 6200 0
*
0352600 6200 0
0352610
将粘贴vel.txt
为什么要插入这些零?这是因为
recl=2*irec
我看不出任何理由来解释2*
,它应该是irec
说明:
inquire (iolength = irec) v1(1)
询问一个元素为v1
的记录有多大,recl=2*irec
将文件记录设置为该元素的两倍。您的记录可以保存两个数字,而您总是只写一个数字
write(36, rec=i) v1(i)
最好(可能更快)将记录长度设置为整个数组的长度,并立即写入整个内容