fortran变量声明的好风格是什么?

时间:2014-03-11 16:45:51

标签: coding-style fortran fortran77

所以我需要声明很多变量,原始代码如下所示:

    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)

这被认为是好的风格,还是有更好的方法?请注意,第二种方式允许对每个变量进行注释,如果我可以添加另一个变量,我不必使用行继续。

P.S。:有一个共识/风格的圣经/广泛认可的源自Fortran编程风格&好的做法?

2 个答案:

答案 0 :(得分:5)

好的风格不是首先使用维度语句。特别是如果你使用隐式类型。每个变量都应该有一个声明的类型,最好将数组维度放在那里。使用带有类型声明的属性(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)

可能更好。

尝试将相关变量分组到一行,将其他变量分组到不同的行。

我还建议为大小1000和20000声明parameter常量。

答案 1 :(得分:0)

好的风格是参数化尺寸

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问世时应用。