021-39519288qing.xie@weseetech.com
达索系统授权代理商 申请试用

abaqus二次开发-利用Python对Abaqus后处理位移结果进行输出

2021/05/27

一、概述

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

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

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


不清楚用法的可以在帮助文档中查看具体应用。

三、代码实现

首先我们先导入可能会用到的各种库,特殊的,我们调用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表格,等待后续写入操作。相应的代码如下所示:

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

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

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


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

四、运行脚本

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

更多二次开发内容与教学视频请关注下方公众号

© 2023 - Copyright WESEE - All Rights Reserved Designed by GreatMo 沪ICP备14034845号-1