将公共变量传递给Fortran中的子例程

时间:2014-11-12 08:18:44

标签: fortran local subroutine fortran-common-block

我定制了一个商业代码,它深入使用公共块来定义全局变量。

我想要做的是只将其中一个变量传递给子程序,而不是传递包含,因为我不需要将其他几个变量定义为常见变量。

我发现这样做的唯一方法是先前定义一个新的局部变量,为其赋值全局变量的值,然后将新变量传递给子例程,但我不喜欢这样继续进行..

是否有解决方案告诉Fortran在将变量传递给子程序时将变量转换为local?

这里有一个例子:

主程序:

INTEGER :: A
REAL :: Y(20)
COMMON /VARS/ Y, A
INTEGER :: res, transfer_var
transfer_var = A
call sub_test(transfer_var, res)
...

子程序:

subroutine sub_test(var1, var2)
INTEGER, intent(in) :: var1
INTEGER, intent(out) :: var2
var2 = 1 + var1
return
end

1 个答案:

答案 0 :(得分:0)

这是没有展示您描述的行为的代码的最小工作示例。 A在main中分配,由common传递给sub_one,然后直接用作子例程参数。

 implicit none
 INTEGER :: A,res
 COMMON /VARS/ A
 A=41
 call sub_one()
 end 

 subroutine sub_one()
 INTEGER :: A,res
 COMMON /VARS/ A
 call sub_test(a,res)
 write(*,*)res
 end

 subroutine sub_test(var1, var2)
 INTEGER, intent(in) :: var1
 INTEGER, intent(out) :: var2
 var2 = 1 + var1
 return
 end

此编译没有问题,并返回结果42

您能提供显示问题的示例代码吗?