Fortran 子程序重载子模块

Fortran subroutine overloading with submodules

我正在学习 Fortran 并使用英特尔编译器。

这是我写的一些代码。我想在 arraytools 模块中定义 print_array 接口,所有具体实现(例如 print_array_rp)应该放在一个单独的子模块中。以下工作正常,但如果我将实现拆分为子模块,则会出现大量编译器错误(我想它再也找不到实现了)。

module arraytools
use precision

implicit none

    interface print_array
        module procedure print_array_rp
    end interface

contains

    subroutine print_array_rp(arr, fmt_in)
       ! ... Implementation not important
    end subroutine

end module

如何将 print_array_rp 拆分成一个子模块?我不想改用 #include

当前的 Fortran 编译器没有实现子模块(除非您碰巧使用的是 Cray 编译器)。

只有 Cray Fortran 编译器实现了整个 Fortran 2008 标准(感谢 VladimirF 指出了这一点)。在其他编译器中,支持最差的功能是子模块。

Fortran 2008 status wiki page(最后修改时间为 2014 年 11 月 post)将 Cray Fortran 8.1.1 列为支持子模块和 Absoft 14、gfortran 4.8、HP、ifort 14.1、NAG 5.3 .1、Oracle、Pathscale 4 和 pgi 14.1 不支持子模块。据我所知,none 这些编译器从那时起就添加了对子模块的支持。

正如 Steve "Dr. Fortran" Lionel 在下面的评论中指出的那样,Intel Fortran 将在今年晚些时候发布的第 16 版中获得子模块支持。