Abaqus二次开发


Abaqus二次开发的图1
Abaqus二次开发的图2


Abaqus二次开发

利用Python对Abaqus进行后处理开发

 

Abaqus提供了基于Python语言的脚本接口,在Abaqus的二次开发过程中,可以利用Python脚本对其后处理结果进行输出,然后再进行相应的处理。本文通过一个简单的例子来说明Python语言在Abaqus后处理中的应用。




01.

                  输出部件特定节点的位移值


在利用Python脚本对Abaqus后处理位移结果进行输出之前,我们先来了解一下Abaqus生成的输出数据库文件(odb文件)。输出数据库文件包括模型数据(model data)和结果数据(result data)两部分。其中模型数据是用来描述根装配(root assembly)中的部件和部件实例。例如,节点坐标、集合定义、单元类型等。结果数据是用来描述各种分析结果。例如,应力、应变和位移等。Abaqus输出数据库的结构图1所示。

Abaqus二次开发的图3

图1


Abaqus的odb文件输出结果信息有很多,例如我们今天讲的提取位移结果,属于场输出数据的一类,如果我们想知道当前分析有哪些输出量我们可以通过Python调用,我们可以在Abaqus CAE的Kernel Command窗口输入:

for fileName in myodb.steps['Step-1'].frames[-1].fieldOutputs.keys():

    print filename

我们就可以看到当前分析步下我们定义的场输出变量:

COPEN

RF

U

回到主题,假如我们提取某一部件所有分析步特定节点的位移值,并将提取的位移值输出到Excel表格中。我们可以分成两步,一是提取位移值,二是创建新的Excel文件,并将提取出的位移添加进去。由于是提取部分节点的位移,所以我们要用到两个比较重要的函数:getNodeFromLabel()和getSubset(),帮助文档图2所示。

Abaqus二次开发的图4
Abaqus二次开发的图5

图2



02.

代码实现


首先我们先导入可能会用到的各种库,特殊的,我们调用win32com.client模块来操作office。

#!/user/bin/python

# -* - coding:UTF-8 -*-

'''

读取每一分析步相应节点的位移数据,并存入Excel表格中

'''

from abaqus import *

from abaqusConstants import *

from odbAccess import *

from math import *

from win32com.client import Dispatch

import __main__

import visualization

import os,sys

导入相应的模块之后,我们打开odb文件,因为我们要读取每个分析步特定节点的位移值,所以我们需要知道该分析中各分析步的名称,然后遍历每一个分析步,提取特定节点的位移。我们还要调用getNodeFromLabel()函数,通过节点编号,获得节点集对象。同时我们还要打开一个新的Excel表格,等待后续写入操作。相应的代码如下所示:

MyOdb=openOdb(path=odbFilePath)

myAssenbly=MyOdb.rootAssembly

instance1=myAssenbly.instances[InstanceName]

       myNode=[]

for eachLabel in disNode_label:                 disNodel=instance1.getNodeFromLabel(eachLabel)

       myNode.append(disNodel) 

    ……

for each_step in stepfield:

        loadCase.append(each_step.name)

然后我们遍历每一个分析步,在读取位移结果之前我们先创建一个sheet,表单的名字以当前分析步的名字命名,写入相应的表头,代码如下所示:

for each_Loadcase in loadCase:          Application.Worksheets.Add().Name = each_Loadcase

       ……

 xlSheet.Range('A2:E2').Value = head_line 

新创建的sheet如图3所示,表头中Step-1表示当前分析步的名字,node、X、Y、Z、Mag分别表示节点编号以及该节点对应的三个方向的位移和总位移。

Abaqus二次开发的图6

图3

然后我们开始读取整个模型当前分析步最后一帧的位移场displacement,因为我们只需要读取特定节点的位移值,所以我们要用到getSubset(region=node)函数,通过节点对象获得特定节点的位移值。我们在此需要创建一个列表,列表的每一项也是一个列表,该列表包含特定节点的编号,以及该节点的各方向的位移和总位移,形式如:[[1,0.02,0.04,0.01,0.0458],[2,0.03,0.001,0.0,0.03001]….],然后我们将每一项子列表中的信息写入我们创建的sheet中。所有结果写入完之后,我们保存创建的表格,并退出。代码如下所示:

