读取文件时出现Fortran运行时错误:"重复次数错误"

时间:2015-01-08 09:55:28

标签: file-io fortran complex-numbers

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

2 个答案:

答案 0 :(得分:2)

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

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

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

1d0, 0d0, 0d0 % comment

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

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

答案 1 :(得分:1)

数字的尺寸复杂,而在fortran中,复数应该在带有括号的文件中:  (realpart,imaginarypart)(realpart,imaginarypart)

我真的不知道标准对您提供的输入表单的说法,但经过一些测试gfortran会抛出Bad repeat count错误而不管% comment < / em>的。即使在行上有四个或更多逗号分隔的实数,它也会抛出该错误。

另一方面,现在ifort按照你的方式读取行 - 但要小心 - 它将每个逗号分隔的值读作复数变量的实部,设置虚部为零。 (即它只使用每一行的前两个值并丢弃第三个)

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