fortran子例程:任意类型的数组

时间:2014-12-22 18:44:24

标签: arrays fortran

我正在尝试编写一个子程序来反转数组的行。以下工作,但显式声明其输入arr的类型。因此,我需要一个单独的子程序来为类型为real的数组做同样的事情。当然有一种方法可以让它接受一个任意类型的数组 - 有人可以帮我解释语法吗?谢谢!

SUBROUTINE flipud(arr)

    integer, dimension(:,:), intent(inout) :: arr
    integer, dimension(:,:), allocatable :: tmp
    integer i, j, nrow, ncol, ierr

    nrow = size(arr, 1)
    ncol = size(arr, 2)

    allocate(tmp(nrow, ncol), STAT=ierr)

    tmp(:,:) = arr(nrow:1:-1, :)
    arr = tmp
    deallocate(tmp)

END SUBROUTINE flipud

1 个答案:

答案 0 :(得分:1)

Fortran没有相应的C ++模板。您可以使用模块过程创建一个接口,如下面所示。两个子例程共有的代码可以放在使用INCLUDE语句合并的文件中。

module foo
interface fliupud
   module procedure flipud_i,flipud_r
end interface flipud

contains
subroutine flipud_i(arr)
integer, dimension(:,:), intent(inout) :: arr
! body
end subroutine flipud_i
!
subroutine flipud_r(arr)
real, dimension(:,:), intent(inout) :: arr
! body
end subroutine flipud_r
end module foo