将复杂数组的实部传递给fortran中的子例程



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

Z = complex array;
X = real(Z)
call foo(X)

执行以下

Z = complex array
call foo(real(Z))

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

当然,它有效:

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

最新更新