2

让我们这样说:

if (proc.eq.0) 双精度 :: B(n)

以便它仅在 proc 0 上声明数组 B。我知道这是不允许的,这只是举例。

4

1 回答 1

6

不,通常不可能将变量声明放入if子句中。但是,如果您的主进程和从属进程正在做完全不同的事情,因此需要完全不同的变量声明,您可以使用不同的例程来完成它们的工作:

if (proc == 0) then
    call proc_master()
else
    call proc_slave()
end if

该例程proc_master()可以声明主进程所需的所有变量以及主进程应执行的所有指令,而proc_slave()对从属进程执行相同的操作。

如果从属和主控的代码差异很小,您可以使用可分配变量并仅在适当的进程中分配:

integer, allocatable :: bigarray(:,:)

:
if (proc == 0) then
    allocate(bigarray(nn, nn))
end if

如果主从代码的差异甚至更小(例如,在您的示例中只有几个标量变量),那么就离开它。您绝对不应该担心由于多余的变量而丢失的几个字节。

于 2013-10-31T07:41:10.680 回答