英特尔 Fortran 95 编译器是否允许模块数组具有非常量大小?

2023-12-20

我已经下载了 Fortran 90/95 自适应网格细化库(Paramesh http://www.physics.drexel.edu/~olson/paramesh-doc/Users_manual/amr.html),现在我正在尝试编译一个附带的示例程序。在此过程中,我修改了 Makefile 以使用 gfortran 而不是 Intel Fortran 编译器。

在库代码中,有一个包含以下代码片段的模块:

       module physicaldata

! Many many lines of variable definitions here
!....
       Public :: nfluxvar
       Integer,Save :: nfluxvar

! Many many lines of variable definitions here
!....

       end module physicaldata

其他地方有

       module flux_assign
        use physicaldata
        integer :: iflux_target(nfluxvar)
       end module flux_assign

这导致这个错误 https://stackoverflow.com/questions/14296787/fortran-95-array-must-have-constant-shape-error:

advance_soln_vdt.F90:16.40:
    Included at amr_main_prog.F90:29:

       integer :: iflux_target(nfluxvar)
                                    1
Error: The module or main program array 'iflux_target' at (1) must have constant shape

如果使用其他编译器编译该代码可以工作吗?我知道对于标准 Fortran,或者至少是 gfortran 使用的 Fortran,要求用于表示数组大小的整数变量应该具有parameter附加到它们的关键字。其他 Fortran 编译器不也是这样吗?其他编译器是否包含此类非标准功能?


当前的 Intel Fortran 会针对此代码发出错误。

标准语言要求在模块(或主程序或块数据或子模块,以及在其他一些地方使用的数组)的规范部分中声明的不可分配、非指针数组必须具有常量数组边界。

iflux_target就是这样一个数组。

具有此类数组的程序是不合格的,并且在没有经过符合标准的 Fortran 处理器诊断的情况下不会被接受。如果可移植性是您的目标,那么不要使用此类功能。以前版本的英特尔 Fortran 缺乏诊断可能是一个疏忽。

需要由变量指定大小的模块数组应该是可分配的,在使用模块提供的正确操作之前,在“初始化”过程或类似过程中分配数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

英特尔 Fortran 95 编译器是否允许模块数组具有非常量大小? 的相关文章

随机推荐