【问题标题】:Issue using common blocks in Fortran在 Fortran 中使用公共块的问题
【发布时间】:2012-04-21 01:08:25
【问题描述】:

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

【问题讨论】:

  • 为什么不用module 而不是common 这样你只需要一个声明。
  • 好的,谢谢你的建议!

标签: fortran fortran-common-block


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多