读取文件时出现 Fortran 运行时错误:"Bad repeat count"

Fortran runtime error while reading a file: "Bad repeat count"

我正在尝试使用 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 循环,但结果相同。

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

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

尝试读取 3 个复数。它被送入线路

1d0, 0d0, 0d0 % comment

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

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

这些数字是复数,而在 Fortran 中,复数应该在文件中带有括号,如下所示: (实部,虚部)(实部,虚部)

我真的不知道关于您提供的输入表单的标准是什么,但经过一些测试后 gfortran 抛出 Bad repeat count 错误 不管 % comment。即使在线上有四个或更多逗号分隔的实数,它也会抛出该错误。

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

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