提前致谢!
我是python和混合语言编程的绿手。
我的开发环境是Abaqus6.13(with python 2.6.2)
+ MSVS2012
+ inter Fortran 2013SP1
(我想使用IMSL
),Windows 7
。我的最终目的是在Abaqus
中开发一个 GUI插件,它只能依赖于新安装的 Abaqus
来运行。
我想要做的是如下排序:
Abaqus
; 最重要的是,我想使用Fortran
作为python
和Abaqus
的粘合剂,我不知道如何传输变量(可能只是 int或float中的数字和一维/二维数组)。
那么,我该如何解决这个问题呢?或者是否有人有类似的经验给我一些建议?非常感谢。
我的失败经历:
Fortran
:因为我处理f2py
,我发现如果选择Win7
,必须修改Abaqus的python发行版中的文件,这违背了工作目的在新安装的 f2py
上。 Abaqus
+ ctypes
:我使用Dynamic linking library
生成 test.dll 检查以下代码,并从Fortran
调用它们,然后运行它们好在python
,但当我检查使用python3.6
时,错误Abaqus(python2.6)
会出错。 OSError: exception: access violation reading 0xxxxxx
代码:
Fortran
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
中的回调(另存为 t.py ):
Python
PS:我再次检查了问题,我感到困惑。似乎问题出现在#! /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
的运行时间上。但是我真的不知道如何修复它。
在窗口终端中,当我使用Abaqus CAE
时,它进展顺利。但我想在abaqus python t.py
中执行此计算过程,因此我测试了命令Abaqus CAE
,并发生错误,如下所示:
abaqus cae noGui=t.py
答案 0 :(得分:0)
通过将Abaqus从6.13更新到6.14,代码可以正常工作!