1)--------------------------------------------------------------------------------------
FOR的输出分 有格式form = 'formatted'、无格式form = 'unformatted'两种,前者是默认输出格式,即如果open语句里不声明form的话,那就是formatted。
无格式又分 直接存取access = 'direct'、间接存取access = 'seuqential' 两种,后者是无格式文件的默认格式。
几个open示例:
有格式文件:
    open( 1, file = '...', status = 'new', form = 'formatted' )
    或者
    open( 1, file = '...', status = 'old')
无格式/顺序文件:
    open( 1, file = '...', status = 'new', form = 'unformatted', access = 'sequential' )
    或者
    open( 1, file = '...', status = 'new', form = 'unformatted' )
无格式/直接文件:
    open( 1, file = '...', status = 'new', form = 'unformatted', access = 'direct', recl = ... )

2)--------------------------------------------------------------------------------------
如果是向 有格式文件 输出,则write语句可以写成:表控格式,如write( 1,* ) var; 或者显式说明格式,如write( 1,'(5i2)' ) var
如果是向 无格式/顺序文件 输出,则write语句应写成: write( 1 ) var
如果是向 无格式/直接文件 输出,则write语句应写成: write( 1, rec = k ) var

3)--------------------------------------------------------------------------------------
对于 无格式/直接文件 , open中的recl指明了一个输出记录的长度。它具体等于多少要看输出write语句如何写,同时write语句中的记录号rec也要写正确。
比如有一个m(20,30)的二维数组,可以有如下几种写法(注意recl, rec, m的变化):
a) 把整个数组看作一个记录(1个记录,1个记录长度20*30):
open ( 1, file = '...', status = 'new', form = 'unformatted', access = 'direct', recl = 20*30 )
write( 1, rec = 1 ) m
b) 把一行看作一个记录(20个记录,1个记录长度30):
open ( 1, file = '...', status = 'new', form = 'unformatted', access = 'direct', recl = 30 )
do k = 1, 20
  write( 1, rec = k ) ( m( k, p ), p = 1, 30 )
end do
c) 把一个数组元素看作一个记录(20*30个记录,1个记录长度1):
open ( 1, file = '...', status = 'new', form = 'unformatted', access = 'direct', recl = 1 )
k = 0
do i = 1, 20
   do j = 1, 30
      k = k + 1
      write( 1, rec = k ) m( i, j )
或者
      write( 1, rec = (i-1)*30+j ) m( i, j )
   end do
end do

顺说一句,二维数组是先存列再存行的,所以上述a)打印m元素的顺序与c)不同,而与下述d)相同
d) 把一个数组元素看作一个记录:
open ( 1, file = '...', status = 'new', form = 'unformatted', access = 'direct', recl = 1 )
k = 0
do j = 1, 30
   do i = 1, 20
      k = k + 1
      write( 1, rec = k ) m( i, j )
或者
      write( 1, rec = (j-1)*20+i ) m( i, j )
   end do
end do

在一些旧的FOR编译器中(比如Fortran PowerStation 4.0),对recl解释成字长而非字节,因此还需要将recl乘以4才能正确读取。现在常用的CVF编译器已不需要这样做。
PS:你的33个数据可能并没有分放在3行半上。可能只是记事本查看的原因,当一屏显示不下时自动换行显示,但数据可能还是在一行上。所以要读取的话可试试直接写成:
write( 1, * ) ( m( k ), k = 1, 33 )
如果m一开始就声明成一个只有33个元素的数组,则也可写成
write( 1, * ) m

4)--------------------------------------------------------------------------------------
二进制存放的数据还有一个反位的问题。一般在UNIX机上是二进制数是高位结束,在WIN和LINUX中是低位结束(没记错的话)。如果读数时出现很大的怪数,比如1.e+35之类,或者执行时显示读取文件到末尾,或者是记录不够长,并且你又确定程序没错,那么多半是反位问题的原因。
这时如果你用的编译器有反位选项,可以加上,比如ifort编译器可以写:
ifort -convert big_endian xxx.f90  或
ifort -convert little_endian xxx.f90
也可以直接在FOR程序的OPEN语句中说明,比如:
open( 1, file='...', form='unformatted', access='direct', recl=..., convert='big_endian' )

open( 1, file='...', form='unformatted', access='direct', recl=..., convert='little_endian' )
big_endian 适用于在本地PC读取UNIX服务器上生成的二进制数据。
little_endian适用于在UNIX服务器读取本地PC生成的二进制数据。

