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

时间:2019-01-17 14:06:25

标签: fortran subroutine 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

如您所见,除了包装外,这些脚本是相同的。我从引用相同数据文件的同一文件夹中运行它们。可能是fortran版本的问题吗? 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

2 个答案:

答案 0 :(得分:1)

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

1 Abaqus Analysis用户手册>简介>作业执行> FORTRAN单元号

答案 1 :(得分:0)

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