Matlab-python-ABAQUS数据交互及联合使用

Matlab-python-ABAQUS数据交互及联合使用

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

通过matlab提交inp文件给ABAQUS计算

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

接口函数例子:

%runabaqus.m
%向abaqus提交计算文件
%libing403,2017-05-07
function [ output_args ] = runabaqus(Path,userFile,InpFile,cpus)
%runabaqus Summary of this function goes here
%ABAQUS提交计算的命令,inp文件,用户子程序,cpus数目等
inputFile=['abaqus job=',InpFile,' user=',userFile,' cpus=',cpus];
t0=tic;%开始计时
MatlabPath=pwd();%记下当前Matlab目录,
cd(Path);%进入Abaqus目录,即inp文件所在目录
[ output_args ] =system(inputFile);%通过系统调用,运行ABAQUS,提交计算文件
pause(5)
cd(MatlabPath);%返回Matlab工作目录
if (exist([Path,'\',InpFile,'.lck'],'file')==2)
    %若提交成功,则检测计算时间
  while exist([Path,'\',InpFile,'.lck'],'file')==2
       t=toc(t0);
       h=fix(t/3600);
       m=fix(mod(t,3600)/60);
       sec=fix(mod(mod(t,3600),60));
       pause(1)
       fprintf('----------ABAQUS calculating----------\n           time costed  %d:%d:%d\n',...
       h,m,sec);
  end
  fprintf('----------ABAQUS complete----------\n           time costed  %d:%d:%d\n',...
    h,m,sec);
else
    %若提交计算出错,则输出错误信息
    fprintf('\n runabaqus erro:InpFile submmit failed\n')
end
end

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

应用例子:

%操作ABAQUS,监测计算流程
%libing403,2017-5-6
clc
clear
%inp 文件
Path='F:\security folder\ABAQUS WORKING\inversion_per';%指定文件所在目录
InpFile='unixial-inversion-per';%不需要后缀名inp
userFile='usfeld';%用户子程序
cpus='1';%计算使用的cpu个数
runabaqus(Path,userFile,InpFile,cpus);%运行abaqus进行计算

matlab利用python脚本读取odb数据

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

例子:读取一个参考点的反力RF3

#! /user/bin/python
#- -coding: UTF-8-*-
#odbHistoyOutput.py
# 本脚本的功能是按照req.txt文件指定的要求,读取输出数据库 *.odb的历史数据
#libing403,2017-5-7
#导入abaqus odbAcess模块
from odbAccess import *
import time
#获取matlab指定的数据库,部件名,节点,特定结果的信息
f=open('req.txt','r')
req=f.readline()
f.close()
req=req.split(',')
path=req[0]+'/'+req[1]
step=req[2]
instance=req[3]
node_set=req[4]
ReqData=req[5]
#输出提示信息
fmeg=open('pylog.txt','w')
meg='------------------------------------------------------------------\n'
meg=meg+'odb_HistoryOutput message:\n'
meg=meg+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+'\n'
meg=meg+'read '+node_set+' '+ReqData+' from \n'+path
print meg
fmeg.write('%s\n'%meg)
#打开odb数据库
odb = openOdb(path=path)
#输出提示信息
meg='open odb successfully\n'
fmeg.write('%s'%meg)
print meg
#创建变量表示第n个分析步
step_n=odb.steps[step]
# 创建变量表示第1个分析步的最后一帧
lastFrame = step_n.frames[-1]
#获取历史输出区域
region =step_n.historyRegions[node_set]
#输出提示信息
meg='get nodes sets successfully\n'
fmeg.write('%s'%meg)
print meg
# 获取结果
GetData=region.historyOutputs[ReqData].data
DataFile=open(ReqData+'.txt','w')
for time,Data in GetData:
    DataFile.write('%10.4E  %10.4E\n'%(time,Data))
DataFile.close()

#输出提示信息
meg='get data  successfully\n'
fmeg.write('%s'%meg)
print meg
fmeg.close()

这个脚本主要是读取ABAQUS历史输出数据,读取场输出数据可以进行修改实现。

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

调用python脚本的matlab函数:

%get_history_output.m
%运行python脚本,读取odb数据库的历史输出
%libing403,2017-05-07
function get_history_output(Path,OdbFile,step,req)
% %specified part instance,node set,output
%参数写入Abaqus工作目录
ReqFile=[Path,'\req.txt'];
fid=fopen(ReqFile,'wt');
fprintf(fid,'%s,%s,%s,%s',Path,OdbFile,step,req);
fclose(fid);
%写入当前目录
ReqFile='req.txt';
fid=fopen(ReqFile,'wt');
fprintf(fid,'%s,%s,%s,%s',Path,OdbFile,step,req);
fclose(fid);
%execute python file
system('abaqus cae noGUI=odbHistoryOutput.py');%调用python脚本
showlogfile('pylog.txt');%显示python运行的输出信息
end

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

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

应用例子:

%example.m
%libing403,2017-05-07
%specified part instance,node set,output
req='PLATEN-1,Node PLATEN-1.5322,RF3';%指变req='PLATEN-1,Node PLATEN-1.5322,RF3';%指定部件名,节点名和读取的结果
step='Step-1';%指定读取的分析步
Path='F:\security folder\ABAQUS WORKING\inversion_per';%指定odb所在目录
OdbFile='unixial-inversion-per.odb';%指定odb文件名
%调用函数,读取odb数据
get_history_output(Path,OdbFile,step,req);

特别说明

这里与历史变量输出的节点或节点集的名称与你在step里设置历史输出指定的节点名是不一样的,与历史变量相关的节点名是系统命名的,但是这些节点名有一定的规律,总是这样的形式“Node+空格+instance name.节点号”,例如我的模型里有一个部件叫PLATEN-1,定义了一个参考点,并把它设置为一个set,在step里设置了输出它的反力RF3,并且我知道了它的的节点号是5322,那么我设置历史变量相关的节点名称是就是“Node PLATEN-1.5322”。这也是和网友一起讨论才弄懂这个问题的。

运行程序后,首先matlab把参数写入req.文件。req.txt记录了指定的相关参数,以逗号隔开,每个参数,如下:

F:\security folder\ABAQUS WORKING\inversion_per,unixial-inversion-per.odb,Step-1,PLATEN-1,Node PLATEN-1.5322,RF3

然后matlab调用python脚本odbHistoyOutput.py,读取odb数据。odb首先读取req.txt的参数,然后再根据参数去读取odb数据,把结果写入ReqData(即RF3.txt),结果包含时间和反力RF3,如下(部分省略):

0.0000E+00  -0.0000E+00
1.0000E-02  -0.0000E+00
2.0000E-02  -0.0000E+00
3.0000E-02  -0.0000E+00
5.0000E-02  -0.0000E+00
9.0000E-02  -2.1087E+01
1.5000E-01  -7.3267E+01
2.4000E-01  -1.2684E+02
3.4000E-01  -1.8037E+02
4.4000E-01  -2.3264E+02
......

小结

这里matlab与python脚本之间可能有比较的参数和数据需要传递,因此,我这里先把要传递的参数和数据写入特定的txt文件,然后再由另一程序去读取。其次是这里尽量把每个简单的功能写成函数,这样有助于更容易调试程序,不断添加新功能和集成。这就是增量式开发的思想。

  • 28
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
目 录 第1章 导论 1 1.1 引言 1 1.2 有限元分析与用户 1 1.3 本书的目的 1 1.4 本书的结构 2 第2章 杆单元 4 2.1 引言 4 2.2 一维杆单元 4 2.2.1 刚度矩阵:直接法 4 2.2.2 二维杆单元 6 2.3 整体刚度矩阵的组集 8 2.3.1 离散化 8 2.3.2 局部坐标系下的单元刚度矩阵 8 2.3.3 整体坐标系下的单元刚度矩阵 9 2.3.4 整体刚度矩阵的组集 10 2.3.5 整体力矢量 11 2.4 边界条件 12 2.4.1 一般情况 12 2.5 方程组求解 14 2.6 支反力 14 2.7 杆件的轴力 15 2.8 计算机程序:truss.m 16 2.8.1 数据准备 16 2.8.2 单元矩阵 18 2.8.3 整体刚度矩阵的组集过程 19 2.8.4 整体坐标系下力矢量的组集 19 2.8.5 整体方程组的解 19 2.8.6 节点位移 19 2.8.7 单元力 20 2.8.8 程序代码 20 2.9 问题求解 24 2.9.1 问题2.1 24 2.9.2 问题2.2 28 2.10 基于Abaqus的简单桁架分析 31 2.10.1 Abaqus概述 31 2.10.2 使用Abaqus的用户交互版本分析桁架 32 2.10.3 使用Abaqus的关键字版本分析桁架 47 第3章 梁单元 51 3.1 引言 51 3.2 刚度矩阵 52 3.3 均布载荷 55 3.4 中间铰链 58 3.5 计算机程序:beam.m 60 3.5.1 数据准备 60 3.5.2 整体刚度矩阵的组集和求解 63 3.5.3 节点位移 63 3.5.4 单元力 63 3.6 问题求解 67 3.6.1 问题3.1 67 3.6.2 问题3.2 70 3.6.3 问题3.3 73 3.7 基于Abaqus的简单梁模型分析 76 3.7.1 用户交互版本 76 3.7.2 关键字版本 85 第4章 刚架 89 4.1 引言 89 4.2 梁柱单元的刚度矩阵 89 4.3 两端铰接的梁柱单元的刚度矩阵 90 4.4 整体坐标系和局部坐标系 90 4.5 整体刚度矩阵的组集和未知位移求解 91 4.6 计算机程序:frame.m 91 4.6.1 数据准备 91 4.6.2 单元矩阵 93 4.6.3 整体刚度矩阵的组集 95 4.6.4 线性方程组的求解 95 4.6.5 节点位移 95 4.6.6 单元力 95 4.7 基于Abaqus的简单刚架分析 105 4.7.1 用户交互版本 105 4.7.2 关键字版本 111 第5章 应力和应变分析 114 5.1 引言 114 5.2 应力张量 114 5.2.1 定义 114 5.2.2 应力张量和应力矢量之间的关系 116 5.2.3 应力张量的变换 117 5.2.4 平衡方程 117 5.2.5 主应力 119 5.2.6 Mises应力 119 5.2.7 应力矢量的法向和切向分量 120 5.2.8 莫尔应力圆 121 5.2.9 应力的工程表示方法 121 5.3 变形和应变 122 5.3.1 定义 122 5.3.2 拉格朗日描述和欧拉描述 123 5.3.3 位移矢量 123 5.3.4 位移和变形梯度 124 5.3.5 格林应变矩阵 125 5.3.6 小变形理论 127 5.3.7 主应变 129 5.3.8 应变张量的变换 129 5.3.9 应变的工程表示方法 130 5.4 应力-应变的本构关系 130 5.4.1 广义胡克定律 130 5.4.2 材料的对称性 132 5.4.3 各向同性材料 134 5.4.4 平面应力与平面应变 137 5.5 问题求解 139 5.5.1 问题5.1 139 5.5.2 问题5.2 139 5.5.3 问题5.3 141 5.5.4 问题5.4 143 5.5.5 问题5.5 144 5.5.6 问题5.6 145 5.5.7 问题5.7 145 5.5.8 问题5.8 147 第6章 加权残值法 148 6.1 引言 148 6.2 基本方程 148 6.3 伽辽金法 148 6.4 伽辽金法的弱形式 150 6.5 二维或三维问题的分部积分法(格林公式) 151 6.6 瑞利-里兹法 154 6.6.1 定义 154 6.6.2 积分形式的函数表达式 155 6.6.3 瑞利-里兹法简介 155 6.6.4 自然泛
ABAQUSMATLAB可以实现车桥耦合分析。ABAQUS是一种通用的有限元分析软件,主要用于工程结构的强度、刚度和振动等问题的模拟。而MATLAB是一种数值分析和算法开发的工具,用于解决复杂的数学计算和数据处理任务。 在车桥耦合分析中,ABAQUS可以用来建立车辆和车桥的有限元模型。通过定义车辆的动力学特性、地面激励和车辆操纵输入等参数,可以模拟车辆在不同路况下的运动行为。同时,还可以建立车桥的有限元模型,包括车架、悬挂系统、轮胎等部件,并定义材料性质和边界条件。 而MATLAB可以用来处理ABAQUS输出的结果数据,进行后续的数据分析和处理。例如,可以绘制车辆在不同工况下的动态响应曲线,评估其稳定性和舒适性。同时,也可以对车桥的结构进行分析,比如确定应力和应变分布、评估疲劳寿命等。MATLAB提供了丰富的数学函数和绘图工具,可以方便地进行数据处理和可视化。 另外,ABAQUSMATLAB还可以通过接口进行数据交互和耦合。例如,可以使用MATLAB编写脚本,自动化建模和模拟过程,从而提高工作效率。同时,也可以将ABAQUS计算结果传递给MATLAB进行进一步分析,以实现更深入的数据处理和结果解释。 综上所述,ABAQUSMATLAB可以结合使用,实现车桥耦合分析。ABAQUS用于建模和模拟车辆和车桥的有限元模型,而MATLAB用于后续的数据处理和可视化。这样的耦合分析可以帮助工程师评估车辆性能和结构可靠性,为车桥设计和优化提供有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Galaxy_Robot

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值