Какой хороший стиль для объявления переменных в фортране?

Итак, мне нужно объявить множество переменных, и исходный код выглядел так:

    DIMENSION energy_t(20000),nrt(20000),npsh(1000),xx(1000),yy(1000),
    :step(1000),stepz(1000),r1(1000),rr(1000),ic(1000),diffrr(1000)

И я переписал это так:

    DIMENSION
    :energy_t(20000),
    :nrt(20000),
    :npsh(1000),
    :step(1000),
    :r1(1000),
    :rr(1000),
    :ic(1000),
    :diffrr(1000)

Это считается хорошим стилем или есть лучшие способы? Обратите внимание, что второй способ позволяет комментировать каждую переменную, и мне не нужно использовать продолжение строки, если я могу добавить другую переменную.

PS: есть ли консенсус/библия стиля/широко признанный источник по стилю программирования Fortran и передовой практике?


person Jan M.    schedule 11.03.2014    source источник


Ответы (2)


Хороший стиль заключается в том, чтобы вообще не использовать оператор измерения. Особенно, если вы используете неявную типизацию. Каждая переменная должна иметь объявленный тип и лучше поместить туда размерность массива. Используйте атрибуты с объявлением типа (Fortran 90+).

real :: energy_t(20000), nrt(20000)
real, dimension(1000) :: npsh, xx, yy, step, stepz, r1, rr, ic, diffrr

Держите линии не слишком длинными. Возможны оба способа объявления размера (формы).

Если вам нужен Fortran 77, вы более ограничены, но все же

real energy_t(20000), nrt(20000)
real npsh(1000), xx(1000), yy(1000), step(1000), stepz(1000)
real r1(1000), rr(1000), ic(1000), diffrr(1000)

наверное лучше.

Попробуйте сгруппировать связанные переменные в одной строке, а остальные — в разных.

Я бы также предложил объявить константы parameter для размеров 1000 и 20000.

person Vladimir F    schedule 11.03.2014
comment
(Возможно, очень незначительный) момент: остерегайтесь неявного преобразования типа из оператора DIMENSION в атрибут DIMENSION. - person francescalus; 11.03.2014
comment
Что не так с размерностью? Я должен сказать, что программа использует IMPLICIT REAL*8 (a-h,o-z), если это имеет какое-либо значение. - person Jan M.; 11.03.2014
comment
Само по себе в операторе измерения нет ничего плохого, но оно, как правило, тесно связано с (нелюбимой) неявной типизацией. Кроме того, иметь тип и атрибуты вместе в объявлении намного приятнее, чем искать код, чтобы получить полное представление о том, что означает переменная. [Правда, в F77 гораздо меньше атрибутов, но все же...] - person francescalus; 11.03.2014
comment
@PatronBernard Я бы рекомендовал отказаться от неявного ввода. - person Kyle Kanos; 11.03.2014
comment
Да, я подозреваю, что этот код был написан десять лет назад каким-то упрямым профессором физики, который тридцать лет назад выучил F77. Почему строки должны быть достаточно длинными? Какая мотивация стоит за этим? - person Jan M.; 11.03.2014
comment
Почему достаточно длинные очереди? Чтобы они легко читались. В то время как стандарты Fortran ›= 90 допускают 132 символа, в зависимости от вашего терминала, редактора, шрифта и т. д., это может быть трудно читать. - person M. S. B.; 11.03.2014
comment
Но это довольно субъективно, не так ли? Я чувствую, что объявление этих переменных в столбце с продолжением строки дает лучший обзор, позволяет комментировать каждую переменную (как и в этом случае, в этом коде не было комментариев к переменным, и я до сих пор понятия не имею, что некоторые из них делают). Опять же, имя переменной также следует выбирать осторожно, что, я думаю, не относится к этому коду. Это явно закодировано кем-то, кто действительно был в том, что он / она делал в то время, игнорируя любое будущее использование. - person Jan M.; 11.03.2014
comment
Да, если переменные действительно разные, и одного комментария для них мало, то почему бы не один на одной строке? Думаю, это была бы довольно короткая линия. - person Vladimir F; 11.03.2014
comment
Но короткие строки не проблема, если они улучшают читаемость, ИМХО. Извините, если это бессмысленный спор о довольно субъективном вопросе. - person Jan M.; 11.03.2014
comment
Нет, конечно нет. Под разумно длинным я, конечно же, подразумевал не слишком длинный. - person Vladimir F; 11.03.2014

Хорошим стилем было бы параметризовать размеры

integer, parameter:: NODES_MAX = 1000, TIMES_MAX = 2000, COORD_MAX = 1000
real energy_t(TIMES_MAX), ..
real npsh(NODES_MAX), xx(COORD_MAX) ...

так что циклы могут быть параметризованы.

do ii = 1, COORD_MAX
    xx(ii) = ...
    yy(ii) = ..
end do

и можно проверить ошибки

if (ii .gt. NODES_MAX) then
    print *, 'Please increase NODES_MAX oldvalue=', NODES_MAX, ' required=', ii
    pause
end if

Это также сведет к минимуму количество необходимых изменений при увеличении/уменьшении размеров. Этот стиль можно было применить и 30 с лишним лет назад, когда вышел F77.

person cup    schedule 24.03.2014