PYTHON实现abaqus后处理(1)

PYTHON实现abaqus后处理(1)

读取多个result的应变最大最小值

最近在用abaqus做仿真的时候,需要一次性提交多个Job,并在处理完成后,读取每个result的应变的最大最小值。在abaqus中重复如下操作:

1.Job management中点击Results,跳转到Visuilization
2.将Field Output Dialog中设置Primary | U | U1 |
3.Option | Contours | Limits |
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码片

用Python程序实现:(这里导入了xlrd、numpy、pandas的库,来读写数据,定义数组,如何安装pandas库请看文末链接 Abaqus安装python第三方库函数)。

##查看可视化中的最大最小应变自动计算值
##以下为abaqus内部库,不要问有什么用,加载就对了。
from abaqusConstants import *
import __main__

import section
import regionToolset
import displayGroupMdbToolset as dgm
import part
import material
import assembly
import step
import interaction
import load
import mesh
import optimization
import job
import sketch
import visualization
import xyPlot
import displayGroupOdbToolset as dgo
import connectorBehavior
#numpy数组是少有的几个Abaqus自带的第三方库。注意,不要妄想对Numpy库进行版本更新。惨痛的教训告诉我,更新Numpy者,Abaqus必崩。
import numpy as np
import pandas as pd

##自定义函数来查看可视化option>>>contour>>>limit中的自动计算的最大最小应变
def get_autoMaxValue_and_autoMinValue_from_Visualization_contourOptions(Modelname, Jobname):
    a = mdb.models[Modelname].rootAssembly
    session.viewports['Viewport: 1'].setValues(displayedObject=a)
    session.mdbData.summary()
    #在Job管理器中打开相应的Job和其Result。job的存储位置,一般在工作目录下
    o3 = session.openOdb(name=Jobname)
    session.viewports['Viewport: 1'].setValues(displayedObject=o3)
    #打开option>>>contour>>>
    session.viewports['Viewport: 1'].odbDisplay.display.setValues(plotState=CONTOURS_ON_DEF)
    session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(variableLabel='U', 
                                                                   outputPosition=NODAL, 
                                                                   refinement=(COMPONENT, 'U1'),
                                                                  )
    max_Transforming=session.viewports['Viewport: 1'].odbDisplay.contourOptions.autoMaxValue
    min_Transforming=session.viewports['Viewport: 1'].odbDisplay.contourOptions.autoMinValue
    return max_Transforming, min_Transforming 



#查看所提交的21个job
max_Transforming_array=np.array([])
min_Transforming_array=np.array([])
Sum_Transforming_array=np.array([])
for i in range(0, 21):
    Modelname = 'Model-1'
    Jobname = 'Job-%s'%(i+ 1) + '.odb'
    Max_Trans, Min_Trans = get_autoMaxValue_and_autoMinValue_from_Visualization_contourOptions(Modelname, Jobname)
    Sum_Trans = Max_Trans - Min_Trans
    #将多组Job的autoMaxValue和autoMinValue存入Numpy数组。
    max_Transforming_array = np.append(max_Transforming_array, Max_Trans)
    min_Transforming_array = np.append(min_Transforming_array, Min_Trans)
    Sum_Transforming_array = np.append(Sum_Transforming_array, Sum_Trans)

    
    

data1 = pd.DataFrame(max_Transforming_array,
                     columns=list({'MaxStrain'}))
data2 = pd.DataFrame(min_Transforming_array, 
                     columns=list({'MinStrain'}))
data3 = pd.DataFrame(Sum_Transforming_array, 
                     columns=list({'SumStrain'}))
data = data1.join(data2)
data = data.join(data3)
#DataFrame的index默从0开始.为了好看,把index偏移一下
#index从1开始,也可以写作data.index = np.arrange(1.len(data))
data.index += 1
writer = pd.ExcelWriter('计算结果.xls')
data.to_excel(writer, 'sheet2')
writer.save()

#查看一下DataFrame表
data

