基于PYTHON的ABAQUS后处理开发!

本文转自:公众号有限元仿真分析
原文链接:https://mp.weixin.qq.com/s/PF501qQPvq5LbhydONnUrg

ABAQUS 的后处理功能不能完全提供我们在分析过程中所需的数据,为更好的扩展后处理功能,查看和分析结果数据,本文提出了使用Python 语言对ABAQUS 进行二次开发来达到这一目的的方法。文中讨论了ABAQUS 的脚本接口和对象模型在二次开发中的作用和调用流程,以及文件的读写与复制、数据读取与处理、结果输出与查看等关键技术。以共轨管锥面密封性的分析为例,使用Python 语言提取了分析结果数据并将结果作为初始条件加载于新的分析中,最终得到所需的分析数据。
引言
图片

ABAQUS 是目前国际上最为先进的通用非线性有限元分析软件之一,软件包括种类丰富的材料库和单元库,可以模拟绝大部分工程材料的线性和非线性行为,而且材料库和单元库分开,材料和单元之间的组合能力很强,可以胜任复杂结构的静态与动态分析。ABAQUS自带的CAE 模块是一个完整ABAQUS 环境,提供—个简单一致的接口,可以用于创建、提交、监视和评价模拟所得到的结果。

Python 是一种简单易学、功能强大的编程语言,它有高效率的高级数据结构,可以简单而有效地实现面向对象编程。ABAQUS 有限元程序就通过集成脚本语言Python 向二次开发者提供了很多库函数,通过Python 语言调用这些库函数来增强ABAQUS 的交互式操作能力。本文通过Python 脚本语言来提取ABAQUS 的后处理结果,并对结果数据进行相应的计算和转换,并将处理结果作为初始条件应用于其后的开发过程中。

1
ABAQUS、PYTHON接口程序
ABAQUS 的二次开发可以通过Python 脚本语言控ABAQUS内核实现前处理建模和后处理的计算分析。ABAQUS 脚本接口是Python 语言的一个扩展,可以使用Python 语言编制脚本接口可以执行的程序,从而实现自动化重复性的工作、创建和修改模型数据库、访问数据库的功能。ABAQUS 脚本接口中的每个对象都拥有相应的数据成(data)和函数,对象中的函数专门用来处理对象中的数据成员,被称为相应对象的方法,用来生成对象的方法被称为构造函数(constructor)。在对象创建以后,可以使用该对象提供的方法来处理对象中的数据成员。ABAQUS 的对象模型是指ABAQUS 脚本接口中的各种对象类型之间的层次关系。ABAQUS 脚本接口对Python 语言进行了扩展,额外提供了大约500 个对象模型,这些对象模型之间的关系比较复杂,大致将这写对象分为3 类,如图1 所示。其中,session对象用来定义视图、远程队列、用户定义的视图等;mdb 对象包括计算模型对象和作业对象,其中odb 对象包括计算模型和计算结果数据,每一类对象下面又包括各类子对象,比如mdb 对象下面的计算模型models 对象又包括很多子对象,如图2 所示。

结果数据库由ABAQUS 分析得到,其中包含了模型数(Modeldata)和结果数据(Result data)。模型数据描述了分析中使用的模型,包括零件、装配信息等。结果数据描述了分析得到的结果,包括步(step)、帧(frame)、场变量输出(field output)和历史变量输出(historyoutput)等。在后处理的二次开发过程中,就是读取odb 对象中的数据,进行计算等相应的处理,然后输出为相应形式供用户查看的。

2
实现的关键技术
后处理是将有限元计算后的数据形象的显示出来供用户对计算结果进行查看和分析的。首先明确所要实现的功能,并设计功能实现的流程,使用Python 调用ABAQUS 提供的方法编写程序对结果数据库进行处理。其中关键技术有文件的读写和控制、数据的读取、数据的处理和结果的输出与查看等。

2.1 文件的读写和复制

通过Python 语言提取Odb 文件中提供的OdbAccess 文件,实现对计算结果数据库文件的二次开发,有时这种开发还需要对.dat 文件和.fil 文件进行数据的读取。

2.2 数据的读取

数据读取即使用Python 语言通过ABAQUS的脚本接口读取odb 文件中的数据。ABAQUS 计算得到的数据是以面向对象的形式存储在结果数据库Odb 文件中的,要读取文件中的数据必须找到数据所在的路径,直接引用其中的变量或者使用数据对象的方法得到数据。

2.3 数据的处理

将提取出来的数据按照设计算法进行计算,得到所需要的结果文件。

2.4 数据的输入

将计算后得到的数据作为初始条件加载入新模型中进行计算和结果的显示。

3
应用举例
以高压共轨系统中出油孔锥形面密封有效性分析为例,通过对预警过程和加载油压的工作过程进行模拟,分析锥面密封的有效性。首先建立锥面密封的简化模型并对预紧过程进行分析,通过计算锥形面同管接头之间的分离力(式1,2)预定义一定的分布力作用于螺母同管接头的接触面,得到锥形面间的接触应力、应变及更新后的管接头节点坐标。在螺母的预紧工作完成后,加载油压的工作过程不再施加预紧力,而在第一步中产生的相对位移作为新的初始条件加载在模型中并保持不变,这种加载无法直接设置多步分析得到,因此需要将上步分析中得到的应力、应变及更新的节点坐标写入新的分析文件中进行下一步的计算。使用Python 语言访问结果数据odbAccess,指定数据所在的路径即相应的步(step)和帧(frame),直接引用其中的使用数据对象(fieldOutput),将提取出来的数据写入文本文件中,作为初始条件加载入下一步的工作模型中进行计算。

