我正在尝试使用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
循环,但结果相同。
答案 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
)行为是一个简单的修复,那就是声明几个实数。读入实数,然后将它们分配给复杂的变量。