在Fortran中使用常见块的问题

时间:2012-04-08 02:54:15

标签: fortran fortran-common-block

我正在使用有限元分析程序的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

1 个答案:

答案 0 :(得分:3)

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