Python脚本在Abaqus后处理中的应用:输出部件特定节点位移值详解
一、概述

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 窗口中输入相关内容。
对于 fileName 而言,它在 myodb.steps['Step-1'].frames[-1].fieldOutputs 的键中。
print filename
我们就可以看到当前分析步下我们定义的场输出变量:
COPEN
RF
…
回到主题,假如我们要提取某一部件所有分析步特定节点的位移值,并且把提取出的位移值输出到 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 *
通过 win32com.client 来调用 Dispatch 函数。
import __main__
import visualization
import os,sys
导入相应模块后,我们打开 odb 文件。因为要读取每个分析步特定节点的位移值,所以需要知道该分析中各分析步的名称。接着遍历每一个分析步,提取特定节点的位移。同时,还要调用 getNodeFromLabel()函数,通过节点编号来获得节点集对象。我们要打开一个新的 Excel 表格,并且等待后续的写入操作。以下是相应的代码:
然后我们对每一个分析步进行遍历。在读取位移结果之前,我们首先创建一个 sheet。这个 sheet 的名字是以当前分析步的名字来命名的。接着,我们写入相应的表头。代码如下所示:
新创建的 sheet 呈现出如图 3 的样子。表头中,Step - 1 代表着当前分析步的名称。其中,node 表示节点编号,X 表示该节点对应的 X 方向位移,Y 表示该节点对应的 Y 方向位移,Z 表示该节点对应的 Z 方向位移,Mag 表示该节点对应的总位移。
然后我们开始读取整个模型当前分析步最后一帧的位移场。我们之所以要读取这个位移场,是因为我们只需要特定节点的位移值。所以我们要用到 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 所展示的那样。