Fortran子程序使用子模块重载

时间:2015-05-14 12:36:00

标签: fortran intel-fortran

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

这是我写的一些代码。我想在print_array模块中定义arraytools接口,并且所有特定实现(例如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

1 个答案:

答案 0 :(得分:1)

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

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

Fortran 2008 status wiki page(本帖发布时间2014年11月最后一次修改)列出了Cray Fortran 8.1.1作为支持子模块和Absoft 14,gfortran 4.8,HP,ifort 14.1,NAG 5.3.1,Oracle,Pathscale 4和pgi 14.1不支持子模块。据我所知,从那时起,这些编译器都没有添加对子模块的支持。

正如史蒂夫“Fortran博士”莱昂内尔在下面的评论中所指出的,英特尔Fortran将在今年晚些时候发布的第16版获得子模块支持。