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 版中获得子模块支持。
我正在学习 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 版中获得子模块支持。