Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coding style fortran中变量声明的好样式是什么?_Coding Style_Fortran_Fortran77 - Fatal编程技术网

Coding style fortran中变量声明的好样式是什么?

Coding style fortran中变量声明的好样式是什么?,coding-style,fortran,fortran77,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(1

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

    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)
这被认为是好的风格,还是有更好的方式?请注意,第二种方法允许对每个变量进行注释,如果可能添加另一个变量,则不必使用行延续


附言:关于Fortran编程风格和良好实践,是否有一个共识/风格圣经/广泛认可的来源?

好的风格首先不是使用维度语句。特别是如果使用隐式类型。每个变量都应该有一个声明的类型,最好将数组维度放在那里。将属性与类型声明一起使用(Fortran 90+)

保持线路不要太长。两种声明大小(形状)的方法都是可能的

如果您需要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大小的
参数
常量。

好的风格是首先不使用维度语句。特别是如果使用隐式类型。每个变量都应该有一个声明的类型,最好将数组维度放在那里。将属性与类型声明一起使用(Fortran 90+)

保持线路不要太长。两种声明大小(形状)的方法都是可能的

如果您需要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的尺寸声明
参数
常量。

最好将尺寸参数化

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

好的风格应该是将尺寸参数化

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

A(可能很小)要点:注意隐式键入从
DIMENSION
语句转换为
DIMENSION
属性。DIMENSION有什么问题?我必须说程序使用了“隐式实数*8(a-h,o-z)”,如果这有任何关联的话。dimension语句本身没有错,但它确实倾向于与(不受欢迎的)隐式类型强耦合。此外,在声明中将类型和属性放在一起要比在代码中四处搜寻以完全了解变量的含义要好得多。[无可否认,F77中的属性要少得多,但仍然…]@PatronBernard我建议不要隐式键入。是的,我怀疑这段代码是十年前由一位顽固的物理教授编写的,他三十年前就学会了F77。为什么线必须相当长?这背后的动机是什么?一个(可能很小)要点:注意隐式键入从
维度
语句转换为
维度
属性。维度有什么问题?我必须说程序使用了“隐式实数*8(a-h,o-z)”,如果这有任何关联的话。dimension语句本身没有错,但它确实倾向于与(不受欢迎的)隐式类型强耦合。此外,在声明中将类型和属性放在一起要比在代码中四处搜寻以完全了解变量的含义要好得多。[无可否认,F77中的属性要少得多,但仍然…]@PatronBernard我建议不要隐式键入。是的,我怀疑这段代码是十年前由一位顽固的物理教授编写的,他三十年前就学会了F77。为什么线必须相当长?这背后的动机是什么?