MaxStrain MinStrain SumStrain
1 0.016961 -1.208323 1.225285
2 0.019672 -1.386049 1.405721
3 0.016752 -1.426562 1.443315
4 0.011843 -1.334408 1.346251
5 0.007040 -1.145580 1.152620
6 0.003372 -0.904825 0.908196
7 0.060886 -0.641037 0.701923
8 0.079771 -0.386002 0.465773
9 0.060134 -0.168450 0.228583
10 0.062153 -0.024123 0.086277
11 0.143359 -0.037822 0.181181
12 0.216004 -0.087246 0.303250
13 0.260713 -0.122249 0.382962
14 0.294058 -0.134628 0.428686
15 0.331707 -0.118624 0.450332
16 0.384074 -0.070906 0.454980
17 0.453653 -0.007736 0.461389
18 0.535037 -0.011745 0.546782
19 0.618738 -0.014687 0.633425
20 0.697928 -0.016342 0.714270
21 0.797918 -0.015837 0.813755

问题回溯

  1. 在编写代码过程中,被代码第38行
session.viewports['Viewport: 1'].setValues(displayedObject=odb)

卡住。导致for语句所有的循环都只能读取Job1的数据。那么,我们来分析一下这一句。
Abaqus 6.6 Manual>>9.4 Viewport object中如此定义:
Viewport对象是一个图像容器,其中存储着图像的各种设置以及显示效果,可以设置字体、图例、边界等等。其中setValues(…)用来修改Viewport对象。

setValues(…)参数含义(或使用前提)
displayedObject显示的对象的名称-
displayModeSingle、OVERLAY,-
visibleLayers层的序号when displayMode=OVERLAY
viewManipLayersALL 、CURRENTwhen displayMode=OVERLAY
currentLayer-when displayMode=OVERLAY而且这个参数只影响CURRENT layer
layerOffset数值沿着z方向偏移一定的层数

Viewport对象还包括一些子对象Viewport(…),bringToFront(),disableMultipleColors(),disableRefresh(),enableMultipleColors(),enableRefresh(), getActiveElementLabels(…),getActiveNodeLabels(…),makeCurrent(),maximize(),minimize(),offset(…),restore(),sendToBack(),setColor(…),forceRefresh(),setValues(…)。
同时还可以调用一些通用的成员对象如displayedObject(…),layers(…),view(…),odbDisplaypart(…),Displayassembly(…),Displayviewport(…),AnnotationOptions(…)等等。受限于篇幅,不再赘述,具体请见手册。
2. 查看Contours | Limits |中的自动计算值。这里用到了OdbDisplay模块(对象)中ContourOptions 对象中AutoMaxValue和AutoMinValue。
3. 这里再次希望伟大的博友能慷慨的分享其他版本的Abaqus手册。因为参考文献中的手册不能提供检索功能。只能按书签去寻找相应对象。

参考文献

  1. Abaqus 6.6 手册-32.3 ContourOptions object
  2. 高金凤.Python语言在Abaqus中的应用
  3. Abaqus安装python第三方库函数
  • 8
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PythonABAQUS后处理结合可以实现强大的数据分析和可视化功能。ABAQUS是一种常用的有限元分析软件,而Python是一种功能强大的编程语言。 使用Python进行ABAQUS后处理时,你可以使用ABAQUS提供的Python接口(ABAQUS Scripting)来访问计算结果和模型数据。这个接口允许你以编程的方式读取、处理和分析ABAQUS的输出文件。 以下是一个简单的例子,展示了如何使用Python进行ABAQUS后处理: ```python from abaqus import * from abaqusConstants import * # 打开ODB文件 odb = openOdb('path/to/your/odb/file.odb') # 获取结果数据库 result = odb.steps['Step-1'].frames[-1].fieldOutputs['S'] # 遍历所有节点,并获取应力结果 for node in odb.rootAssembly.instances['PART-1-1'].nodes: stress = result.getSubset(region=node).values[0].data[0] print(f"Node {node.label}: Stress = {stress}") # 关闭ODB文件 odb.close() ``` 上述代码打开了一个ODB文件,并获取了最后一帧的应力结果。然后,通过遍历所有节点,并使用`getSubset`方法获取每个节点的应力值。最后,将节点标签和应力值打印出来。 除了以上例子中展示的基本操作外,你还可以使用Python进行更复杂的后处理任务,如数据处理、绘图和结果可视化等。通过使用Python库(如NumPy、Matplotlib和Pandas)来处理数据,你可以根据自己的需求进行灵活的分析和可视化。 需要注意的是,使用Python进行ABAQUS后处理需要安装Abaqus/Python环境,并且熟悉ABAQUS Scripting接口和Python编程基础。你可以参考ABAQUS提供的官方文档和示例代码来深入学习和掌握这个技术。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值