916115735 发表于 2020-11-3 22:15:52

module 传输数据

我放弃COMMON了
改用MODULE了,现在出现了点问题 传输过来的数据依旧是最后一步计算的数据
求大神帮我看看我程序哪里有问题
MODULE COMMON_DATA
      IMPLICIT NONE
      SAVE
      REAL::X(32)
      
      END MODULE

SUBROUTINE 1…………
…………
USECOMMON_DATA

DO i=1,4,1
          IF(i==NOEL)THEN
            DO j=1,8,1
                  IF(j==NPT)THEN   
            X((i-1)*8+j)=STATEV(2)
                  END IF
            END DO
          END IF
      END DO

END SUBROUTINE1

SUBROUTINE 2…………
…………

USECOMMON_DATA

DO i=5,8,1
          IF(i==NOEL)THEN
            DO j=1,8,1
                  IF(j==NPT)THEN   
            L=X((i-5)*8+j)
                  END IF
            END DO
          END IF
      END DO

END SUBROUTINE2

风平老涡 发表于 2020-11-4 02:10:29

没有错,x 是全域变量。不知道你想要什么效果?
call subroutine1   ! 设定 X
call subroutine2    !读取 X
call subroutine1    !设定新的X
call subroutine2    !读取新的X

fcode 发表于 2020-11-4 08:34:48

这要看你的 SUBROUTINE 1 和 SUBROUTINE 2 的执行顺序是怎样的。

916115735 发表于 2020-11-4 11:10:17

风平老涡 发表于 2020-11-4 02:10
没有错,x 是全域变量。不知道你想要什么效果?
call subroutine1   ! 设定 X ...

         但是传输过来的数据不对1~4是 subroutine1计算的结果
5~8是subroutine2读取的结果         1         1   1.00000000000000      313.2038   
         1         2   1.00000000000000      313.2038   
         1         3   1.00000000000000      300.0083   
         1         4   1.00000000000000      300.0083   
         1         5   1.00000000000000      313.2038   
         1         6   1.00000000000000      313.2038   
         1         7   1.00000000000000      300.0083   
         1         8   1.00000000000000      300.0083   
         2         1   1.00000000000000      313.2038   
         2         2   1.00000000000000      313.2038   
         2         3   1.00000000000000      300.0083   
         2         4   1.00000000000000      300.0083   
         2         5   1.00000000000000      313.2038   
         2         6   1.00000000000000      313.2038   
         2         7   1.00000000000000      300.0083   
         2         8   1.00000000000000      300.0083   
         3         1   1.00000000000000      313.2038   
         3         2   1.00000000000000      313.2038   
         3         3   1.00000000000000      300.0083   
         3         4   1.00000000000000      300.0083   
         3         5   1.00000000000000      313.2038   
         3         6   1.00000000000000      313.2038   
         3         7   1.00000000000000      300.0083   
         3         8   1.00000000000000      300.0083   
         4         1   1.00000000000000      313.2038   
         4         2   1.00000000000000      313.2038   
         4         3   1.00000000000000      300.0083   
         4         4   1.00000000000000      300.0083   
         4         5   1.00000000000000      313.2038   
         4         6   1.00000000000000      313.2038   
         4         7   1.00000000000000      300.0083   
         4         8   1.00000000000000      300.0083   
         5         1   1.00000000000000      300.0083   
         5         2   1.00000000000000      300.0083   
         5         3   1.00000000000000      300.0083   
         5         4   1.00000000000000      300.0083   
         5         5   1.00000000000000      300.0083   
         5         6   1.00000000000000      300.0083   
         5         7   1.00000000000000      300.0083   
         5         8   1.00000000000000      300.0083   
         6         1   1.00000000000000      300.0083   
         6         2   1.00000000000000      300.0083   
         6         3   1.00000000000000      300.0083   
         6         4   1.00000000000000      300.0083   
         6         5   1.00000000000000      300.0083   
         6         6   1.00000000000000      300.0083   
         6         7   1.00000000000000      300.0083   
         6         8   1.00000000000000      300.0083   
         7         1   1.00000000000000      300.0083   
         7         2   1.00000000000000      300.0083   
         7         3   1.00000000000000      300.0083   
         7         4   1.00000000000000      300.0083   
         7         5   1.00000000000000      300.0083   
         7         6   1.00000000000000      300.0083   
         7         7   1.00000000000000      300.0083   
         7         8   1.00000000000000      300.0083   
         8         1   1.00000000000000      300.0083   
         8         2   1.00000000000000      300.0083   
         8         3   1.00000000000000      300.0083   
         8         4   1.00000000000000      300.0083   
         8         5   1.00000000000000      300.0083   
         8         6   1.00000000000000      300.0083   
         8         7   1.00000000000000      300.0083   
         8         8   1.00000000000000      300.0083

916115735 发表于 2020-11-4 11:11:06

fcode 发表于 2020-11-4 08:34
这要看你的 SUBROUTINE 1 和 SUBROUTINE 2 的执行顺序是怎样的。

应该是先1后2的情况

fcode 发表于 2020-11-4 11:38:49

如果你在 subroutine 1 ,subroutine 2 中又一次定义了 X,那么会覆盖掉module中的X
尝试取消在subroutine中对X的定义

风平老涡 发表于 2020-11-5 00:23:56

916115735 发表于 2020-11-4 11:10
但是传输过来的数据不对1~4是 subroutine1计算的结果
5~8是subroutine2读取的结果 ...

在subroutine1中把X显示出来,与Subroutine2进行比较。

916115735 发表于 2020-11-6 11:04:09

fcode 发表于 2020-11-4 11:38
如果你在 subroutine 1 ,subroutine 2 中又一次定义了 X,那么会覆盖掉module中的X
尝试取消在subroutine ...

确实是 1中重新定义了 谢谢
页: [1]
查看完整版本: module 传输数据