Abaqus用python进行.odb文件提取 您所在的位置:网站首页 python怎么提取文件 Abaqus用python进行.odb文件提取

Abaqus用python进行.odb文件提取

2024-01-01 10:15| 来源: 网络整理| 查看: 265

目录

写在前面

Abaqus:

什么是有限元?

 .odb文件结构

Odb对象的成员信息如下:

rootAssembly对象的成员信息如下:

 使用:

what?S11?

方案分析:

 以下程序实现S11值的读取:

写在前面

最近跟着老师做课题,过程中需要用到python对abaqus的.odb等各种文件进行读取,其他文件好说,Abaqus的.odb文件具有庞大数据结构,不能直接读取。幸运的是Abaqus和python之间有联动的方法。这篇文章主要记录了我在接触Abaqus和python联动的时遇到的问题及一些体会。

Abaqus:

ABAQUS 是一套功能强大的工程模拟的有限元软件,其解决问题的范围从相对简单的线性分析到许多复杂的非线性问题。 ABAQUS 包括一个丰富的、可模拟任意几何形状的单元库。并拥有各种类型的材料模型库,可以模拟典型工程材料的性能,其中包括金属、橡胶、高分子材料、复合材料、钢筋混凝土、可压缩超弹性泡沫材料以及土壤和岩石等地质材料,作为通用的模拟工具, ABAQUS 除了能解决大量结构(应力 / 位移)问题,还可以模拟其他工程领域的许多问题,例如热传导、质量扩散、热电耦合分析、声学分析、岩土力学分析(流体渗透 / 应力耦合分析)及压电介质分析。

什么是有限元?

什么是有限元?icon-default.png?t=M85Bhttps://baike.baidu.com/item/%E6%9C%89%E9%99%90%E5%85%83/1761759?fromModule=lemma_inlink

 .odb文件结构

Odb对象的成员信息如下:

rootAssembly对象的成员信息如下:

 使用:

原计划的是提取每一个节点的坐标值,将他和对应的节点的S11值结合起来,但是结果无终。后来,学长给了另外两种思路:

1、创建一条路径,直接把这条路径上的S11值全部读取出来,再进行处理。

2、在前处理中在软件中得到需要读值的网格编号,在后处理中用前面得到的编号去对应S11的值。这样就可以得到网格的S11值?

疑问?S11的值不是应该分布在节点上吗?为什么通过网格编号能获取到S11的值呢?

答:获取的是积分点的S11值,当然也可以是其他点,或者全部节点。

what?S11?

在ABAQUS中对应力的部分理解 关于abaqus中 mises, s11 s22 s33 ,s12,tresca pressure, max principal, mid principal,min principal。简单地理解, 在ABAQUS中,一般是把X轴当做1轴,Y轴当做2轴,Z轴当做3轴;那么: S11就是X轴向的应力,正值为拉应力,负值为压应力; S22就是Y轴向的应力,正值为拉应力,负值为压应力; S33就是Z轴向的应力,正值为拉应力,负值为压应力; S12就是在YZ平面上,沿Y向的剪力; S13就是在YZ平面上,沿Z向的剪力; S23就是在XZ平面上,沿Z向的剪力; 由于剪力的对称性:S12=S21,S13=S31,S23=S32 Mises应力是即第四强度理论,根据能量守恒原理,用于判断材料是否屈服的应 力准则,即Mises准则,一般使用于判断延性比较好的材料,对于脆性材料,一 般采用第一强度理论。

方案分析:

原计划:提取每一个节点的坐标值,将他和对应的节点的S11值结合起来。

提取的结果是COORD的label和S11的label对应不上(如下)后来又查了很多资料,最后发现坐标完全可以从.inp文件中读取,.inp文件中还有C3D8类型,下面这篇文章就说了,C3D8和Nodes的关系,我想可以通过这个能够做到他们和应力坐标对应。具体的我就没再往下进行了,有兴趣的读者可以自己试一下!

手把手教你读abaqus的inp文件(以一个单元的inp文件为例) - 知乎手把手教你读abaqus的inp文件(以一个单元的inp文件为例)首先写出全部代码,一个单元的inp文件完整流程图(可先大致浏览后跳过,接下来分步骤进行详细说明): *Heading ** Job name: 3pct2Mesh Model name: Mode…https://zhuanlan.zhihu.com/p/180455168

 方案1:创建一条路径,直接把这条路径上的S11值全部读取出来,再进行处理。

abaqus中好像可以通过path命令进行一条路径上的读取。具体的也没多接触。只因为我觉得方案2会更简单,更方便去实现!

方案2:在前处理中在软件中得到需要读值的网格编号,在后处理中用前面得到的编号去对应S11的值。

 在abaqus前处理中我们可以使用一下方法进行网格编号的查询:

 以下程序实现S11值的读取: from part import * from material import * from section import * from assembly import * from step import * from interaction import * from load import * from mesh import * from optimization import * from job import * from sketch import * from visualization import * from connectorBehavior import * class Abaodb(): def __init__(self,odb_path): self.s11dict = dict() self.mdb = mdb # models data base in the class self.path = odb_path # Path of odb file self.odb = openOdb(self.path, readOnly=False) # Open odb file def getS11(self,step="Step-1",frame=-1,out_path=""): # Create a txt document to store the obtained stress with open(out_path, "w+") as fp: # sets = self.odb.rootAssembly.instances['PART-1-1'].nodeSets[nodesets] Frame = self.odb.steps[step].frames[frame] stress_field = Frame.fieldOutputs['S'] stress_field_nodset = stress_field.getSubset() fields = stress_field_nodset.getScalarField(componentLabel="S11") for s11 in stress_field_nodset.values: #S11 S22 S33 S12 S13 S23 if out_path: fp.write(str("elementLabel:"+str(s11.elementLabel)+"\tS11:"+str(s11.data[0]))+"\n") self.s11dict[s11.elementLabel]=s11.data[0] self.odb.close() return self.s11dict

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有