lastFrame=MyOdb.steps[each_Loadcase].frames[-1]        displacement=lastFrame.fieldOutputs['U']

        dis_nodeLabel=[]

        dis_X=[]

        dis_Y=[]

        dis_Z=[]

        dis_Mag=[]

        dis_data=[]

        for node in myNode:

 ……        dis_data=zip(dis_nodeLabel,dis_X,dis_Y,dis_Z,dis_Mag)

        dis_data=sorted(dis_data)

        dis_data_str = []

        for each in dis_data:

            each_line=tuple(map(lambda x: str(x),each))

            ……

        xlSheet.Columns.AutoFit()#自动调整列宽

xlSheet.Rows.AutoFit()#自动调整行高    Application.Worksheets('Sheet1').Delete()    ExcelFile_Path=os.path.join(CurWorkDir,'dis_data.xlsx')

    wb.SaveAs(ExcelFile_Path)

    wb.close

    Application.Visible=False

我们将整个功能封装在readDis_data(InstanceName,disNode_label)函数中,其有两个参数,一是要提取的节点所在的部件实例的名称,二是节点编号列表。如果是通过Hypermesh建模,部件实例只有一个:'PART-1-1'。



03.

程序运行结果展示


在Abaqus cae中,运行脚本,调用readDis_data()函数,例如我们想提取'PART-1-1'前十个节点的位移(节点标号从1到10),输入readDis_data('PART-1-1',list(range(1,11)),点击回车。输出结果如图4所示。

Abaqus二次开发的图7
Abaqus二次开发的图8

图4



04.

更多内容



长按识别二维码关注更多内容


Abaqus二次开发的图9





内容作者


上海唯析CAE工程师:郑灿辉





Abaqus二次开发的图10


ABAQUS二次开发

Abaqus二次开发的评论0条

    暂无评论

    Abaqus二次开发的相关案例教程

    from abaqus import * from abaqusConstants import * backwardCompatibility.setValues(includeDeprecated=True,reportDeprecated=False) # Create a model. myModel = mdb.Model(name='Beam') # Create a new view
    1. 概述 早期的结构设计中,工程师们主要研究结构的强度、刚度等内容,客户也更多的关注结构的安全性及稳定性。随着技术的发展及竞争,在安全可靠的前提下,客户越来越看重产品的舒适性,因此有必要进行结构振动与噪声控制优化设计工作。 合理的开展结构减振降噪优化工作的前提是:正确识别噪声源,分析其振动能量的分布和主要传播途径。而结构振动强度的功率流分析方法可使结构的能量传递路径和振源可视化。 本期小编将给大
    之前号内分享过一篇基于Matlab对Abaqus-odb结果文件进行modify的推文,大家有兴趣可点击阅览Matlab“稍作修改”Abaqus-odb结果!!!,本次想要分享的是如何将Abaqus产生的odb文件转入Paraview中进行后处理显示? 灵感来源 相信有的小伙伴在网上会发现有一项开源项目正是解决这个问题,地址:https://github.com/haiiliin/odb2vtk,
    一、算例背景及分析技术 钢筋混凝土结构开裂是广泛存在的现象,准确的说从钢筋混凝土结构服役开始就进入带裂工作状态,只是这种裂缝肉眼难以辨别并且对结构安全没有影响。但裂缝作为钢筋混凝土构件工作状态的重要表征指标,是结构损伤的表现,也许是破坏的先兆,也许是耐久 性不足的预警,更是灾后调查和受力机理揭示的重要线索,见图1。 图1 钢筋混凝土结构裂缝 本案例使用ABAQUS对一根钢筋混凝土受拉构件进行裂缝估
    MATLAB启动ABAQUS,提取odb,将ABAQUS模型视作MATLAB的一个函数,用于优化分析 inpName = 'Job-1'; workDir = 'G:\CABLE_CON\TEXT2'; runabaqus(workDir,inpName); % 运行py脚本文件 system(['abaqus viewer noGui=','out_F.py']); % 载入数据 t=load(
    影响力
    粉丝
    内容
    获赞
    收藏
      项目客服
      培训客服
      0 10