回 帖 发 新 帖 刷新版面

主题:有关common

SUBROUTINE FPIGRA (IL,X)
      REAL LOAD,NU,ACCUR(3),K5
      COMMON/ASDT/LAYER,NLAYS,M,R,Z,NU(10),ACCUR,LOAD,HOSTRS,NZEROS,H(9)
     1,K5(10),E(10),AL(9),THICK(9),RADIUS(10)
      COMMON/IGRAN/T0,V0,S0,U0,T1,V1,S1,U1,TQ1,SQ1,FPIGR,EXP1,EXP2
      COMMON/TYPE1/KD,KC,ES(10),E2(10),ES2(10)
    这是一个SUBROUTINE的前部分,有些问题不是很明白。
    1.这里边有real load,nu....,但在程序中好像用的是共同区域的COMMON/ASDT/LOAD,那它到底是定义什么?
    2.既然有了real load,nu....,那COMMON/ASDT/LOAD不是冲突了?
    3.怎么知道公共区域中的变量,如m,r是real,还是integer?
    新手入门,等待高手解答

回复列表 (共2个回复)

沙发

1&2. COMMON 是占身位的. 例如你的主程序公共变量LOAD, 你可以在子程序用同类型的DAOL, 只要它身位是在LOAD的位置他就是那个公共变量.
所以子程序COMMON/ASDT/.... 这些是子程序的变量, 他占了那个位置就自动是主程序的公共变量了. 也就不存在所谓冲突(回答了2). 详细可以看看彭书关于common的解说.
3. 应该是用了默认类型定义, 所以m, r这些变量自动赋予类型了. 你可以加上implicit none到子程序看看.

建议: 自己写的程序就不要用common了, 这是上个世纪90年代及以前的东西了.

板凳


多谢yeg001的回答。这个东西是有点恼火,转的半天也还是云里雾里。

老板给的一个程序,里边传数据都是这种方式实现的,没法啊,只能慢慢磨了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册