intel fortran 编译错误“此内在函数在常量表达式中无效”
Posted
技术标签:
【中文标题】intel fortran 编译错误“此内在函数在常量表达式中无效”【英文标题】:intel fortran compile error "This intrinsic function is invalid in constant expressions" 【发布时间】:2013-10-12 23:10:31 【问题描述】:考虑这个简单的程序
program main
implicit none
integer :: array(2,3) = transpose(reshape((/1,2,3,4,5,6/),(/ size(array, 2), size(array, 1) /)))
integer i,j
do i=1,2
write(*,*) array(i,:)
end do
end program main
当我使用 intel fortran 编译器(版本 13.0.0)编译时出现错误:
main.f90(4):错误 #6263:此内在函数在常量表达式中无效。 [转置]
整数 :: array(2,3) = transpose(reshape((/1,2,3,4,5,6/),(/ size(array, 2), size(array, 1) /) ))
似乎转置不能用于常量表达式(?)。那么有没有办法在定义时初始化数组?在我的问题中,数组非常大,因此不能选择手动转置。
【问题讨论】:
【参考方案1】:在初始化表达式(或 F2008 术语中的常量表达式)中使用 TRANSPOSE 是该编译器尚不支持的 Fortran 2003 功能。
使用带有适当 ORDER 参数的 RESHAPE 是 Fortran 95 的一部分,受该编译器支持,并且可以提供您想要的等价物:
integer :: array(2,3) = reshape([1,2,3,4,5,6], shape(array), ORDER=[2,1])
【讨论】:
【参考方案2】:这意味着你不能定义 array
那里。如果你这样做了
integer :: array(2,3)
integer :: i,j
array = transpose....
它会编译。
【讨论】:
有没有办法根据定义做到这一点?该数组作为主程序的全局变量,似乎不允许我在模块中这样做。 如果它没有改变,你可以将它定义为parameter
& 它应该可以编译。以上是关于intel fortran 编译错误“此内在函数在常量表达式中无效”的主要内容,如果未能解决你的问题,请参考以下文章
Macos系统下用intel fortran编译安装wgrib2
使用 Notepad++ 和 Intel Fortran 编译器编译文件
intel visual fortran compiler干嘛用的
Linux 上 fortran 代码的 Intel Vtune 奇怪行为