fortran - 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
解决方案
问题很可能是由于将您的文件单元编号分配给一个应该保留供 Abaqus 使用的值。根据文档1,有一个简单的修复:对于 Abaqus/Standard,使用文件单元号 15-18 或 >100。对于显式,使用以 5 到 9 结尾的 16-18 或 >100(例如 105)。
1 Abaqus 分析用户手册 > 简介 > 作业执行 > FORTRAN 单元号
推荐阅读
- python - re.findall(str(list[0]) 正在搜索列表项中的第一个字符,而不是完整的字符串
- javascript - 使用 Python 请求登录网站
- api-platform.com - 如何始终在 api-platform GET 操作中过滤特定字段值的集合?
- python - Python正则表达式在扩展之前匹配单词
- javascript - 基于多个嵌套值对嵌套数组进行排序的最佳方法
- angular - 为什么我的 ngFor 看起来像?我正在使用 TransferState
- javascript - HTML/Javascript 单选按钮测验
- python - 从 python 文件中的列表中删除元素
- python-3.x - 如何使用 xpath 从特定的嵌套类中获取值
- java - android架构:从activity调用dao方法并将结果传递给子activity进行过滤