许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  abaqus与MATLAB联合仿真方法

abaqus与MATLAB联合仿真方法

阅读数 5
点赞 0
article_banner

abaqus与matlab联合仿真

取材于2020.11的资料,文档整理于2021.2.7


引:启动abaqus license

如果运行abaqus报错如下图:

在这里插入图片描述
在这里插入图片描述

则点击abaqus licensing,选择第四个【Start/Stop/Reread】,点击第一个按钮【Start Server】,下方显示框中显示【Server Start Successful.】,再次打开abaqus ACE即可,如果还是报错就再开一次。

abaqus licensing界面:

在这里插入图片描述

正常打开的abaqus提示框:

在这里插入图片描述

联合编程思路

注:本文所用的接口函数runabaqus.m、get_history_output.m、odbHistoyOutput.py与这篇博客相同。

一、abaqus中完成有限元建模,得到 模型  文件,进行一次仿真,得到自动生成的.inp文件。

​ 具体建模方法在前两篇博客里已有详细描述。

二、matlab调用abaqus引擎进行仿真

  1. 根据需要的参数修改.inp文件 选本次模型用abaqus仿真时自动生成的.inp文件作为初始文件进行修改比较省事。一般是根据要求修改载荷力和分析步长,注意matlab代码中的具体修改的是inp文件的哪行要打开inp文件进行确认,改错行结果肯定凉凉。
  2. 根据需要读取的结果设置req.txt %e.g. req='PART-1-1,Node PART-1-1.11,U2'; %指定部件名,节点名和读取的结果 运行项目并下载源码matlab运行12 部件名即inp文件中的实例名*Instance, name=Part-1-1, part=Part-1,每个inp文件内容会略有差别,我这个在第51行。节点名一定要大写,不管你在abaqus里命名的大写还是小写这里都必须大写。
  3. matlab调用abaqus引擎的接口runabaqus.m,提交inp文件运行,得到.odb结果文件。
  4. matlab调用python脚本odbHistoyOutput.py,根据req.txt的要求,从.odb文件中读取仿真结果数据并存入结果txt。
  5. matlab读取结果txt中的数据并绘图。

利用matlab调用abaqus引擎获取变载荷的仿真过程变量(例如端点位移量)的原理是,多次调用abaqus进行仿真,每次只仿真分析步长的时间,获取本次仿真中最后一个时刻变量值,再进行下一次仿真。例如仿真时长为 0.4 s 0.4s 0.4s,分析步长为 0.01 s 0.01s 0.01s,则要进行 0.4 / 0.01 = 40 0.4/0.01=40 0.4/0.01=40次仿真。两次仿真之间可以通过修改inp文件修改载荷力,即可实现变载荷力仿真,如正弦载荷。

所以运行一次仿真的时间都比较长,需要根据仿真结果调pid参数的时候可以酌情减少仿真时长阶节约时间,毕竟pid参数好不好前两次超调的一小段就已经能说明很多问题了。

报错:未找到匹配的文件。

我进行软体手指的受力位移仿真时,报错:

>> finger
Abaqus License Manager checked out the following license(s): 
"cae" release 6.12 from DESKTOP-8I4F446 
<1022 out of 1024 licenses remain available>. 
KeyError: Node finger_8-1.45 
File "odbHistoyOutput.py", line 38, in <module> 
    region =step_n.historyRegions[node_set] 
 
Abaqus Error: cae exited with an error. 
错误使用 movefile
未找到匹配的文件。

出错 finger (line 15)
    movefile('COOR1.txt', 'N_X.txt');

我修改了odbHistoyOutput.py,增加了提示性输出,发现运行到region =step_n.historyRegions[node_set]一句就不会再往下运行。我猜到是传入的参数node_set即matlab中req的第二个参数有问题,但穷尽想象力尝试到凌晨四点也没能 解决 ,第二天去问师姐,师姐说名称必须大写,我改成大写果然可以了。这个离谱规定让我记忆犹新。

其他注意事项

1、runabaqus.mget_history_output.modbHistoyOutput.py必须与运行的.m文件放在同一目录下,否则会报错类似:

>> beam1
未定义函数或变量 'runabaqus'。

出错 beam1 (line 24)
runabaqus(Path,InpFile,cpus);         %运行abaqus进行计算

2、未找到匹配文件的报错可能原因有很多,从仿真运行到结果读取,任何一个小环节出问题最后大概率在movefile处报错。

排查思路:

(1)看生成的.odb文件的大小,若没有这个文件或文件过小(正常应该至少10M),就是仿真环节已经出问题了。检查abaqus licensing是否运行,若仿真环节没有问题会输出提示类似:

----------ABAQUS complete----------
           time costed  0:0:26
Abaqus License Manager checked out the following license(s): 
"cae" release 6.12 from DESKTOP-8I4F446 
<1023 out of 1024 licenses remain available>. 

(2)若.odb文件大小正常,逐个检查req参数,软体手指仿真中此句为:

req=['FINGER_8-1,Node FINGER_8-1.1,COOR1']; %指定部件名,节点名和读取的结果

循环获取多个节点输出时可写为:

nodef='Node FINGER_8-1.';     %用instance的名字,不管在abaqus里是大写还是小写这里都写成大写
%节点顺序按abaqus里查看的顺序排列
node=[19,45,955,1032,1231,1309,1507,185,207,1724,1816,2000,2092,2290,364,397,417,437,2866,468]; 
nx=zeros(27,20);ny=zeros(27,20);nz=zeros(27,20);
for k=1:1:20
    nodename=[nodef num2str(node(k))];
    k % 输出进度
    req=['FINGER_8-1,' nodename ',COOR1'];  %指定部件名,节点名和读取的结果
    %其他调用部分...
end

注意部件名和节点名必须和.inp文件中一致,且一定要在abaqus中要创建这些节点所需的历程输出(即输出COOR1)。



当时做联合仿真的时候踩了很多坑,本来想记录一下常见报错及解决思路,结果考试周那会儿太忙了没抽出时间,寒假里倒是有时间了,但有哪些坑都忘得差不多了,尝试重新做了一遍居然一次成功,想踩坑的时候倒踩不到了。。。根据记忆整理了本文,如有缺漏有缘再补充。

参考 链接  

https://blog.csdn.net/hdpai2018/article/details/106113842
相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

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

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空