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

一、概述

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 所展示的那样。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读