проблема с использованием форматированного Fortran `write (6, *)` output - PullRequest
0 голосов
/ 21 марта 2011

В настоящее время я портирую приложение с Fortran на C и мне нужно вывести некоторые переменные для сравнения результатов. Я очень плохо знаком с Фортраном, и хотя я понимаю код и теперь портировал несколько тысяч строк, я сам новичок в написании кода на Фортране.
Этот код:

  write(6,'(A,I3,A,E12.8,A,E12.8,A,E12.8,A,E12.8,A,E12.8)') 'iHyd:',
 &     ih,'; dzdr: ',dzdr,'; tauray:', tauRay,'; zRay: ',
 &     zray,'; ampRay: ',realpart(aray),'+j*',
 &     imagpart(aray),'; qRay: ',qray,'; width :',w

Компилируется нормально, но при запуске программа завершается с:

At line 296 of file calcpr.for (unit = 6, file = 'stdout')  
Fortran runtime error: Expected INTEGER for item 15 in formatted transfer, got REAL  
(A,I3,A,E12.8,A,E12.8,A,E12.8,A,E12.8,A,E12.8)  
   ^  
 q0:    1432.3944878270595     
 nArrayR:                   501 nArrayZ:                   201
iHyd:  1; dzdr: ************; tauray:************; zRay: ************; ampRay:          NaN+j*         NaN
; qRay: 

Помимо того, что я действительно уродлив, для меня это не имеет особого смысла, поскольку ìh объявлен как integer*8, а не как real.

Так, как я могу решить это?

Ответы [ 3 ]

3 голосов
/ 21 марта 2011

Я считаю 6 спецификаций символов и переменных в выражении формата, но вы печатаете 8 из них.

редактирование:

лучше использовать выражение формата '(A, I3,7 (A, E12.8))'

1 голос
/ 21 марта 2011

Fortran «перезаписывает» формат, если нужно напечатать больше вещей, чем указано в операторе формата. Если оператор записи дает результаты, которые вы не понимаете, для диагноза проблемы может быть полезно удалять напечатанные по одному, пока ошибка не исчезнет.

0 голосов
/ 21 марта 2011

Там написано "пункт 15", который я бы взял в конце вашего списка, а не в начале. Понятно, что и w, и qray печатаются как REAL; Является ли один из них INTEGER? Возможно, вам придется изменить спецификатор формата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...