3.1 共轨管密封组件的安装预紧力计算

针对实际密封锥面加工精度和质量情况建立相应的共轨管密封锥面部分的几何模型,将计算所得预紧力使用分布载荷形式作用于螺母的预紧结合面上,使得管接头外表面同共轨管锥面紧密贴合,保证油路密封。由于预紧螺母的形状对于预紧力的施加没有太大的影响,因此将六角螺母的形状简化为圆柱形;为了尽量减小有限元计算中出现的不收敛现象,预紧螺纹部分也简化为内圆柱面,预紧力则由作用在螺纹螺旋面上的摩擦力转变为作用在内圆柱面上的轴向力。密封面组件具有轴对称性,为了减少计算时间,在三维建模中只对一半的结构进行建模分析,在剖分面上通过边界约束的施加来限定其轴对称性。管壁内暂不施加油压作用,进行预紧力作用下的三体应力- 位移分析,分析结果应力分布如图3 所示。

图片

3.2 更新节点坐标及相应物理量

由上一步中得到的分析结果文件中,使用开发的python 后处理程序,提取预紧过程达到变形稳定后的三体组件各节点的位置文件,更新第二步中的节点的坐标文件,以及相应的应力分布等场变量文件。导入更新后的节点坐标文件,在这一预紧稳态位置将预紧螺母和共轨管出油孔的预紧结合面“TIE”在一起模拟螺母预紧后的状态;同时将应力分布作为初始条件增加到模型中,模拟螺纹预紧后锥形接触面的状态,这一步可以看作是模拟管接头的预紧安装。此时共轨管锥面同管接头之间存在了初始的接触压力,保证油路的密封性。
Python 的开发文件首先需要导入odbAccess,使openOdb打开指定的数据库,并指定需要提取数据的step 及frame,在这些数据中使用fieldOutputs 读取需要的结果数据,如位移、应力及温度等参数,存入新建inp 文件中。在新的分析中,使用*initial conditions语句引用变量文件进行计算。最终的分析结果如图4 所示:

图片

4
总结
使用ABAQUS 脚本接口及Python 语言,对ABAQUS 计算结果进行处理,实现后处理所未提供功能,便于后续的分析过程。

使用Python 进行二次开发,可以有效的查看并处理分析过程中所关心的数据,并根据使用者要求进行各种数据处理,提高了分析能力。

参考文献:

[1]庄茁,张帆,岑松等.ABAQUS 非线性有限元分析与实例[M].北京:科学出版社.2005.

[2]鲍荣浩,卢文浩.ABAQUS 前处理程序二次开发在蜂窝材料中的应用

[J].工程设计学报,2003, lO(6):330- 33.

[3]ABAQUS, Inc.ABAQUS Scripting User’SManua1.Version 6.4

EM3.Pawtucket,USA:ABAQUS, Inc.2003.

[4]ABAQUS, Inc.ABAQUS Scripting ReferenceManua1.Version

6.4[M].Pawtucket,USA:ABAQUS, Inc.2003.

[5]肖建,林海波.Python 编程基础[M].北京:清华大学出版社.2003.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PythonABAQUS后处理结合可以实现强大的数据分析和可视化功能。ABAQUS是一种常用的有限元分析软件,而Python是一种功能强大的编程语言。 使用Python进行ABAQUS后处理时,你可以使用ABAQUS提供的Python接口(ABAQUS Scripting)来访问计算结果和模型数据。这个接口允许你以编程的方式读取、处理和分析ABAQUS的输出文件。 以下是一个简单的例子,展示了如何使用Python进行ABAQUS后处理: ```python from abaqus import * from abaqusConstants import * # 打开ODB文件 odb = openOdb('path/to/your/odb/file.odb') # 获取结果数据库 result = odb.steps['Step-1'].frames[-1].fieldOutputs['S'] # 遍历所有节点,并获取应力结果 for node in odb.rootAssembly.instances['PART-1-1'].nodes: stress = result.getSubset(region=node).values[0].data[0] print(f"Node {node.label}: Stress = {stress}") # 关闭ODB文件 odb.close() ``` 上述代码打开了一个ODB文件,并获取了最后一帧的应力结果。然后,通过遍历所有节点,并使用`getSubset`方法获取每个节点的应力值。最后,将节点标签和应力值打印出来。 除了以上例子中展示的基本操作外,你还可以使用Python进行更复杂的后处理任务,如数据处理、绘图和结果可视化等。通过使用Python库(如NumPy、Matplotlib和Pandas)来处理数据,你可以根据自己的需求进行灵活的分析和可视化。 需要注意的是,使用Python进行ABAQUS后处理需要安装Abaqus/Python环境,并且熟悉ABAQUS Scripting接口和Python编程基础。你可以参考ABAQUS提供的官方文档和示例代码来深入学习和掌握这个技术。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值