ABAQUS 子例程在配置为程序但不配置为子例程时运行



我正在为 ABAQUS 6.14 编写一个 DISP 子例程,从小步骤开始——尝试打开并读取包含位移数据的文件。到目前为止,我有一个 fortran 脚本,当配置为独立程序时可以完美运行,但当 ABAQUS 将其作为子例程运行时会崩溃。工作版本:

PROGRAM DISP
INTEGER nnodes, IOS
PARAMETER (nnodes = 5652)
REAL A(nnodes,4)
WRITE(*,*) 'hello world'
OPEN(UNIT=11,FILE ="displaced_shape.dat",IOSTAT=IOS)
WRITE(*,*) IOS
DO ix = 1,nnodes
  READ(11,*) A(ix,:)
END DO
WRITE(*,*) A(2,3)
END PROGRAM DISP

该程序的输出为

hello world
          0
 5.4729998E-04

子程序:

SUBROUTINE DISP(U,KSTEP,KINC,TIME,NODE,NOEL,JDOF,COORDS) 
INCLUDE 'ABA_PARAM.INC' 
DIMENSION U(3),TIME(2),COORDS(3) 
INTEGER nnodes, IOS
PARAMETER (nnodes = 5652)
REAL A(nnodes,4)
WRITE(*,*) 'hello world'
OPEN(UNIT=11,FILE ="displaced_shape.dat",IOSTAT=IOS)
WRITE(*,*) IOS
DO ix = 1,nnodes
  READ(11,*) A(ix,:)
END DO
WRITE(*,*) A(2,3)
RETURN
END SUBROUTINE DISP

子例程的输出为

hello world
          0
forrtl: severe (24): end-of-file during read, unit 11

如您所见,除了包装之外,脚本是相同的。我从引用相同数据文件的同一文件夹中运行它们。会不会是福特版本的问题?ABAQUS文档对此非常模糊。

任何想法将不胜感激,感谢您的帮助。

编辑 :很明显,文件"displaced_shape.dat"的格式为

1  0.1  0.2  0.3
2  0.1  0.2  0.3
....
5652  0.1  0.2  0.3

问题很可能是由于将文件单元号分配给应保留供 Abaqus 使用的值。根据文档1,有一个简单的修复:对于 Abaqus/Standard,请使用文件单元号 15-18 或>100。对于显式,请使用以 5 到 9 结尾的 16-18 或>100(例如 105)。

1 Abaqus 分析用户手册>> FORTRAN 单元号>作业执行

介绍

对于可能遇到此问题的其他人:问题是 ABAQUS 需要文件的完整路径,而不仅仅是检查它的工作目录。添加绝对文件路径解决了问题。

相关内容

  • 没有找到相关文章