2 arrays fortran initialization parameter-passing
考虑以下程序:
\n\nSubroutine foo(p,v)\n implicit none\n integer, intent(in) :: p\n double precision, dimension(p), intent(in) :: v \n\n !local variables\n integer,parameter :: n=floor(par(p))\n double precision :: z(2*n)\n\n[...]\nEnd Subroutine\nRun Code Online (Sandbox Code Playgroud)\n\n我收到以下错误:
\n\nError: Array \xe2\x80\x98v\xe2\x80\x99 at (1) is a variable, which does not reduce to a constant expression\nRun Code Online (Sandbox Code Playgroud)\n\n这是非常明确的,但我想知道是否有一种方法可以管理这种情况:intent(in)将子例程的参数分配给参数变量?
不,那是不可能的。参数是编译时常量。它的值不能来自任何参数或变量。
也完全不清楚为什么要这样做(请参阅https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。声明数组不需要参数
double precision :: z(2*floor(par(p)))
Run Code Online (Sandbox Code Playgroud)
因为在自动数组中,边界可以是过程参数。