【Abaqus Python二次开发1-后处理】

75 篇文章 1 订阅
22 篇文章 0 订阅

1、参考

ABAQUS Python二次开发攻略

2、Session对象的使用

2.1 Viewport及其相关对象

2.1.1 rpy脚本日志

打开ABAQUS CAE后,rpy脚本日志(abaqus.rpy)如下,一个Viewport对象’Viewport: 1’已经建立。

# -*- coding: mbcs -*-
#
# Abaqus/CAE Release 2016 replay file
# Internal Version: 2015_09_25-04.31.09 126547
# Run by Admin on Sat Apr 13 14:10:43 2024
#

# from driverUtils import executeOnCaeGraphicsStartup
# executeOnCaeGraphicsStartup()
#: Executing "onCaeGraphicsStartup()" in the site directory ...
from abaqus import *
from abaqusConstants import *
session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=277.064270019531, 
    height=185.775238037109)
session.viewports['Viewport: 1'].makeCurrent()
session.viewports['Viewport: 1'].maximize()
from caeModules import *
from driverUtils import executeOnCaeStartup
executeOnCaeStartup()
session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
    referenceRepresentation=ON)

2.1.2 打开一个odb文件(先更新其版本)

session.upgradeOdb("D:/work/abaqus/code/chapter14/HertzContact.odb", 
    "C:/Users/Admin/AppData/Local/Temp/HertzContact.odb", )
o= session.openOdb('C:/Users/Admin/AppData/Local/Temp/HertzContact.odb')

2.1.3 新建一个Viewport对象

myViewport=session.Viewport(name='myViewport',border=ON,titleBar=ON,titleStyle=CUSTOM,customTitleString='egxam')
session.viewports['Viewport: 1'].minimize()
myViewport.setValues(width=150,height=100,origin=(0,0))

在这里插入图片描述

2.1.4 显示odb对象

myViewport.setValues(displayedObject=o)

在这里插入图片描述

from abaqusConstants import *
myViewport.odbDisplay.setPrimaryVariable(variableLabel='S',outputPosition=INTEGRATION_POINT,refinement=(INVARIANT,'Mises'))
myViewport.odbDisplay.display.setValues(plotState=(CONTOURS_ON_DEF,))
myViewport.odbDisplay.commonOptions.setValues(deformationScaling=UNIFORM,uniformScaleFactor=1,visibleEdges=FEATURE)
myViewport.viewportAnnotationOptions.setValues(triad=ON,state=OFF,annotations=OFF,title=OFF,legendDecimalPlaces=0,legendNumberFormat=FIXED,legendBox=OFF)

在这里插入图片描述

2.1.5 对轴对称问题扩展显示3d结果

myViewport.odbDisplay.basicOptions.setValues(sweepElem=ON,sweepStartAngleElem=10,sweepEndAngleElem=120)

在这里插入图片描述

>>> myViewport.view.rotate(yAngle=30)
>>> myViewport.view.fitView()
>>> myViewport.view.setViewpoint(viewVector=(1,1,1))
>>> myViewport.view.fitView()

在这里插入图片描述

2.2 path对象

2.2.1 根据节点号建path

>>> path0=session.Path(name='Path-0',type=NODE_LIST,expression=(('BASE-1',(2,'26:16:-1',)),))

在这里插入图片描述

2.2.2 根据圆的径向和周向建path

>>> path1=session.Path(name='Path-1',type=RADIAL,expression=((0,0,0),(0,0,1),(0,-1.0,0)),circleDefinition=ORIGIN_AXIS,numSegments=20,radialAngle=0,startRadius=0,endRadius=CIRCLE_RADIUS)

在这里插入图片描述

>>> path2=session.Path(name='Path-2',type=CIRCUMFERENTIAL,expression=((0,0,0),(0,0,1),(0,-1.0,0)),circleDefinition=ORIGIN_AXIS,numSegments=20,startAngle=0,endAngle=120,radius=CIRCLE_RADIUS)

在这里插入图片描述

2.3 XYData对象

2.3.1用二维数组建XYData

>>> xyData1=session.XYData(data=((1,2),(2,4),(3,6)),name='Data1',legendLabel='Data1',xValuesLabel='x',yValuesLabel='y')
>>> print(xyData1.data)
((1.0, 2.0), (2.0, 4.0), (3.0, 6.0))

2.3.2从文本文件建XYData

在这里插入图片描述

>>> xyData2=session.XYDataFromFile(fileName='D:\\work\\abaqus\\code\\chapter14\\dataFile.txt',name='Data2',xField=1,yField=3)
>>> print(xyData2.data)
((1.0, 4.0), (3.0, 8.0), (5.0, 12.0), (7.0, 16.0))
>>> print(session.xyDataObjects['Data2'].data )
((1.0, 4.0), (3.0, 8.0), (5.0, 12.0), (7.0, 16.0)) 

2.3.2从ODB文件建XYData

