0

我正在使用有限元分析程序的 fortran 子程序。我必须在两个子程序之间共享变量,所以我使用的是 COMMON 块(编辑:模块更好)。问题是只有一些变量被传递给另一个子程序,其他的则没有。

我的代码是这样的: 第一个子程序:

real knom, krot

COMMON /kVAR/ kmom, krot
SAVE /kVAR/

第二个子程序我使用相同的语法。我通过将每个子例程中的 kmom 和 krot 值写入 txt 文件来控制结果:

  write(6,*) 'I am in URDFIL', or 'I am in UFIELD'
1 KINC, kmom, krot

结果是:

I am in URDFIL           1      -16700 -2.3857285E-03
I am in UFIELD           2      -16700 -1155769886

所以krot的价值就丢失了。任何建议都是最受欢迎的。

若昂

解决了:

module shared_var
    implicit none
    real*8 kmom, krot
    save
end module shared_var

在每个子程序中:

use shared_var
4

1 回答 1

3

您是否在第二个例程中包含了 knom、krot 的声明?可能您正在获得隐式输入,并且 krot 正在以整数形式输出。您似乎有一个错字:knom 与 kmom。这就是为什么在这两种情况下 kmom 都作为整数输出的原因——隐式类型为整数,因为 knom 是实数。如果隐式类型生效,这些变量将是整数,因为它们以“k”开头。我强烈建议不要使用隐式类型,除非从遗留代码中删除工作量太大。强烈建议使用“implicit none”,以便在您忘记键入变量或在变量名中打错字时,编译器会警告您。大多数编译器都有相当于“隐式无”的选项。

于 2012-04-08T03:32:54.907 回答