带有子模块的Fortran子程序重载

带有子模块的Fortran子程序重载,fortran,intel-fortran,Fortran,Intel Fortran,我正在学习Fortran并使用英特尔编译器 这是我写的一些代码。我想在arraytools模块中定义print\u array接口,所有的具体实现(例如print\u array\u rp)都应该进入一个单独的子模块。下面的方法是可行的,但是如果我将实现拆分成一个子模块,就会出现大量的编译器错误(我想它再也找不到实现了) 如何将print\u array\u rp拆分为子模块?我不想改用#include 当前Fortran编译器中未实现子模块(除非您碰巧使用Cray编译器) 只有Cray For

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

这是我写的一些代码。我想在
arraytools
模块中定义
print\u array
接口,所有的具体实现(例如
print\u array\u rp
)都应该进入一个单独的子模块。下面的方法是可行的,但是如果我将实现拆分成一个子模块,就会出现大量的编译器错误(我想它再也找不到实现了)


如何将
print\u array\u rp
拆分为子模块?我不想改用
#include

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

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

(本文发表时最后一次修改于2014年11月)将Cray Fortran 8.1.1列为支持子模块,将Absolft 14、gfortran 4.8、HP、ifort 14.1、NAG 5.3.1、Oracle、Pathscale 4和pgi 14.1列为不支持子模块。据我所知,从那时起,这些编译器都没有增加对子模块的支持


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

@HighPerformanceMark首先,我们不能将子模块和模块放在同一个文件中吗?这样做,我会得到一大堆错误,但我想最重要的错误是
error#7950:moduleprocedure语句中的过程名必须是可访问模块过程的名称。[PRINT\u ARRAY\u RP]
我也不能回答这个问题,但据我所知,英特尔编译器不支持子模块。如果你不是严格意义上的“子模块”,你可能需要解释你的意思(用代码)。@francescalus你是对的,我刚刚发现它不是。AFAIK Cray声称支持整个Fortran 2008。那张桌子上唯一的N是奇怪的。Cray支持DO CONCURRENT。感谢您提供该表的链接。作为Fortran的新手,看到这么多red.ifort将在今年晚些时候的16.0版本中添加子模块是令人惊讶的。我们有一个开放测试版,你可以试试看,至于“Fortran Wiki”,这个图表是一个一年更新三次的版本,并发表在Fortran论坛,一个ACM出版物上。你可以在那里读到最新一期。@SteveLionel谢谢你的提醒。
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