【问题标题】:Fortran runtime error while reading a file: "Bad repeat count"读取文件时出现 Fortran 运行时错误:“重复计数错误”
【发布时间】:2024-04-13 22:05:01
【问题描述】:

我正在尝试使用 fortran 读取输入文件,但在运行时出现以下错误:

At line 118 of file prog.f90 (unit = 53, file = 'data.dat')
Fortran runtime error: Bad repeat count in item 1 of list input

数据文件如下

3, 5, 3 %comment
%%%%%%%%%%%%%%
1d0, 0d0, 0d0 % comment
0d0, 0d0, 1d0 
%%%%%%%%%%%%%%
1, 1, identity, 1, 1 %comment
1, 2, sigmax, 2, 2
2, 3, sigmax, 2, 2
1, 3, sigmaz, 1, 3
3, 3, identity, 1, 1
%%%%%%%%%%%%%%
0, 0            %comment

prog.f90 有趣的部分是

COMPLEX(KIND(1D0)), DIMENSION(:), ALLOCATABLE:: H1, H2
INTEGER :: i,A,B,C
CHARACTER(50) :: GHOST

OPEN(UNIT=53,file='data.dat',status='old')
READ(53,*) A,B,C
READ(53,*) GHOST
ALLOCATE (H1(A),H2(A))
READ(53,*) (H1(i), i=1,A)
READ(53,*) (H2(i), i=1,A)

第 118 行是READ(53,*) (H1(i), i=1,A)。我也尝试了明确的do 循环,但结果相同。

【问题讨论】:

    标签: file-io fortran complex-numbers


    【解决方案1】:

    我还没有测试过,但我希望

    READ(53,*) (H1(i), i=1,A)
    

    尝试读取 3 个复数。它得到了喂线

    1d0, 0d0, 0d0 % comment
    

    它从中得到 1½ 个复数,然后在 % 符号上出错,将其误解为语法上无效的重复计数。

    我建议在执行 read 语句时在文件中提供 3 个复数。

    【讨论】:

      【解决方案2】:

      数字是复数,而在 fortran 中,复数应该在文件中,带括号为: ( 实部 , 虚部 ) ( 实部 , 虚部 )

      我真的不知道标准对您提供的输入表单有何规定,但经过一些测试gfortran 会抛出Bad repeat count 错误不管% comment。即使一行中有四个或更多逗号分隔的实数,它也会引发该错误。

      另一方面,现在ifort 会按照您的方式读取该行 - 但请注意 - 它会将每个逗号分隔值读取为复变量的实部,将虚部设置为零. (也就是说,它只使用每行的前两个值并丢弃第三个)

      您确实需要研究代码,以确保您了解解决此问题的目的。如果后面的 (ifort) 行为是意图,一个简单的解决方法是声明几个实数。读入实数,然后将它们分配给您的复变量。

      【讨论】:

        最近更新 更多