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

时间:2018-05-07 14:36:10

标签: python fortran abaqus

提前致谢!

我是python和混合语言编程的绿手。

我的开发环境是Abaqus6.13(with python 2.6.2) + MSVS2012 + inter Fortran 2013SP1(我想使用IMSL),Windows 7。我的最终目的是在Abaqus中开发一个 GUI插件,它只能依赖于新安装的 Abaqus来运行。

我想要做的是如下排序:

  1. Abaqus;
  2. 中进行模态分析
  3. GUI插件 modalResult.odb 获取上述结果,并将其转移到用{{1}编写的自定义计算模块中};
  4. GUI插件将计算结果传输到另一个 Abaqus odb ;
  5. 最重要的是,我想使用Fortran作为pythonAbaqus的粘合剂,我不知道如何传输变量(可能只是 int或float中的数字一维/二维数组)。

    那么,我该如何解决这个问题呢?或者是否有人有类似的经验给我一些建议?非常感谢。

    我的失败经历:

    1. Fortran:因为我处理f2py,我发现如果选择Win7,必须修改Abaqus的python发行版中的文件,这违背了工作目的在新安装的 f2py上。
    2. Abaqus + ctypes:我使用Dynamic linking library生成 test.dll 检查以下代码,并从Fortran调用它们,然后运行它们好在python,但当我检查使用python3.6时,错误Abaqus(python2.6)会出错。
    3. test.dll 生成的

      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

1 个答案:

答案 0 :(得分:0)

通过将Abaqus从6.13更新到6.14,代码可以正常工作!