Fortran Coder

查看: 10301|回复: 3
打印 上一主题 下一主题

[文件读写] 数据读取问题

[复制链接]

68

帖子

25

主题

0

精华

专家

F 币
321 元
贡献
197 点
跳转到指定楼层
楼主
发表于 2020-4-30 02:32:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,

我想请教大家一个问题。我在读取一个文件(INPUT.dat)的数据,其中文件的内容如下。
Hamiltonian file with magnetization along z axis
ac_111_0_90_wannier90_hr.dat
Output file with magnetization along z axis
ac_111_0_90_wannier90.wout
Hamiltonian file with magnetization along different direction
ac_111_0_85_wannier90_hr.dat
ac_111_0_95_wannier90_hr.dat
ac_111_90_85_wannier90_hr.dat
ac_111_90_95_wannier90_hr.dat
Angle difference in unit of degree
5.0
k point mesh
50 50
Velocity direction of Hamitlonian (0 - along x directin; 1 - along y direction)
0
Femi energy value in unit of eV
-0.5415
Energy window for Fermi surface in unit of eV
0.01
Broadening value in unit of eV
0.05

这个文件中的第11行是一个浮点数5.0。我读取该文件的部分程序如下。
[Fortran] 纯文本查看 复制代码
CHARACTER (LEN=50)    :: na(6)
DOUBLE PRECISION       :: an
INTEGER                       :: km(2)
INTEGER                       :: vd
DOUBLE PRECISION       :: fermi
DOUBLE PRECISION       :: wf
DOUBLE PRECISION       :: bv

OPEN (UNIT=3, FILE='INPUT.dat', STATUS='OLD')

READ (UNIT=3, FMT=*)
READ (UNIT=3, FMT='(a)') na(1)
READ (UNIT=3, FMT=*)
READ (UNIT=3, FMT='(a)') na(2)
READ (UNIT=3, FMT=*)
READ (UNIT=3, FMT='(a)') na(3)
READ (UNIT=3, FMT='(a)') na(4)
READ (UNIT=3, FMT='(a)') na(5)
READ (UNIT=3, FMT='(a)') na(6)
READ (UNIT=3, FMT=*)
READ (UNIT=3, FMT='(a)') an
READ (UNIT=3, FMT=*)
READ (UNIT=3, FMT=*) km
READ (UNIT=3, FMT=*)
READ (UNIT=3, FMT=*) vd
READ (UNIT=3, FMT=*)
READ (UNIT=3, FMT=*) fermi
READ (UNIT=3, FMT=*)
READ (UNIT=3, FMT='(a)') wf
READ (UNIT=3, FMT=*)
READ (UNIT=3, FMT=*) bv
write (unit=*,fmt=*) na(6), an


但是,当我查看屏幕上输出的变量时,看到的却是
ac_111_90_95_wannier90_hr.dat                       6.013568264329796E-154
也就是说变量an的值是6.013568264329796E-154,可是我的文件里对应于an变量的数据是5.0。


请问为什么会是这样呢?能麻烦大家给些建议,怎么解决这个问题吗?谢谢啦。
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

68

帖子

25

主题

0

精华

专家

F 币
321 元
贡献
197 点
沙发
 楼主| 发表于 2020-4-30 03:23:47 | 只看该作者
对不起,我发现我的代码问题了。

READ (UNIT=3, FMT='(a)') an,这个语句的读取格式不对。应该是READ (UNIT=3, FMT=*) an

实在抱歉,问了这么乌龙的问题。我想删除这个帖子,但不知道怎么删除。所以就只能在这里回复下自己。耽误大家宝贵时间了。实在抱歉。

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1572 元
贡献
676 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

板凳
发表于 2020-4-30 08:06:53 | 只看该作者
我亲爱的朋友,你的代码太麻烦了。

改成这样,简单又易读。

[Fortran] 纯文本查看 复制代码
program www_fcode_cn
  use ISO_C_Binding
  implicit none
  integer :: i 
  real :: an
  Open(12,File="INPUT.dat")
  Do i = 1 , 10
    Read(12,*)
  End Do
  read(12,*) an
  write(*,*) an
  Close(12)
end program www_fcode_cn

68

帖子

25

主题

0

精华

专家

F 币
321 元
贡献
197 点
地板
 楼主| 发表于 2020-4-30 13:52:34 | 只看该作者
fcode 发表于 2020-4-30 08:06
我亲爱的朋友,你的代码太麻烦了。

改成这样,简单又易读。

非常感谢你的建议。

下次问问题前,我得多仔细想想。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-5 05:34

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表