Abaqus用python进行.odb文件提取

目录

写在前面

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

 

  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小鱼爱码士

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

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

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

打赏作者

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

抵扣说明:

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

余额充值