Matlab、Python与ABAQUS的数据交互实战

Matlab可以方便地实现各种优化算法,ABAQUS可以方便地进行有限元建模及求解,有时候两者结合可以更方便做一些自己想做的事,例如通过遗传算法,神经网络等算法进行参数反演,确定本构模型的参数。ABAQUS/CAE的内核语言是Python,通过Python可以方便地读取ABAQUS的结果数据库odb的数据。这里介绍一些关于如何进行三者的交互,编写交互的方法与经验。关于ABAQUS中odb的数据结构这里就不多说,参考相关书籍。在这里插入图片描述通过matlab提交inp文件给ABAQUS计算

可以在matlab里面直接通过系统调用向ABAQUS提交计算文件及相关计算参数,包括用户子程序,cpu数量等。下面是一个函数接口。

接口函数例子:在这里插入图片描述runabaqus(Path,UserFile,InpFile,cpus):

   这是一个Matlab接口函数,同时也是实现程序。功能是根据指定参数向ABAQUS提交计算文件,并监测ABAQUS计算过程。参数列表(Path,userFile,InpFile,cpus)含义分别为:

   1)Path:inp计算文件所在的绝对路径。

   2)UserFile:用户Fortran子程序,如果有子程序就给子程序的文件名,没有的话就不要这个参数,把runabaqus的一行代码inputFile=[‘abaqus job=’,InpFile,’ user=’,userFile,’ cpus=’,cpus],改为inputFile=[‘abaqus job=’,InpFile,’ cpus=’,cpus]。

   3)InpFile:inp计算文件的文件名。

   4)cpus:指定ABAQUS求解器使用的cup数量。

其实只需一条命令,system(abaqus job=Inpfile )就可以完成提交计算文件,其他都是辅助,使接口函数适用性更好,把实现方法封装起来。有了接口函数,在matlab定义好相关参数,调用接口就行。

应用例子:在这里插入图片描述

   —matlab利用python脚本读取odb数据

思路是:matlab把读取数据的要求写入个txt文件(这里是req.txt),调用python脚本,python脚本读取odb的结果数据,并写入另一个txt文件(这里是RF3.txt),matlab再从txt文件读取数据。首先编写python接口函数,实现从odb提取特定的结果数据。

例子:读取一个参考点的反力RF3
在这里插入图片描述在这里插入图片描述这是一个python程序,是get_history_output接口的功能实现程序,被get_history_output接口函数调用。其功能是读取req.txt里的参数,按照设定的参数读取odb数据库,并把结果写入”结果关键字.txt”文件,例如读取的是反力RF3时,其结果会被写入”RF3.txt”文件,以供其他程序使用。

有了python脚本就可以在matlab里调用它来读取ABAQUS的结果数据。当然在matlab里要指定odb文件名,部件名,节点名称等信息,为了把实现封装起来,也把调用python脚本的matlab程序写成一个函数get_history_output。

调用python脚本的matlab函数:
在这里插入图片描述get_history_output(Path,OdbFile,step,req)说明:

   这是一个matlab接口函数,实现程序是python程序odbHistoryOutput.py。get_history_output的功能是将用户指定的参数写入req.txt文件,调用odbHistoryOutput.py程序读取ABAQUS结果数据库odb的结果数据。(Path,OdbFile,step,req)参数列表含义分别为:

   1)Path:odb文件所在的绝对路径。

   2)OdbFile:odb数据库的文件名。

   3)step:指定读取的分析步。

   4)req:读取数据的要求,包括部件名、节点名、结果关键字,例如,req定义如下:

   req=’PLATEN-1, Node PLATEN-1.5322,RF3’;

   则指明了程序去读取部件名为PLATEN-1,节点名Node PLATEN-1.5322的反力RF3。注意,与历史变量相关的节点名是系统命名的,但是这些节点名有一定的规律,总是这样的形式“Node+空格+instance name.节点号”。

这里的参数(Path,OdbFile,step,req)是读取odb结果需要的,先把它们写入到req.txt文件,供上面的python脚本odbHistoyOutput.py读取。其中showlogfile函数显示python运行时输出的信息,这些信息保存在pylog.txt文件中。该函数的实现在另一篇博客Matlab目录操作及fgetl函数已经介绍。

那么在matlab里就可以指定odb相关信息,调用上面的函数来get_history_output获得odb数据。

应用例子:在这里插入图片描述特别说明

   这里与历史变量输出的节点或节点集的名称与你在step里设置历史结果输出指定的节点名是不一样的,与历史变量相关的节点名是系统命名的,这里只有用系统命名的节点名作为参数,才能正确读取所要的历史结果输出。但是这些节点名有一定的规律,总是这样的形式“Node+空格+instance name.节点号”,例如我的模型里有一个部件叫PLATEN-1,定义了一个参考点,并把它设置为一个set,在step里设置了输出它的反力RF3,并且我知道了它的的节点号是5322,那么我设置历史结果相关的节点名称是就是“Node PLATEN-1.5322”。

   运行程序后,首先matlab把参数写入req.文件。req.txt记录了指定的相关参数,以逗号隔开,每个参数,如下:在这里插入图片描述然后matlab调用python脚本odbHistoyOutput.py,读取odb数据。odb首先读取req.txt的参数,然后再根据参数去读取odb数据,把结果写入ReqData(即RF3.txt),结果包含时间和反力RF3,如下(部分省略):
在这里插入图片描述这里matlab与python脚本之间可能有比较的参数和数据需要传递,因此,我这里先把要传递的参数和数据写入特定的txt文件,然后再由另一程序去读取。其次是这里尽量把每个简单的功能写成函数,这样有助于更容易调试程序,不断添加新功能和集成。这就是增量式开发的思想。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空