在这里插入图片描述
读取上图4个单元的Mises应力值,注意session.xyDataListFromField得到的是xyDataObjects组成的表,xyDataObjects的data为((时间,应力),)二维数组

>>> myDatas=session.xyDataListFromField(odb=o,outputPosition=INTEGRATION_POINT,
... variable=(('S',INTEGRATION_POINT,((INVARIANT,'Mises'),)),),
... elementLabels=(('BALL-1',(16,17,)),('BASE-1',(46,91,)),))
>>> myDatas.data
AttributeError: 'list' object has no attribute 'data'
>>> myDatas
[xyDataObjects['S:Mises PI: BALL-1 E: 16 IP: 1'], xyDataObjects['S:Mises PI: BALL-1 E: 17 IP: 1'], xyDataObjects['S:Mises PI: BASE-1 E: 46 IP: 1'], xyDataObjects['S:Mises PI: BASE-1 E: 91 IP: 1']]
>>> myDatas[0].data
((0.0, 0.0), (0.0575000010430813, 545.926025390625), (0.141874998807907, 657.686279296875), (0.217812493443489, 721.672607421875), (0.502578139305115, 884.13427734375), (0.758867204189301, 959.973815917969), (1.0, 1024.65600585938))

从path读取应力:
在这里插入图片描述
注意20段21个点竟然有22个应力值,?因为接触点0位置有两个应力值?data为tuple类型

>>> myData=session.XYDataFromPath(path=path1,shape=UNDEFORMED,labelType=TRUE_DISTANCE,includeIntersections=False,name='myData',variable=(('S',INTEGRATION_POINT,((INVARIANT,'Mises'),)),))
>>> myData.data
((0.0, 1321.88549804688), (0.0, 1024.65600585938), (0.0500000007450581, 1593.16662597656), (0.100000001490116, 2020.07702636719), (0.150000005960464, 2290.76171875), (0.200000002980232, 2464.67138671875), (0.25, 2575.916015625), (0.300000011920929, 2599.04760742188), (0.350000023841858, 2560.650390625), (0.400000035762787, 2449.23193359375), (0.450000047683716, 2317.66381835938), (0.500000059604645, 2156.81103515625), (0.550000071525574, 1996.16442871094), (0.600000083446503, 1863.08544921875), (0.650000095367432, 1730.00634765625), (0.700000107288361, 1602.94653320313), (0.75000011920929, 1500.44799804688), (0.800000131130219, 1397.94958496094), (0.850000143051147, 1295.451171875), (0.900000154972076, 1213.74206542969), (0.950000166893005, 1134.19897460938), (1.00000011920929, 1054.65576171875))

2.4 XYCurve和XYPlot对象

注意XYData依附于XYCurve,XYCurve依附于Chart,Chart依附于XYPlot,XYPlot依附于ViewPort,另外,Abaqus的对象仓库有点像字典类型,对象的成员属性不能用赋值命令,而应用方法(函数)来设置。

>>> myXYPlot=session.XYPlot(name='myXYPlot')
>>> chartName=myXYPlot.charts.keys()[0]
>>> chartName
'Chart-1'
>>> chart=myXYPlot.charts[chartName]
>>> chart
session.charts['Chart-1']
>>> myCurve=session.Curve(xyData=myData)
>>> chart.setValues(curvesToPlot=(myCurve,),)
>>> cvname=session.viewports.keys()[0]
>>> cvname
'Viewport: 1'
>>> cv=session.viewports[cvname]
>>> cvport=cv
>>> cvport
session.viewports['Viewport: 1']
>>> cvport.setValues(displayedObject=myXYPlot)

在这里插入图片描述

2.5 WriteXYReport和WriteFieldReport函数

2.5.1 WriteXYReport

>>> from abaqusConstants import *
>>> session.xyReportOptions.setValues(pageWidth=60,numDigits=6,totals=True,minMax=True,
... pageWidthLimited=SPECIFY,numberFormat=ENGINEERING)
>>> session.writeXYReport(fileName='data.txt',xyData=myData)

在这里插入图片描述

2.5.2 WriteFieldReport

Leaf提取部分单元,再用cvport.odbDisplay.displayGroup.replace(leaf=myLeaf)替换进行显示:

>>> cvport.setValues(displayedObject=o)
>>> import displayGroupOdbToolset as dGO
>>> myLeaf=dGO.LeafFromModelElemLabels(elementLabels=(('BALL-1',('1:40:1',)),))
>>> cvport.odbDisplay.displayGroup.replace(leaf=myLeaf)

在这里插入图片描述
利用session.writeFieldReport将这部分单元应力结果写入报告文档中

session.writeFieldReport(fileName='abaqus.rpt',append=OFF,sortItem='Element Label',odb=o,step=0,frame=6,
outputPosition=INTEGRATION_POINT,variable=(('S',INTEGRATION_POINT,((
INVARIANT,'Mises'),)),))

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值