如何在ABAQUS UMAT子例程中调用Python

时间:2019-12-03 09:45:35

标签: python fortran abaqus

最近我正在ABAQUS中进行多尺度计算,因此我想在UMAT中调用微尺度ABAQUS Python代码。

我搜索了许多代码,库(f2py,forpy)和文档,但是找不到合适的解决方案将上述ABAQUS Python代码嵌入UMAT。

通常,UMAT用Fortran编写,因此问题可能是“如何在Fortran中调用Python”,但是ABAQUS提供了经过修改的python,因此该表达式应修改为“如何在UMAT中调用ABAQUS Python”。

我已经尝试过系统调用作为测试示例。

SUBROUTINE UMAT(...)

sym_i = system('abaqus cae nogui=F:/abaqus_python/simple_test/with_py/test.py')

END SUBROUTINE

下面是test.py

import numpy as np
a = np.arange(11,20)
print(a)

这是ABAQUS日志文件输出

End Analysis Input File Processor
Begin Abaqus/Standard Analysis
2019/11/27 20:24:51
Run standard.exe

 ***WARNING: Interactive messaging has been requested for this analysis run, 
             but initialization of the messaging system has failed.  Therefore 
             no messages will be sent to Abaqus/CAE for this phase of the 
             analysis.
Intel(R) Parallel Studio XE 2013 SP1
Copyright (C) 1985-2013 Intel Corporation. All rights reserved.
Intel(R) Composer XE 2013 SP1 Update 1 (package 139)

[11 12 13 14 15 16 17 18 19]
Intel(R) Parallel Studio XE 2013 SP1
Copyright (C) 1985-2013 Intel Corporation. All rights reserved.
Intel(R) Composer XE 2013 SP1 Update 1 (package 139)

Python确实起作用了,但是,结果显然是错误的,ABAQUS继续计算而没有等待Python脚本完成,主要问题是我想在Python和Fortran之间实时传输数据。但是,当我在UMAT中调用Python时,Fortran代码仍然无法控制Python脚本而崩溃。

换句话说,在执行系统调用时,Python控制台被触发并运行,但是, Fortran不会等待Python并继续它们是并发的,而不是随后的

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

暂停python脚本并确认Abaqus正在等待系统调用返回

import time
time.sleep(60)