2013-02-24 59 views
2

是否可以将复数组的实数部分传递给Fortran中的子例程而不将实数部分存储在另一个数组中并传递该数组?例如而不是将复数组的实数部分传递给fortran中的子例程

Z = complex array; 

X = real(Z) 

call foo(X) 

执行以下操作

Z = complex array 

call foo(real(Z)) 

这给了我一个编译器错误!我正在使用英特尔编译器ifort。

+1

按巴林特Aradi的的回答,是的,这是允许的。编译器错误可能来自其他地方。请使用编译器错误,版本和最小(实际代码)示例更新您的问题。 – milancurcic 2013-02-24 16:37:57

+0

它也可能取决于你的程序foo,也许你使用了一些需要显式接口的功能,并且不提供一个或者可能存在其他类型的编程错误。没有更多的代码和错误消息,这个问题是无法回答的。 – 2013-02-24 18:58:59

回答

4

当然,它的工作原理:

module testmod 
    implicit none 

    integer, parameter :: dp = kind(1.0d0) 

contains 

    subroutine realsub(array) 
    real(dp), intent(in) :: array(:) 
    print *, array 
    end subroutine realsub 

end module testmod 


program testprog 
    use testmod 
    implicit none 

    complex(dp) :: array(3) 

    array(:) = [ (1.0_dp, 1.0_dp), (3.0_dp, 2.0_dp), (-1.0_dp, 3.0_dp) ] 
    call realsub(real(array)) 

end program testprog