Fortran Coder

查看: 215|回复: 7

[Module] module 传输数据

[复制链接]

18

帖子

5

主题

0

精华

入门

F 币
91 元
贡献
57 点
发表于 2020-11-3 22:15:52 | 显示全部楼层 |阅读模式
我放弃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
回复

使用道具 举报

74

帖子

2

主题

0

精华

专家

F 币
578 元
贡献
271 点

规矩勋章

发表于 2020-11-4 02:10:29 | 显示全部楼层
没有错,x 是全域变量。不知道你想要什么效果?
[Fortran] 纯文本查看 复制代码
call subroutine1     ! 设定 X
call subroutine2    !读取 X
call subroutine1    !设定新的X
call subroutine2    !读取新的X

1560

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1565 元
贡献
1019 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2020-11-4 08:34:48 | 显示全部楼层
这要看你的 SUBROUTINE 1 和 SUBROUTINE 2 的执行顺序是怎样的。

18

帖子

5

主题

0

精华

入门

F 币
91 元
贡献
57 点
 楼主| 发表于 2020-11-4 11:10:17 | 显示全部楼层
风平老涡 发表于 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
复制代码

18

帖子

5

主题

0

精华

入门

F 币
91 元
贡献
57 点
 楼主| 发表于 2020-11-4 11:11:06 | 显示全部楼层
fcode 发表于 2020-11-4 08:34
这要看你的 SUBROUTINE 1 和 SUBROUTINE 2 的执行顺序是怎样的。

应该是先1后2的情况

1560

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1565 元
贡献
1019 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2020-11-4 11:38:49 | 显示全部楼层
如果你在 subroutine 1 ,subroutine 2 中又一次定义了 X,那么会覆盖掉module中的X
尝试取消在subroutine中对X的定义

74

帖子

2

主题

0

精华

专家

F 币
578 元
贡献
271 点

规矩勋章

发表于 2020-11-5 00:23:56 | 显示全部楼层
916115735 发表于 2020-11-4 11:10
但是传输过来的数据不对  1~4是 subroutine1计算的结果
5~8是subroutine2读取的结果 ...

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

18

帖子

5

主题

0

精华

入门

F 币
91 元
贡献
57 点
 楼主| 发表于 2020-11-6 11:04:09 | 显示全部楼层
fcode 发表于 2020-11-4 11:38
如果你在 subroutine 1 ,subroutine 2 中又一次定义了 X,那么会覆盖掉module中的X
尝试取消在subroutine ...

确实是 1中重新定义了 谢谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2020-12-5 10:30

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表