Ошибка вывода Фортрана: lib-2

Я получаю сообщение об ошибке во время выполнения моей подпрограммы на Фортране с помощью коммерческой программы (Abaqus). Я использовал несколько операторов записи для печати результатов во внешние текстовые файлы. например печать некоторых целочисленных значений в уже существующий файл:

OPEN(UNIT=304,FILE="full_path_to_file/outputs.txt",position="append")
WRITE(304,*) KINC,NOEL,NPT

Я получаю эту ошибку:

UNRECOVERABLE error on system request
lib-2: No such file or directory
Encountered during an OPEN of unit 101
Fortran unit 101 is not connected

Я изучил документацию, а также много погуглил в Интернете об этой вещи lib-2, а также о единицах выходного файла Fortran, но безуспешно. Кроме того, я изменил номер юнита, но эта ошибка не имеет ничего общего с конкретным номером юнита. Я буду очень благодарен, если кто-то, кто знает об этом, может дать мне несколько советов о происхождении этой ошибки, а также о том, как ее решить.

Спасибо!
Мубин.


person Mubeen Shahid    schedule 09.02.2013    source источник
comment
если вы действительно застряли, одна вещь, которую вы можете найти полезной, - это написать свою собственную основную вызывающую программу для вызова вашей пользовательской подпрограммы для отладки.   -  person agentp    schedule 10.02.2013
comment
еще одна мысль, вы открываете файл при каждом вызове подпрограммы? Вы его закрываете? В любом случае это плохо для производительности, но, возможно, ошибка связана с открытием уже открытого модуля.   -  person agentp    schedule 10.02.2013
comment
на самом деле версия этого программного обеспечения для Windows (которую я установил с помощью Intel Visual Fortran) довольно хорошо работает с этой подпрограммой; а также другие Linux-машины с ifort + Abaqus также прекрасно записывают данные во внешние файлы!! Но на платформе Linux с ** Open64 Compiler Suite ** версия этого программного обеспечения для Linux имеет проблемы с записью данных во внешние файлы! и я все еще пытаюсь понять, является ли это проблемой совместимости (компилятор Abaqus + Open64) ??   -  person Mubeen Shahid    schedule 10.02.2013


Ответы (2)


Фрагмент вашего кода показывает запись в модуль Fortran 304, но сообщение об ошибке касается модуля Fortran 101. Существуют определенные ограничения компилятора на максимально возможное количество модулей. Возможно, 304 слишком велико для вашего компилятора. Или код где-то еще использует единицу 101? Найдите инструкцию open, которая использует модуль номер 101, и посмотрите, какой файл пытается открыть эта инструкция open. Сообщает ли компилятор номер строки оператора, вызывающего проблему?

P.S. В ответ на комментарии: что произойдет, если вы измените запись на «запись (*, *)»? Тогда программа работает? Если это так, это предполагает проблему с оператором open. Вы уверены, что путь к файлу правильный? Что у программы есть права на запись в этот каталог? Попробуйте удалить путь и открыть файл в текущем каталоге. Если у вас есть доступ к другому компилятору Fortran, попробуйте его и посмотрите, предоставит ли он вам более полезное сообщение об ошибке.

person M. S. B.    schedule 09.02.2013
comment
На самом деле у меня есть два оператора записи, первый оператор записи печатает данные в файл с номером модуля 101, а второй оператор записи печатает данные в файл с номером модуля 304. Этот анализ завершается, как только встречается самый первый оператор записи. (Я забыл скопировать все утверждения). Однако я играл со многими номерами единиц, и ошибка сохраняется :( - person Mubeen Shahid; 10.02.2013

В lib-2 нет ничего стандартного, это просто специфика компилятора (вы не упоминаете свой компилятор). Файл существует? У вас есть правильный рабочий каталог? Если вы пытаетесь

OPEN(UNIT=304,FILE="full_path_to_file/outputs.txt",status="replace")

, вы должны увидеть, где появился новый файл, и это то место, куда нужно поместить ваш файл для добавления в него.

person Vladimir F    schedule 09.02.2013
comment
У меня есть оборудование AMD и набор компиляторов AMD Open64 (который включает компилятор OpenF90 Fortran), и я использую Ubuntu 12.04. Файл уже существует и не используется какой-либо другой программой. Путь также правильный, и файл подпрограммы работает, если я использую IFORT от Intel (в Windows) с этой коммерческой программой. - person Mubeen Shahid; 09.02.2013
comment
Вы пробовали мой совет по отладке? - person Vladimir F; 09.02.2013
comment
Да, я пробовал с status="replace" , а также с другими вариантами status , но, к сожалению, ничего не помогло. - person Mubeen Shahid; 10.02.2013
comment
.. возможно ли, что эта ошибка вызвана основной программой? - person Mubeen Shahid; 10.02.2013
comment
я подозреваю, что у вас просто неправильный путь. Похоже, вы знаете, что Abaqus работает во вспомогательном каталоге, поэтому вы должны указать полный путь, но вы должны показать, что вы на самом деле используете в коде. (Я предполагаю, что у вас буквально нет Full_path_to_file..) - person agentp; 10.02.2013