2015-01-08 15 views
0

Я пытаюсь прочитать файл ввод с Fortran, но я получаю следующее сообщение об ошибке во время выполнения:Fortran ошибки во время выполнения во время чтения файла: «Bad числа повторов»

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) 

где сто восемнадцатый линия READ(53,*) (H1(i), i=1,A). Я также пробовал явный цикл do, но с тем же результатом.

ответ

2

Я не проверял, но я бы ожидать

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

пытаться читать 3 комплексных чисел. Он получает кормили линию

1d0, 0d0, 0d0 % comment 

, от которого он получает 1½ комплексных чисел, а затем barfs на % знак, искажая его как синтаксический недействительные количество повторов.

Я предлагаю предоставить 3 комплексных номера в файле, если этот оператор read выполнен.

1

Цифры имеет такие размеры комплекса, в то время как в Фортране комплексных чисел должно быть в файл с скобкой, как: (realpart, imaginarypart) (realpart, imaginarypart)

Я действительно не знаю, что стандарты говорят о представленную форму ввода, но после некоторого тестирования gfortran выбрасывает Bad repeat count ошибку независимо от % comment. Он выдает эту ошибку даже с четырьмя или более запятыми в строке.

Теперь ifort, с другой стороны, читает строку так, как она есть у вас есть - но следите - она ​​считывает каждое из значений, разделенных запятыми, как реальную часть вашей сложной переменной, устанавливая мнимую часть на ноль. (то есть он использует только первые два значения в каждой строке и отбрасывает третью).

Вам действительно нужно изучить код, чтобы убедиться, что вы понимаете, что было предназначено для выяснения того, как это исправить. Если более поздняя (ifort) поведение является намерением, одно простое исправление заключалось бы в объявлении пары реалов. Прочитайте в действиях, затем назначьте их своим сложным переменным.

Смежные вопросы