Обычное использование блоков в Фортране - PullRequest
0 голосов
/ 15 июня 2010

Я новичок в Фортране и просто делаю некоторые простые вещи для работы.И как новый программист в целом, не уверен точно, как это работает, поэтому извините, если мои объяснения или обозначения не самые лучшие.В верхней части файла .F есть общие объявления.Человек, объясняющий это мне, сказал, что думай об этом как о структуре в C, и что они глобальны.Также в том же самом файле .F они объявлены с каким типом.Так что это что-то вроде:

COMMON SOMEVAR

INTEGER*2 SOMEVAR

А потом, когда я на самом деле вижу, что он используется в каком-то другом файле, они объявляют локальные переменные (например, SOMEVAR_LOCAL) и в зависимости от условия устанавливают SOMEVAR_LOCAL = 1 или 0.

Затем в строке есть еще одно условие, которое скажет что-то вроде

IF (SOMEVAR_LOCAL. eq. 1) 
SOMEVAR(PARAM) = 1;

(Опять же, я прошу прощения, если это не правильный Фортран, но у меня нет доступа ккод прямо сейчас).Так что мне кажется, что есть переменная типа «структура», называемая SOMEVAR, которая имеет некоторую длину (2 байта данных?), А затем есть локальная переменная, которая используется в качестве флага, так что в дальнейшем глобальныйstruct SOMEVAR может быть установлена ​​на это значение.Но поскольку есть (PARAM), это как массив для этого конкретного экземпляра?Благодарю.Извините за мои плохие объяснения, но, надеюсь, вы поймете, о чем я спрашиваю.

Ответы [ 2 ]

2 голосов
/ 15 июня 2010

Просто для усиления чего-то уже упомянутого @MSB: ОБЩИЕ блоки сообщают компилятору, как размещать переменные в памяти. Почти нет причин использовать их с современным Fortran, то есть с любым компилятором, который может работать с Fortran 90 или более поздней версией, и есть веские причины избегать их.

И еще добавлю: в современном Фортране вы можете делать примерно то же, что и структуры C, с пользовательскими типами. Проверьте свою документацию на ТИП.

1 голос
/ 15 июня 2010

Первое объявление имеет SOMEVAR в виде скалярного целого числа из двух байтов. Использование, которое вы показываете, имеет SOMEVAR имеет массив - на основе его индексации. Это возможно сделать в Фортране через «связь последовательностей», но это плохая практика. В одном файле вы можете объявить SOMEVAR как INTEGER * 2, и этому скаляру выделено два байта. В другом файле вы можете объявить его как INTEGER * 1 SOMEVAR (2), и два байта зарезервированы, на этот раз для массива из двух элементов, каждый из которых по одному байту. Использование одного и того же общего блока в обоих файлах может привести к тому, что эти две переменные будут перекрываться, побайтово-последовательная связь. Много лет назад, когда памяти было очень мало, программисты делали это, чтобы уменьшить использование памяти, зная, что разные подпрограммы использовали переменные в разное время. Причины сделать это сегодня очень и очень ограничены. Главным образом не следует, потому что это может сбить с толку.

Вы также можете установить связь последовательности с помощью оператора EQUIVALENCE. Опять же, лучше избегать. Современной заменой времен, когда нужно делать «хитрые» вещи, для которых требовался оператор EQUIVALENCE, является функция TRANSFER.

...