Fortran Coder

标题: module 传输数据 [打印本页]

作者: 916115735    时间: 2020-11-3 22:15
标题: module 传输数据
我放弃COMMON了
改用MODULE了,现在出现了点问题 传输过来的数据依旧是最后一步计算的数据
求大神帮我看看我程序哪里有问题
[Fortran] 纯文本查看 复制代码
 MODULE COMMON_DATA
      IMPLICIT NONE
      SAVE
      REAL::X(32)
      
      END MODULE

SUBROUTINE 1…………
…………
USE  COMMON_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…………
…………

USE  COMMON_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
没有错,x 是全域变量。不知道你想要什么效果?
[Fortran] 纯文本查看 复制代码
call subroutine1     ! 设定 X
call subroutine2    !读取 X
call subroutine1    !设定新的X
call subroutine2    !读取新的X

作者: fcode    时间: 2020-11-4 08:34
这要看你的 SUBROUTINE 1 和 SUBROUTINE 2 的执行顺序是怎样的。
作者: 916115735    时间: 2020-11-4 11:10
风平老涡 发表于 2020-11-4 02:10
没有错,x 是全域变量。不知道你想要什么效果?
[mw_shl_code=fortran,true]call subroutine1     ! 设定 X ...

           但是传输过来的数据不对  1~4是 subroutine1计算的结果
5~8是subroutine2读取的结果
  1.            1           1   1.00000000000000        313.2038   
  2.            1           2   1.00000000000000        313.2038   
  3.            1           3   1.00000000000000        300.0083   
  4.            1           4   1.00000000000000        300.0083   
  5.            1           5   1.00000000000000        313.2038   
  6.            1           6   1.00000000000000        313.2038   
  7.            1           7   1.00000000000000        300.0083   
  8.            1           8   1.00000000000000        300.0083   
  9.            2           1   1.00000000000000        313.2038   
  10.            2           2   1.00000000000000        313.2038   
  11.            2           3   1.00000000000000        300.0083   
  12.            2           4   1.00000000000000        300.0083   
  13.            2           5   1.00000000000000        313.2038   
  14.            2           6   1.00000000000000        313.2038   
  15.            2           7   1.00000000000000        300.0083   
  16.            2           8   1.00000000000000        300.0083   
  17.            3           1   1.00000000000000        313.2038   
  18.            3           2   1.00000000000000        313.2038   
  19.            3           3   1.00000000000000        300.0083   
  20.            3           4   1.00000000000000        300.0083   
  21.            3           5   1.00000000000000        313.2038   
  22.            3           6   1.00000000000000        313.2038   
  23.            3           7   1.00000000000000        300.0083   
  24.            3           8   1.00000000000000        300.0083   
  25.            4           1   1.00000000000000        313.2038   
  26.            4           2   1.00000000000000        313.2038   
  27.            4           3   1.00000000000000        300.0083   
  28.            4           4   1.00000000000000        300.0083   
  29.            4           5   1.00000000000000        313.2038   
  30.            4           6   1.00000000000000        313.2038   
  31.            4           7   1.00000000000000        300.0083   
  32.            4           8   1.00000000000000        300.0083   
  33.            5           1   1.00000000000000        300.0083   
  34.            5           2   1.00000000000000        300.0083   
  35.            5           3   1.00000000000000        300.0083   
  36.            5           4   1.00000000000000        300.0083   
  37.            5           5   1.00000000000000        300.0083   
  38.            5           6   1.00000000000000        300.0083   
  39.            5           7   1.00000000000000        300.0083   
  40.            5           8   1.00000000000000        300.0083   
  41.            6           1   1.00000000000000        300.0083   
  42.            6           2   1.00000000000000        300.0083   
  43.            6           3   1.00000000000000        300.0083   
  44.            6           4   1.00000000000000        300.0083   
  45.            6           5   1.00000000000000        300.0083   
  46.            6           6   1.00000000000000        300.0083   
  47.            6           7   1.00000000000000        300.0083   
  48.            6           8   1.00000000000000        300.0083   
  49.            7           1   1.00000000000000        300.0083   
  50.            7           2   1.00000000000000        300.0083   
  51.            7           3   1.00000000000000        300.0083   
  52.            7           4   1.00000000000000        300.0083   
  53.            7           5   1.00000000000000        300.0083   
  54.            7           6   1.00000000000000        300.0083   
  55.            7           7   1.00000000000000        300.0083   
  56.            7           8   1.00000000000000        300.0083   
  57.            8           1   1.00000000000000        300.0083   
  58.            8           2   1.00000000000000        300.0083   
  59.            8           3   1.00000000000000        300.0083   
  60.            8           4   1.00000000000000        300.0083   
  61.            8           5   1.00000000000000        300.0083   
  62.            8           6   1.00000000000000        300.0083   
  63.            8           7   1.00000000000000        300.0083   
  64.            8           8   1.00000000000000        300.0083
复制代码

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

应该是先1后2的情况
作者: fcode    时间: 2020-11-4 11:38
如果你在 subroutine 1 ,subroutine 2 中又一次定义了 X,那么会覆盖掉module中的X
尝试取消在subroutine中对X的定义
作者: 风平老涡    时间: 2020-11-5 00:23
916115735 发表于 2020-11-4 11:10
但是传输过来的数据不对  1~4是 subroutine1计算的结果
5~8是subroutine2读取的结果 ...

在subroutine1中把X显示出来,与Subroutine2进行比较。
作者: 916115735    时间: 2020-11-6 11:04
fcode 发表于 2020-11-4 11:38
如果你在 subroutine 1 ,subroutine 2 中又一次定义了 X,那么会覆盖掉module中的X
尝试取消在subroutine ...

确实是 1中重新定义了 谢谢




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2