fortran open使用相关推荐

  1. 将Tensor核心引入标准Fortran

    将Tensor核心引入标准Fortran 调优的数学库是从HPC系统提取最终性能的一种简单而可靠的方法.但是,对于寿命长的应用程序或需要在各种平台上运行的应用程序,为每个供应商或库版本调整库调用可能是 ...

  2. linux执行命令段错误,Linux运行fortran程序 出现段错误(segmentation fault)

    在Windows下编译运行fortran程序时,没有问题 ,运行时出现堆栈错误,只要在CVF里修改一下扩大内存设置: MAIN MENU: Project ===> Setting ===> ...

  3. matlab中的expotest,提高Fortran矩阵指数性能(Expokit比Matlab、Python慢)

    我正在进行一个模拟,其中的瓶颈是执行大量复杂的双精度矩阵指数运算,我发现Fortran(Expokit)对于小矩阵很好,但对于较大的矩阵,它的性能比Matlab或Python差.在 我在下面包含了一个 ...

  4. .Net(c#) 通过 Fortran 动态链接库,实现混合编程

    c# 与 Fortran 混合编程解决方案主要有两种: 1. 进程级的交互:在 Fortran 中编译为控制台程序,.Net 调用(System.Diagnostics.Process),然后使用 P ...

  5. CUDA FORTRAN编译器

    支持CUDA FORTRAN的编译器目前只有一种:PGI编译器!不用怀疑,你没的选. 原文发布时间为: 2016-12-7 19:16:53 原文由:LGZ 发布,版权归属于原作者  本文来自云栖社区 ...

  6. 这些代码改变了科学界:从Fortran、arXiv到AlexNet

    转自:机器之心 2019 年,「事件视界望远镜」团队拍下了第一张黑洞照片.这张照片并非传统意义上的照片,而是计算得来的--将美国.墨西哥.智利.西班牙和南极多台射电望远镜捕捉到的数据进行数学转换.该团 ...

  7. 窥透Fortran的方方面面

    窥透Fortran的方方面面 --<Fortran权威指南> Fortran 是英文 FORmula TRANslator 的缩写,译为"公式翻译器",是世界上最早出现 ...

  8. Nature盘点的这些代码,个个都改变了科学:Fortran、AlexNet还有arXiv等

    杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 今天,Nature的一篇报道有点不同. 没有说最新的科学研究进展,也没有说这个时代的科学家们. 而是将镜头聚焦在计算机上,更具体一点,是聚焦 ...

  9. 在Itanium2、Intel Fortran Compiler上安装VASP4.6

    1.VASP4.6 是量子化学计算的一个商业软件,这里是源码包.来自奥地利.这个软件也可用在物理系,做分子动力学等分析. 2.首先声明一点:VASP4.6无法在Intel Fortran Compil ...

  10. CUDA,C++,Java,Python,Fortran运行速度比较

    通过计算100万以内素数的运行时间比较这5种语言的运行速度. 每种语言运行30次,取平均值.由于python和fortran的运行速度和Java和C++运行差距过大,python只计算了3次,Fort ...

最新文章

  1. 【转】实战 SSH 端口转发
  2. C++并发编程线程间共享数据std::future和sd::promise
  3. 关于java多态中覆盖的理解
  4. 李航《统计学习方法》笔记
  5. where里能用max吗_超市里四五元钱的速冻饺子能买吗?
  6. vue $emit 父组件与子组件之间的通信(父组件向子组件传参)
  7. 完全支持双层PDF 开源的PDF分离与合并软件 C 版本 转自codeproject
  8. Zynq UltraScale+ MPSoC配置DDR4参数
  9. win7设置ipsec_Win7系统设置L2TP的方法【图文教程】
  10. #计算机专业权威期刊#
  11. 凸优化和非凸优化的区别
  12. matlab读ascii的dat,[转载]MATLAB读取和调用各种数据(txt,dat,ma
  13. 使用exe4j把jar转换成exe文件时,报错java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite
  14. ZBrush - 冰雪奇缘角色建模
  15. Expanding Cards
  16. Pytorch系列(四):猫狗大战1-训练和测试自己的数据集
  17. Go实现随机、轮训、权重、哈希负载均衡
  18. 海康LED显示屏网络协议对接
  19. 论文选读:Maximizing the Spread of Cascades Using Network Design
  20. Android模拟器简介—更新到最新的3.0 Honeycomb

热门文章

  1. 涡轮增压matlab,车用涡轮增压进气系统消声器声学理论及应用.pdf
  2. 西布罗姆VS伯明翰赛事解读:降班马主场火力强劲串关思路分享
  3. ERA5再分析数据(二)
  4. 四川科技馆 智能控制 协议设计(skycto JEEditor)
  5. 初出茅庐的小李第36篇博客之读取旋转编码器正反转状态(arduino uno 测试)
  6. 离散化传递函数c语言,连续传递函数离散化的方法与原理
  7. 在html中插入图片
  8. OSM逆地理服务器搭建(三)之国外地址解析
  9. 系统解剖学 | 周围神经系统 | 脑神经
  10. 计算机毕业设计Node.js+Express人体健康数据管理平台(源码+程序+lw+远程调试)