|
程序为古早时期的代码,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
请问下可能是什么原因呢?有什么可行的解决方式呢?
|
|