Fortran Coder

查看: 555|回复: 3

[求助] COMMON中声明的数组在未修改的情况下在子程序中改变

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
27 元
贡献
14 点
发表于 2022-10-22 18:34:39 | 显示全部楼层 |阅读模式
程序为古早时期的代码,f77
编译环境为Ubuntu22.04+oneAPI ifort
1.变量声明
通过include头文件在主程序和所有子程序中声明,
头文件中的部分声明如下:
[Fortran] 纯文本查看 复制代码
	
PARAMETER(NF=1,NLG=50)
REAL :: XLGM,YLGM,XLGM1,YLGM1,XLGM0,YLGM0,XLGM00,YLGM00
	  COMMON/LAGRM0/XLGM(NF,NLG),YLGM(NF,NLG)

可以将XLGM(NF,NLG),YLGM(NF,NLG)看作结点的坐标
2.问题
2.1.调用逻辑
在主程序中先调用有限元的子程序,再在有限元的子程序中先后调用处理质量矩阵和刚度矩阵的子程序
其中调用质量矩阵子程序前后,XLGM(NF,NLG),YLGM(NF,NLG)未改变,但在调用相同处理方式的刚度矩阵子程序后,XLGM(NF,NLG),YLGM(NF,NLG)改变
改变的位置定位到组装刚度矩阵子程序中对应的部分代码,如下
[Fortran] 纯文本查看 复制代码
K_TEMP(:,1:40)=KS(:,3:42)
        DO IL=1,NLG1(IIF)
          WRITE(*,*) 'STIFF1:IL,XLGM(IIF,IL),YLGM(IIF,IL)'
          WRITE(*,*) IL,XLGM(IIF,IL),YLGM(IIF,IL)
        ENDDO 
        K_TEMP(:,41:80)=KS(:,45:84)
        DO IL=1,NLG1(IIF)
          WRITE(*,*) 'STIFF2:IL,XLGM(IIF,IL),YLGM(IIF,IL)'
          WRITE(*,*) IL,XLGM(IIF,IL),YLGM(IIF,IL)
        ENDDO 
        K_TEMP(:,81:120)=KS(:,87:126)
        DO IL=1,NLG1(IIF)
          WRITE(*,*) 'STIFF3:IL,XLGM(IIF,IL),YLGM(IIF,IL)'
          WRITE(*,*) IL,XLGM(IIF,IL),YLGM(IIF,IL)
        ENDDO 
        K_REDUCT(1:40,:)=K_TEMP(3:42,:)
        DO IL=1,NLG1(IIF)
          WRITE(*,*) 'STIFF4:IL,XLGM(IIF,IL),YLGM(IIF,IL)'
          WRITE(*,*) IL,XLGM(IIF,IL),YLGM(IIF,IL)
        ENDDO 

第一次输出

第一次输出


第二次输出

第二次输出


第三次输出

第三次输出

请问下可能是什么原因呢?有什么可行的解决方式呢?

202

帖子

2

主题

0

精华

宗师

F 币
1504 元
贡献
781 点

规矩勋章

发表于 2022-10-23 10:51:06 | 显示全部楼层
可能是K_TEMP和COMMON语句中的变量用equivalence语句共享了存储空间

2

帖子

1

主题

0

精华

新人

F 币
27 元
贡献
14 点
 楼主| 发表于 2022-10-23 14:52:13 | 显示全部楼层
necrohan 发表于 2022-10-23 10:51
可能是K_TEMP和COMMON语句中的变量用equivalence语句共享了存储空间

多谢回答,并未使用equivalence语句,目前正在排查是否为越界或赋初始值问题

207

帖子

0

主题

0

精华

版主

World Analyser

F 币
523 元
贡献
412 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
发表于 2022-10-23 20:43:34 | 显示全部楼层
这就是为什么推荐用module替代common的原因
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2022-12-9 02:52

Powered by Tencent X3.4

© 2013-2022 Tencent

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