如何使用 Abaqus、Python 和 Fortran(混合语言编程)运行 自定义计算程序?

How can I run a custom calculating procedure using Abaqus, Python and Fortran(mix-language programing)?

提前致谢!

我是 python 和混合语言编程方面的新手。

我的开发环境是Abaqus6.13(with python 2.6.2)+MSVS2012+inter Fortran 2013SP1(我想用IMSL),在Windows 7。我的最终目的是在 Abaqus 中开发一个 GUI 插件 可以 运行 仅取决于 新安装的 Abaqus.

我要做的事情排序如下:

  1. Abaqus 中进行模态分析;
  2. GUI 插件modalResult.odb 中得到上述结果并将它们传输到 自定义计算模块中写在Fortran;
  3. GUI插件将计算结果转入另一个Abaqus odb;

最重要的是,我想用python作为AbaqusFortran的粘合剂,我不知道如何传递变量(也许它们只是整数或浮点数one/two维度数组)。

那么,我该如何解决这个问题?或者谁有类似经验可以给我一些建议?非常感谢。


我的失败经历:

  1. f2py:因为我在Win7上工作,我发现如果选择f2py,Abaqus python发行版中的文件必须修改,这与开发 新安装的 Abaqus 的目的背道而驰。
  2. ctypes+Dynamic linking library:我使用 Fortran 检查以下代码生成 test.dll 并从 python,它们 运行 在 python3.6 中很好,但是当我检查使用 Abaqus(python2.6) 时,它出错了 OSError: exception: access violation reading 0xxxxxx .

Fortran test.dll代代码:

module F90Module
use,intrinsic::iso_c_binding
implicit none
contains
    subroutine fun_in_fortran(arr,nucle_num,n1,n2)
    !dec$ attributes dllexport,decorate,alias:"fun_in_fortran" :: fun_in_python
    integer(kind=c_int),intent(in),value::n1,n2,nucle_num
    integer(kind=c_int),intent(out),dimension(n1,n2)::arr   

        xxxxxxxxxxxxxx

    end subroutine fun_in_fortran
end module F90Module

Python中的回调(另存为t.py):

#! /usr/bin/env python
#coding=utf-8
import numpy as np
from numpy.ctypeslib import load_library,ndpointer
from ctypes import *
# shape of 2d array
n1,n2 = 10,10
n3=3
# create an empty 2d array
data = np.zeros(shape=(n1,n2),dtype='int64',order='f')
flib = load_library("test.dll","./")
flib.argtypes = [ndpointer(dtype='int64',ndim=2),c_int,c_int,c_int]
flib.fun_in_python(data.ctypes.data,n3,n1,n2)
print "*"*80
print data

PS: 又查了一下问题,一头雾水。。好像是在Abaqus CAE的运行时间。但是我真的不知道如何解决它。

在window终端中,当我使用abaqus python t.py时,一切顺利。但是我想在Abaqus CAE中做这个计算过程,所以我测试了命令abaqus cae noGui=t.py,出现错误,如下:

Abaqus License Manager checked out the following license(s):
"cae" release 6.13 from zhouhongwei
<1023 out of 1024 licenses remain available>.
WindowsError: exception: access violation reading 0X000007FF080BA0A0
File "t.py" ,line 13, in <module>
    flib.rand_nucle<data.ctypes.data,n3,nl,n2>
Abaqus Error: cae exited with an error

通过将 Abaqus 从 6.13 更新到 6.14,代码有效!