Продолжение линии с pgfortran

Я пытаюсь скомпилировать файл с pgf90 или pgfortran(который может обрабатывать все виды исходных файлов, например, f90 или f77), который написан с помощью конструкций fortran 77 (то есть имеет расширение.f). У меня вопрос с продолжением строки.

open(10,file='/home/adaba/original/potentialenergy/vorticity/data/run/fort.10')

Так что эта строка явно выходит за пределы столбца 72. Вот что я попробовал. Я попытался разбить это на две строки, используя символ '&' в столбце 6 в новой строке, и скомпилировал его. Он прекрасно компилируется, но когда я запускаю программу, я получаю сообщение об ошибке, говорящее, что такой файл не найден, потому что он интерпретирует продолжение строки как дополнительный пробел между run и fort.10 и сообщает, что файл не найден.

Поэтому я сохранил код в одной строке, а затем добавил -Mextend, которая является специфической для pgi инструкцией для расширения строки. Теперь, кажется, добавить некоторые странные символы в конец имени другого файла намного позже в подпрограмме. Он правильно открывает fort.10, но не может открыть другой файл гораздо позже в коде и добавляет некоторые странные символы в конец этого файла (в двоичном виде). В Emacs, который является моим редактором, я вижу только фиолетовый цвет после оператора fort.10 (что указывает на то, что что-то не так).

Может ли кто-нибудь с опытом работы с pgi fortran помочь?

ОБНОВИТЬ

open(10,file='/home/adabas/originalPV/potentialenergy/vorticity/' // &
 &     'data/run/fort.10')

Я получаю синтаксическую ошибку pgf90-s-0034 в или около &(в верхней строке)

Pgf версия 17.0.4 64 бит

2 ответа

Решение

Вдобавок ко мне, есть пара вещей, которые я бы попробовал в первую очередь.

Вы можете запросить компилятор разрешить fixed format (.f) файлы должны быть длиннее 72 символов. В PGI это делается с помощью -Mextend флаг компилятора.

Кроме того, вы должны иметь возможность построить имя файла, разделив его на две строки. Что-то вроде:

 open(10,file='/home/adaba/original/' //
& 'potentialenergy/vorticity/data/run/fort.10')

где // является оператором для объединения строк. Есть и другие способы сделать это - вы можете определить символьную строку как fname во-первых, например.

Более подробно об ответе @Ross выше: в свободном формате Fortran есть другой способ: вы можете использовать синтаксис продолжения STRING, как показано ниже:

open(10,file = "/home/adaba/original/& &potentialenergy/vorticity/data/run/fort.10" )

Здесь есть только одна строка, разделенная на две строки. Пустое пространство между двумя амперсандами полностью игнорируется. Но все, что находится до первого и после второго амперсандов, даже пробел, считается частью строки.

Другие вопросы по тегам